From 7512c2d27980b8564c32f515d1e96bf7bac34313 Mon Sep 17 00:00:00 2001 From: liyulin <501351981@qq.com> Date: Wed, 27 Mar 2024 17:21:07 +0800 Subject: [PATCH] add: cdn demo --- cdn-demo/docx.html | 23 + cdn-demo/excel.html | 21 + cdn-demo/js-preview-lib/docx.css | 1 + cdn-demo/js-preview-lib/docx.umd.js | 1 + cdn-demo/js-preview-lib/excel.css | 762 +++++++++++++++++++++++++++ cdn-demo/js-preview-lib/excel.umd.js | 43 ++ cdn-demo/js-preview-lib/pdf.umd.js | 1 + cdn-demo/pdf.html | 20 + vue2-demo/README.md | 25 +- vue3-demo/README.md | 25 +- 10 files changed, 876 insertions(+), 46 deletions(-) create mode 100644 cdn-demo/docx.html create mode 100644 cdn-demo/excel.html create mode 100644 cdn-demo/js-preview-lib/docx.css create mode 100644 cdn-demo/js-preview-lib/docx.umd.js create mode 100644 cdn-demo/js-preview-lib/excel.css create mode 100644 cdn-demo/js-preview-lib/excel.umd.js create mode 100644 cdn-demo/js-preview-lib/pdf.umd.js create mode 100644 cdn-demo/pdf.html diff --git a/cdn-demo/docx.html b/cdn-demo/docx.html new file mode 100644 index 0000000..af3b544 --- /dev/null +++ b/cdn-demo/docx.html @@ -0,0 +1,23 @@ + + + + + docx预览 + + + + +
+ + + + \ No newline at end of file diff --git a/cdn-demo/excel.html b/cdn-demo/excel.html new file mode 100644 index 0000000..3d4ac15 --- /dev/null +++ b/cdn-demo/excel.html @@ -0,0 +1,21 @@ + + + + + excel预览 + + + + +
+ + + + \ No newline at end of file diff --git a/cdn-demo/js-preview-lib/docx.css b/cdn-demo/js-preview-lib/docx.css new file mode 100644 index 0000000..c551029 --- /dev/null +++ b/cdn-demo/js-preview-lib/docx.css @@ -0,0 +1 @@ +.vue-office-docx{height:100%;overflow-y:auto}.vue-office-docx .docx-wrapper>section.docx{margin-bottom:5px}@media screen and (max-width: 800px){.vue-office-docx .docx-wrapper{padding:10px}.vue-office-docx .docx-wrapper>section.docx{padding:10px!important;width:100%!important}} diff --git a/cdn-demo/js-preview-lib/docx.umd.js b/cdn-demo/js-preview-lib/docx.umd.js new file mode 100644 index 0000000..fe5ebb1 --- /dev/null +++ b/cdn-demo/js-preview-lib/docx.umd.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("stream"),require("events"),require("buffer"),require("util")):"function"==typeof define&&define.amd?define(["stream","events","buffer","util"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).jsPreviewDocx=t(e.require$$0,e.require$$2,e.require$$0$1,e.require$$1)}(this,(function(e,t,r,n){"use strict";void 0===window.setImmediate&&(window.setImmediate=function(e,...t){setTimeout((()=>e(t)))});var a,i,s,o,l,u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},c={exports:{}},h={},d={},f={},p={exports:{}},m={exports:{}};function g(){if(a)return m.exports;return a=1,"undefined"==typeof process||!process.version||0===process.version.indexOf("v0.")||0===process.version.indexOf("v1.")&&0!==process.version.indexOf("v1.8.")?m.exports={nextTick:function(e,t,r,n){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var a,i,s=arguments.length;switch(s){case 0:case 1:return process.nextTick(e);case 2:return process.nextTick((function(){e.call(null,t)}));case 3:return process.nextTick((function(){e.call(null,t,r)}));case 4:return process.nextTick((function(){e.call(null,t,r,n)}));default:for(a=new Array(s-1),i=0;i0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return t.alloc(0);for(var r,n,a,i=t.allocUnsafe(e>>>0),s=this.head,o=0;s;)r=s.data,n=i,a=o,r.copy(n,a),o+=s.data.length,s=s.next;return i},e}(),r&&r.inspect&&r.inspect.custom&&(e.exports.prototype[r.inspect.custom]=function(){var e=r.inspect({length:this.length});return this.constructor.name+" "+e})}(F)),F.exports}function j(){if(N)return D;N=1;var e=g();function t(e,t){e.emit("error",t)}return D={destroy:function(r,n){var a=this,i=this._readableState&&this._readableState.destroyed,s=this._writableState&&this._writableState.destroyed;return i||s?(n?n(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(t,this,r)):e.nextTick(t,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,(function(r){!n&&r?a._writableState?a._writableState.errorEmitted||(a._writableState.errorEmitted=!0,e.nextTick(t,a,r)):e.nextTick(t,a,r):n&&n(r)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}}function U(){if(O)return R;O=1;var e=g();function t(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var a=n.callback;t.pendingcb--,a(r),n=n.next}t.corkedRequestsFree.next=e}(t,e)}}R=m;var r,a=!process.browser&&["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:e.nextTick;m.WritableState=p;var i=Object.create(S());i.inherits=T();var s={deprecate:M?B:(M=1,B=n.deprecate)},o=b(),l=w().Buffer,c=(void 0!==u?u:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){};var h,d=j();function f(){}function p(n,i){r=r||W(),n=n||{};var s=i instanceof r;this.objectMode=!!n.objectMode,s&&(this.objectMode=this.objectMode||!!n.writableObjectMode);var o=n.highWaterMark,l=n.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:s&&(l||0===l)?l:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var c=!1===n.decodeStrings;this.decodeStrings=!c,this.defaultEncoding=n.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,r){var n=t._writableState,i=n.sync,s=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),r)!function(t,r,n,a,i){--r.pendingcb,n?(e.nextTick(i,a),e.nextTick(C,t,r),t._writableState.errorEmitted=!0,t.emit("error",a)):(i(a),t._writableState.errorEmitted=!0,t.emit("error",a),C(t,r))}(t,n,i,r,s);else{var o=k(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||_(t,n),i?a(v,t,n,o,s):v(t,n,o,s)}}(i,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new t(this)}function m(e){if(r=r||W(),!(h.call(m,this)||this instanceof r))return new m(e);this._writableState=new p(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),o.call(this)}function y(e,t,r,n,a,i,s){t.writelen=n,t.writecb=s,t.writing=!0,t.sync=!0,r?e._writev(a,t.onwrite):e._write(a,i,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,n(),C(e,t)}function _(e,r){r.bufferProcessing=!0;var n=r.bufferedRequest;if(e._writev&&n&&n.next){var a=r.bufferedRequestCount,i=new Array(a),s=r.corkedRequestsFree;s.entry=n;for(var o=0,l=!0;n;)i[o]=n,n.isBuf||(l=!1),n=n.next,o+=1;i.allBuffers=l,y(e,r,!0,r.length,i,"",s.finish),r.pendingcb++,r.lastBufferedRequest=null,s.next?(r.corkedRequestsFree=s.next,s.next=null):r.corkedRequestsFree=new t(r),r.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,c=n.encoding,h=n.callback;if(y(e,r,!1,r.objectMode?1:u.length,u,c,h),n=n.next,r.bufferedRequestCount--,r.writing)break}null===n&&(r.lastBufferedRequest=null)}r.bufferedRequest=n,r.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final((function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),C(e,t)}))}function C(t,r){var n=k(r);return n&&(!function(t,r){r.prefinished||r.finalCalled||("function"==typeof t._final?(r.pendingcb++,r.finalCalled=!0,e.nextTick(x,t,r)):(r.prefinished=!0,t.emit("prefinish")))}(t,r),0===r.pendingcb&&(r.finished=!0,t.emit("finish"))),n}return i.inherits(m,o),p.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(p.prototype,"buffer",{get:s.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(h=Function.prototype[Symbol.hasInstance],Object.defineProperty(m,Symbol.hasInstance,{value:function(e){return!!h.call(this,e)||this===m&&(e&&e._writableState instanceof p)}})):h=function(e){return e instanceof this},m.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},m.prototype.write=function(t,r,n){var a,i=this._writableState,s=!1,o=!i.objectMode&&(a=t,l.isBuffer(a)||a instanceof c);return o&&!l.isBuffer(t)&&(t=function(e){return l.from(e)}(t)),"function"==typeof r&&(n=r,r=null),o?r="buffer":r||(r=i.defaultEncoding),"function"!=typeof n&&(n=f),i.ended?function(t,r){var n=new Error("write after end");t.emit("error",n),e.nextTick(r,n)}(this,n):(o||function(t,r,n,a){var i=!0,s=!1;return null===n?s=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||r.objectMode||(s=new TypeError("Invalid non-string/buffer chunk")),s&&(t.emit("error",s),e.nextTick(a,s),i=!1),i}(this,i,t,n))&&(i.pendingcb++,s=function(e,t,r,n,a,i){if(!r){var s=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=l.from(t,r));return t}(t,n,a);n!==s&&(r=!0,a="buffer",n=s)}var o=t.objectMode?1:n.length;t.length+=o;var u=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(m.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),m.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},m.prototype._writev=null,m.prototype.end=function(t,r,n){var a=this._writableState;"function"==typeof t?(n=t,t=null,r=null):"function"==typeof r&&(n=r,r=null),null!=t&&this.write(t,r),a.corked&&(a.corked=1,this.uncork()),a.ending||function(t,r,n){r.ending=!0,C(t,r),n&&(r.finished?e.nextTick(n):t.once("finish",n));r.ended=!0,t.writable=!1}(this,a,n)},Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),m.prototype.destroy=d.destroy,m.prototype._undestroy=d.undestroy,m.prototype._destroy=function(e,t){this.end(),t(e)},R}function W(){if(z)return I;z=1;var e=g(),t=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};I=l;var r=Object.create(S());r.inherits=T();var n=ee(),a=U();r.inherits(l,n);for(var i=t(a.prototype),s=0;s>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function i(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function s(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function o(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function l(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function u(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):""}return Y.StringDecoder=r,r.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--a=0)return i>0&&(e.lastNeed=i-2),i;if(--a=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var a=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,a),e.toString("utf8",t,a)},r.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length},Y}function ee(){if(Z)return $;Z=1;var e=g();$=x;var r,a=function(){if(s)return i;s=1;var e={}.toString;return i=Array.isArray||function(t){return"[object Array]"==e.call(t)}}();x.ReadableState=k,t.EventEmitter;var o=function(e,t){return e.listeners(t).length},l=b(),c=w().Buffer,h=(void 0!==u?u:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){};var d=Object.create(S());d.inherits=T();var f=n,p=void 0;p=f&&f.debuglog?f.debuglog("stream"):function(){};var m,y=L(),v=j();d.inherits(x,l);var _=["error","close","destroy","pause","resume"];function k(e,t){e=e||{};var n=t instanceof(r=r||W());this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var a=e.highWaterMark,i=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=a||0===a?a:n&&(i||0===i)?i:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new y,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(m||(m=Q().StringDecoder),this.decoder=new m(e.encoding),this.encoding=e.encoding)}function x(e){if(r=r||W(),!(this instanceof x))return new x(e);this._readableState=new k(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function C(e,t,r,n,a){var i,s=e._readableState;null===t?(s.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,D(e)}(e,s)):(a||(i=function(e,t){var r;n=t,c.isBuffer(n)||n instanceof h||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(s,t)),i?e.emit("error",i):s.objectMode||t&&t.length>0?("string"==typeof t||s.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),n?s.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):A(e,s,t,!0):s.ended?e.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!r?(t=s.decoder.write(t),s.objectMode||0!==t.length?A(e,s,t,!1):B(e,s)):A(e,s,t,!1))):n||(s.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=P?e=P:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function D(t){var r=t._readableState;r.needReadable=!1,r.emittedReadable||(p("emitReadable",r.flowing),r.emittedReadable=!0,r.sync?e.nextTick(N,t):N(t))}function N(e){p("emit readable"),e.emit("readable"),I(e)}function B(t,r){r.readingMore||(r.readingMore=!0,e.nextTick(M,t,r))}function M(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ei.length?i.length:e;if(s===i.length?a+=i:a+=i.slice(0,e),0===(e-=s)){s===i.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(s));break}++n}return t.length-=n,a}(e,t):function(e,t){var r=c.allocUnsafe(e),n=t.head,a=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var i=n.data,s=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,s),0===(e-=s)){s===i.length?(++a,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(s));break}++a}return t.length-=a,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function F(t){var r=t._readableState;if(r.length>0)throw new Error('"endReadable()" called on non-empty stream');r.endEmitted||(r.ended=!0,e.nextTick(U,r,t))}function U(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function H(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?F(this):D(this),null;if(0===(e=E(e,t))&&t.ended)return 0===t.length&&F(this),null;var n,a=t.needReadable;return p("need readable",a),(0===t.length||t.length-e0?z(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&F(this)),null!==n&&this.emit("data",n),n},x.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},x.prototype.pipe=function(t,r){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=t;break;case 1:i.pipes=[i.pipes,t];break;default:i.pipes.push(t)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,r);var s=(!r||!1!==r.end)&&t!==process.stdout&&t!==process.stderr?u:y;function l(e,r){p("onunpipe"),e===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),t.removeListener("close",g),t.removeListener("finish",b),t.removeListener("drain",c),t.removeListener("error",m),t.removeListener("unpipe",l),n.removeListener("end",u),n.removeListener("end",y),n.removeListener("data",f),h=!0,!i.awaitDrain||t._writableState&&!t._writableState.needDrain||c())}function u(){p("onend"),t.end()}i.endEmitted?e.nextTick(s):n.once("end",s),t.on("unpipe",l);var c=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&o(e,"data")&&(t.flowing=!0,I(e))}}(n);t.on("drain",c);var h=!1;var d=!1;function f(e){p("ondata"),d=!1,!1!==t.write(e)||d||((1===i.pipesCount&&i.pipes===t||i.pipesCount>1&&-1!==H(i.pipes,t))&&!h&&(p("false write response, pause",i.awaitDrain),i.awaitDrain++,d=!0),n.pause())}function m(e){p("onerror",e),y(),t.removeListener("error",m),0===o(t,"error")&&t.emit("error",e)}function g(){t.removeListener("finish",b),y()}function b(){p("onfinish"),t.removeListener("close",g),y()}function y(){p("unpipe"),n.unpipe(t)}return n.on("data",f),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(t,"error",m),t.once("close",g),t.once("finish",b),t.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),t},x.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,a=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i>2,o=(3&n)<<4|a>>4,l=f>1?(15&a)<<2|i>>6:64,u=f>2?63&i:64,c.push(r.charAt(s)+r.charAt(o)+r.charAt(l)+r.charAt(u));return c.join("")},fe.decode=function(e){var n,a,i,s,o,l,u=0,c=0,h="data:";if(e.substr(0,5)===h)throw new Error("Invalid base64 input, it looks like a data url.");var d,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(e.charAt(e.length-1)===r.charAt(64)&&f--,e.charAt(e.length-2)===r.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(d=t.uint8array?new Uint8Array(0|f):new Array(0|f);u>4,a=(15&s)<<4|(o=r.indexOf(e.charAt(u++)))>>2,i=(3&o)<<6|(l=r.indexOf(e.charAt(u++))),d[c++]=n,64!==o&&(d[c++]=a),64!==l&&(d[c++]=i);return d},fe}function me(){return se?ie:(se=1,ie={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if("number"==typeof e)throw new Error('The "data" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&"function"==typeof e.on&&"function"==typeof e.pause&&"function"==typeof e.resume}})}function ge(){if(ce)return ue;ce=1;var e=function(){if(le)return oe;le=1;var e,t,r=u.MutationObserver||u.WebKitMutationObserver;if(process.browser)if(r){var n=0,a=new r(l),i=u.document.createTextNode("");a.observe(i,{characterData:!0}),e=function(){i.data=n=++n%2}}else if(u.setImmediate||void 0===u.MessageChannel)e="document"in u&&"onreadystatechange"in u.document.createElement("script")?function(){var e=u.document.createElement("script");e.onreadystatechange=function(){l(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},u.document.documentElement.appendChild(e)}:function(){setTimeout(l,0)};else{var s=new u.MessageChannel;s.port1.onmessage=l,e=function(){s.port2.postMessage(0)}}else e=function(){process.nextTick(l)};var o=[];function l(){var e,r;t=!0;for(var n=o.length;n;){for(r=o,o=[],e=-1;++e1;)try{return o.stringifyByChunk(t,n,r)}catch(e){r=Math.floor(r/2)}return o.stringifyByChar(t)}function u(e,t){for(var r=0;r "+e:e}},we=e}function Me(){return ke||(ke=1,function(e){for(var t=Ne(),r=ne(),n=me(),a=Be(),i=new Array(256),s=0;s<256;s++)i[s]=s>=252?6:s>=248?5:s>=240?4:s>=224?3:s>=192?2:1;i[254]=i[254]=1;function o(){a.call(this,"utf-8 decode"),this.leftOver=null}function l(){a.call(this,"utf-8 encode")}e.utf8encode=function(e){return r.nodebuffer?n.newBufferFrom(e,"utf-8"):function(e){var t,n,a,i,s,o=e.length,l=0;for(i=0;i>>6,t[s++]=128|63&n):n<65536?(t[s++]=224|n>>>12,t[s++]=128|n>>>6&63,t[s++]=128|63&n):(t[s++]=240|n>>>18,t[s++]=128|n>>>12&63,t[s++]=128|n>>>6&63,t[s++]=128|63&n);return t}(e)},e.utf8decode=function(e){return r.nodebuffer?t.transformTo("nodebuffer",e).toString("utf-8"):function(e){var r,n,a,s,o=e.length,l=new Array(2*o);for(n=0,r=0;r4)l[n++]=65533,r+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&r1?l[n++]=65533:a<65536?l[n++]=a:(a-=65536,l[n++]=55296|a>>10&1023,l[n++]=56320|1023&a)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),t.applyFromCharCode(l)}(e=t.transformTo(r.uint8array?"uint8array":"array",e))},t.inherits(o,a),o.prototype.processChunk=function(n){var a=t.transformTo(r.uint8array?"uint8array":"array",n.data);if(this.leftOver&&this.leftOver.length){if(r.uint8array){var s=a;(a=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),a.set(s,this.leftOver.length)}else a=this.leftOver.concat(a);this.leftOver=null}var o=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+i[e[r]]>t?r:t}(a),l=a;o!==a.length&&(r.uint8array?(l=a.subarray(0,o),this.leftOver=a.subarray(o,a.length)):(l=a.slice(0,o),this.leftOver=a.slice(o,a.length))),this.push({data:e.utf8decode(l),meta:n.meta})},o.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:e.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},e.Utf8DecodeWorker=o,t.inherits(l,a),l.prototype.processChunk=function(t){this.push({data:e.utf8encode(t.data),meta:t.meta})},e.Utf8EncodeWorker=l}(h)),h}function Re(){if(Te)return Pe;Te=1;var e=Ne(),t=function(){if(xe)return Se;xe=1;var e=Be(),t=Ne();function r(t){e.call(this,"ConvertWorker to "+t),this.destType=t}return t.inherits(r,e),r.prototype.processChunk=function(e){this.push({data:t.transformTo(this.destType,e.data),meta:e.meta})},Se=r}(),r=Be(),n=pe(),a=ne(),i=be(),s=null;if(a.nodestream)try{s=function(){if(Ae)return Ce;Ae=1;var e=re().Readable;function t(t,r,n){e.call(this,r),this._helper=t;var a=this;t.on("data",(function(e,t){a.push(e)||a._helper.pause(),n&&n(t)})).on("error",(function(e){a.emit("error",e)})).on("end",(function(){a.push(null)}))}return Ne().inherits(t,e),t.prototype._read=function(){this._helper.resume()},Ce=t}()}catch(e){}function o(t,r){return new i.Promise((function(a,i){var s=[],o=t._internalType,l=t._outputType,u=t._mimeType;t.on("data",(function(e,t){s.push(e),r&&r(t)})).on("error",(function(e){s=[],i(e)})).on("end",(function(){try{var t=function(t,r,a){switch(t){case"blob":return e.newBlob(e.transformTo("arraybuffer",r),a);case"base64":return n.encode(r);default:return e.transformTo(t,r)}}(l,function(e,t){var r,n=0,a=null,i=0;for(r=0;r=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},Ie=r}function Je(){if(Le)return Fe;Le=1;var e=Ne();var t=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();return Fe=function(r,n){return void 0!==r&&r.length?"string"!==e.getTypeOf(r)?function(e,r,n,a){var i=t,s=a+n;e^=-1;for(var o=a;o>>8^i[255&(e^r[o])];return-1^e}(0|n,r,r.length,0):function(e,r,n,a){var i=t,s=a+n;e^=-1;for(var o=a;o>>8^i[255&(e^r.charCodeAt(o))];return-1^e}(0|n,r,r.length,0):0}}function Ye(){if(Ue)return je;Ue=1;var e=Be(),t=Je();function r(){e.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}return Ne().inherits(r,e),r.prototype.processChunk=function(e){this.streamInfo.crc32=t(e.data,this.streamInfo.crc32||0),this.push(e)},je=r}function Qe(){if(Ze)return $e;Ze=1;var e=be(),t=Ge(),r=Ye(),n=function(){if(He)return We;He=1;var e=Ne(),t=Be();function r(e){t.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}return e.inherits(r,t),r.prototype.processChunk=function(e){if(e){var r=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=r+e.data.length}t.prototype.processChunk.call(this,e)},We=r}();function a(e,t,r,n,a){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=a}return a.prototype={getContentWorker:function(){var r=new t(e.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new n("data_length")),a=this;return r.on("end",(function(){if(this.streamInfo.data_length!==a.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),r},getCompressedWorker:function(){return new t(e.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},a.createWorkerFrom=function(e,t,a){return e.pipe(new r).pipe(new n("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new n("compressedSize")).withStreamInfo("compression",t)},$e=a}var et,tt={},rt={},nt={},at={};function it(){return et||(et=1,function(e){var t="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var n=t.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(var a in n)r(n,a)&&(e[a]=n[a])}}return e},e.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var n={arraySet:function(e,t,r,n,a){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),a);else for(var i=0;i=0;)e[t]=0}var a=0,i=29,s=256,o=s+1+i,l=30,u=19,c=2*o+1,h=15,d=16,f=7,p=256,m=16,g=17,b=18,y=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],v=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],w=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],_=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],k=new Array(2*(o+2));n(k);var S=new Array(2*l);n(S);var x=new Array(512);n(x);var C=new Array(256);n(C);var A=new Array(i);n(A);var P,T,E,D=new Array(l);function N(e,t,r,n,a){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=a,this.has_stree=e&&e.length}function B(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function M(e){return e<256?x[e]:x[256+(e>>>7)]}function R(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function O(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function F(e,t,r){var n,a,i=new Array(h+1),s=0;for(n=1;n<=h;n++)i[n]=s=s+r[n-1]<<1;for(a=0;a<=t;a++){var o=e[2*a+1];0!==o&&(e[2*a]=z(i[o]++,o))}}function L(e){var t;for(t=0;t8?R(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function U(e,t,r,n){var a=2*t,i=2*r;return e[a]>1;r>=1;r--)W(e,i,r);a=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],W(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*a]=i[2*r]+i[2*n],e.depth[a]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=a,e.heap[1]=a++,W(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,a,i,s,o,l=t.dyn_tree,u=t.max_code,d=t.stat_desc.static_tree,f=t.stat_desc.has_stree,p=t.stat_desc.extra_bits,m=t.stat_desc.extra_base,g=t.stat_desc.max_length,b=0;for(i=0;i<=h;i++)e.bl_count[i]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;rg&&(i=g,b++),l[2*n+1]=i,n>u||(e.bl_count[i]++,s=0,n>=m&&(s=p[n-m]),o=l[2*n],e.opt_len+=o*(i+s),f&&(e.static_len+=o*(d[2*n+1]+s)));if(0!==b){do{for(i=g-1;0===e.bl_count[i];)i--;e.bl_count[i]--,e.bl_count[i+1]+=2,e.bl_count[g]--,b-=2}while(b>0);for(i=g;0!==i;i--)for(n=e.bl_count[i];0!==n;)(a=e.heap[--r])>u||(l[2*a+1]!==i&&(e.opt_len+=(i-l[2*a+1])*l[2*a],l[2*a+1]=i),n--)}}(e,t),F(i,u,e.bl_count)}function Z(e,t,r){var n,a,i=-1,s=t[1],o=0,l=7,u=4;for(0===s&&(l=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)a=s,s=t[2*(n+1)+1],++o>=7;n0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var n,a=4093624447;for(n=0;n<=31;n++,a>>>=1)if(1&a&&0!==e.dyn_ltree[2*n])return t;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return r;for(n=32;n=3&&0===e.bl_tree[2*_[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(l=e.static_len+3+7>>>3)<=o&&(o=l)):o=l=a+5,a+4<=o&&-1!==n?X(e,n,a,i):4===e.strategy||l===o?(O(e,2+(i?1:0),3),H(e,k,S)):(O(e,4+(i?1:0),3),function(e,t,r,n){var a;for(O(e,t-257,5),O(e,r-1,5),O(e,n-4,4),a=0;a>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(C[r]+s+1)]++,e.dyn_dtree[2*M(t)]++),e.last_lit===e.lit_bufsize-1},gt._tr_align=function(e){O(e,2,3),I(e,p,k),function(e){16===e.bi_valid?(R(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)},gt}function yt(){if(lt)return ot;return lt=1,ot=function(e,t,r,n){for(var a=65535&e|0,i=e>>>16&65535|0,s=0;0!==r;){r-=s=r>2e3?2e3:r;do{i=i+(a=a+t[n++]|0)|0}while(--s);a%=65521,i%=65521}return a|i<<16|0}}function vt(){if(ct)return ut;ct=1;var e=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();return ut=function(t,r,n,a){var i=e,s=a+n;t^=-1;for(var o=a;o>>8^i[255&(t^r[o])];return-1^t}}function wt(){return dt?ht:(dt=1,ht={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"})}function _t(){if(ft)return mt;ft=1;var e,t=it(),r=bt(),n=yt(),a=vt(),i=wt(),s=0,o=4,l=0,u=-2,c=-1,h=4,d=2,f=8,p=9,m=286,g=30,b=19,y=2*m+1,v=15,w=3,_=258,k=_+w+1,S=42,x=103,C=113,A=666,P=1,T=2,E=3,D=4;function N(e,t){return e.msg=i[t],t}function B(e){return(e<<1)-(e>4?9:0)}function M(e){for(var t=e.length;--t>=0;)e[t]=0}function R(e){var r=e.state,n=r.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(t.arraySet(e.output,r.pending_buf,r.pending_out,n,e.next_out),e.next_out+=n,r.pending_out+=n,e.total_out+=n,e.avail_out-=n,r.pending-=n,0===r.pending&&(r.pending_out=0))}function O(e,t){r._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,R(e.strm)}function I(e,t){e.pending_buf[e.pending++]=t}function z(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function F(e,t){var r,n,a=e.max_chain_length,i=e.strstart,s=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-k?e.strstart-(e.w_size-k):0,u=e.window,c=e.w_mask,h=e.prev,d=e.strstart+_,f=u[i+s-1],p=u[i+s];e.prev_length>=e.good_match&&(a>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+s]===p&&u[r+s-1]===f&&u[r]===u[i]&&u[++r]===u[i+1]){i+=2,r++;do{}while(u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&u[++i]===u[++r]&&is){if(e.match_start=t,s=n,n>=o)break;f=u[i+s-1],p=u[i+s]}}}while((t=h[t&c])>l&&0!=--a);return s<=e.lookahead?s:e.lookahead}function L(e){var r,i,s,o,l,u,c,h,d,f,p=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-k)){t.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,r=i=e.hash_size;do{s=e.head[--r],e.head[r]=s>=p?s-p:0}while(--i);r=i=p;do{s=e.prev[--r],e.prev[r]=s>=p?s-p:0}while(--i);o+=p}if(0===e.strm.avail_in)break;if(u=e.strm,c=e.window,h=e.strstart+e.lookahead,d=o,f=void 0,(f=u.avail_in)>d&&(f=d),i=0===f?0:(u.avail_in-=f,t.arraySet(c,u.input,u.next_in,f,h),1===u.state.wrap?u.adler=n(u.adler,c,f,h):2===u.state.wrap&&(u.adler=a(u.adler,c,f,h)),u.next_in+=f,u.total_in+=f,f),e.lookahead+=i,e.lookahead+e.insert>=w)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=w&&(e.ins_h=(e.ins_h<=w)if(a=r._tr_tally(e,e.strstart-e.match_start,e.match_length-w),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=w){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=w&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=w-1)),e.prev_length>=w&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-w,a=r._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-w),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(o=2,a-=16),i<1||i>p||n!==f||a<8||a>15||r<0||r>9||s<0||s>h)return N(e,u);8===a&&(a=9);var l=new H;return e.state=l,l.strm=e,l.wrap=o,l.gzhead=null,l.w_bits=a,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(L(e),0===e.lookahead&&t===s)return P;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,O(e,!1),0===e.strm.avail_out))return P;if(e.strstart-e.block_start>=e.w_size-k&&(O(e,!1),0===e.strm.avail_out))return P}return e.insert=0,t===o?(O(e,!0),0===e.strm.avail_out?E:D):(e.strstart>e.block_start&&(O(e,!1),e.strm.avail_out),P)})),new W(4,4,8,4,j),new W(4,5,16,8,j),new W(4,6,32,32,j),new W(4,4,16,16,U),new W(8,16,32,32,U),new W(8,16,128,128,U),new W(8,32,128,256,U),new W(32,128,258,1024,U),new W(32,258,258,4096,U)],mt.deflateInit=function(e,t){return V(e,t,f,15,8,0)},mt.deflateInit2=V,mt.deflateReset=Z,mt.deflateResetKeep=$,mt.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?u:(e.state.gzhead=t,l):u},mt.deflate=function(t,n){var i,c,h,d;if(!t||!t.state||n>5||n<0)return t?N(t,u):u;if(c=t.state,!t.output||!t.input&&0!==t.avail_in||c.status===A&&n!==o)return N(t,0===t.avail_out?-5:u);if(c.strm=t,i=c.last_flush,c.last_flush=n,c.status===S)if(2===c.wrap)t.adler=0,I(c,31),I(c,139),I(c,8),c.gzhead?(I(c,(c.gzhead.text?1:0)+(c.gzhead.hcrc?2:0)+(c.gzhead.extra?4:0)+(c.gzhead.name?8:0)+(c.gzhead.comment?16:0)),I(c,255&c.gzhead.time),I(c,c.gzhead.time>>8&255),I(c,c.gzhead.time>>16&255),I(c,c.gzhead.time>>24&255),I(c,9===c.level?2:c.strategy>=2||c.level<2?4:0),I(c,255&c.gzhead.os),c.gzhead.extra&&c.gzhead.extra.length&&(I(c,255&c.gzhead.extra.length),I(c,c.gzhead.extra.length>>8&255)),c.gzhead.hcrc&&(t.adler=a(t.adler,c.pending_buf,c.pending,0)),c.gzindex=0,c.status=69):(I(c,0),I(c,0),I(c,0),I(c,0),I(c,0),I(c,9===c.level?2:c.strategy>=2||c.level<2?4:0),I(c,3),c.status=C);else{var p=f+(c.w_bits-8<<4)<<8;p|=(c.strategy>=2||c.level<2?0:c.level<6?1:6===c.level?2:3)<<6,0!==c.strstart&&(p|=32),p+=31-p%31,c.status=C,z(c,p),0!==c.strstart&&(z(c,t.adler>>>16),z(c,65535&t.adler)),t.adler=1}if(69===c.status)if(c.gzhead.extra){for(h=c.pending;c.gzindex<(65535&c.gzhead.extra.length)&&(c.pending!==c.pending_buf_size||(c.gzhead.hcrc&&c.pending>h&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),R(t),h=c.pending,c.pending!==c.pending_buf_size));)I(c,255&c.gzhead.extra[c.gzindex]),c.gzindex++;c.gzhead.hcrc&&c.pending>h&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),c.gzindex===c.gzhead.extra.length&&(c.gzindex=0,c.status=73)}else c.status=73;if(73===c.status)if(c.gzhead.name){h=c.pending;do{if(c.pending===c.pending_buf_size&&(c.gzhead.hcrc&&c.pending>h&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),R(t),h=c.pending,c.pending===c.pending_buf_size)){d=1;break}d=c.gzindexh&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),0===d&&(c.gzindex=0,c.status=91)}else c.status=91;if(91===c.status)if(c.gzhead.comment){h=c.pending;do{if(c.pending===c.pending_buf_size&&(c.gzhead.hcrc&&c.pending>h&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),R(t),h=c.pending,c.pending===c.pending_buf_size)){d=1;break}d=c.gzindexh&&(t.adler=a(t.adler,c.pending_buf,c.pending-h,h)),0===d&&(c.status=x)}else c.status=x;if(c.status===x&&(c.gzhead.hcrc?(c.pending+2>c.pending_buf_size&&R(t),c.pending+2<=c.pending_buf_size&&(I(c,255&t.adler),I(c,t.adler>>8&255),t.adler=0,c.status=C)):c.status=C),0!==c.pending){if(R(t),0===t.avail_out)return c.last_flush=-1,l}else if(0===t.avail_in&&B(n)<=B(i)&&n!==o)return N(t,-5);if(c.status===A&&0!==t.avail_in)return N(t,-5);if(0!==t.avail_in||0!==c.lookahead||n!==s&&c.status!==A){var m=2===c.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(L(e),0===e.lookahead)){if(t===s)return P;break}if(e.match_length=0,n=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(O(e,!1),0===e.strm.avail_out))return P}return e.insert=0,t===o?(O(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(O(e,!1),0===e.strm.avail_out)?P:T}(c,n):3===c.strategy?function(e,t){for(var n,a,i,l,u=e.window;;){if(e.lookahead<=_){if(L(e),e.lookahead<=_&&t===s)return P;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=w&&e.strstart>0&&(a=u[i=e.strstart-1])===u[++i]&&a===u[++i]&&a===u[++i]){l=e.strstart+_;do{}while(a===u[++i]&&a===u[++i]&&a===u[++i]&&a===u[++i]&&a===u[++i]&&a===u[++i]&&a===u[++i]&&a===u[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=w?(n=r._tr_tally(e,1,e.match_length-w),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=r._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(O(e,!1),0===e.strm.avail_out))return P}return e.insert=0,t===o?(O(e,!0),0===e.strm.avail_out?E:D):e.last_lit&&(O(e,!1),0===e.strm.avail_out)?P:T}(c,n):e[c.level].func(c,n);if(m!==E&&m!==D||(c.status=A),m===P||m===E)return 0===t.avail_out&&(c.last_flush=-1),l;if(m===T&&(1===n?r._tr_align(c):5!==n&&(r._tr_stored_block(c,0,0,!1),3===n&&(M(c.head),0===c.lookahead&&(c.strstart=0,c.block_start=0,c.insert=0))),R(t),0===t.avail_out))return c.last_flush=-1,l}return n!==o?l:c.wrap<=0?1:(2===c.wrap?(I(c,255&t.adler),I(c,t.adler>>8&255),I(c,t.adler>>16&255),I(c,t.adler>>24&255),I(c,255&t.total_in),I(c,t.total_in>>8&255),I(c,t.total_in>>16&255),I(c,t.total_in>>24&255)):(z(c,t.adler>>>16),z(c,65535&t.adler)),R(t),c.wrap>0&&(c.wrap=-c.wrap),0!==c.pending?l:1)},mt.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==S&&69!==t&&73!==t&&91!==t&&t!==x&&t!==C&&t!==A?N(e,u):(e.state=null,t===C?N(e,-3):l):u},mt.deflateSetDictionary=function(e,r){var a,i,s,o,c,h,d,f,p=r.length;if(!e||!e.state)return u;if(2===(o=(a=e.state).wrap)||1===o&&a.status!==S||a.lookahead)return u;for(1===o&&(e.adler=n(e.adler,r,p,0)),a.wrap=0,p>=a.w_size&&(0===o&&(M(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new t.Buf8(a.w_size),t.arraySet(f,r,p-a.w_size,a.w_size,0),r=f,p=a.w_size),c=e.avail_in,h=e.next_in,d=e.input,e.avail_in=p,e.next_in=0,e.input=r,L(a);a.lookahead>=w;){i=a.strstart,s=a.lookahead-(w-1);do{a.ins_h=(a.ins_h<=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;function i(n,a){if(a<65534&&(n.subarray&&r||!n.subarray&&t))return String.fromCharCode.apply(null,e.shrinkBuf(n,a));for(var i="",s=0;s>>6,r[s++]=128|63&n):n<65536?(r[s++]=224|n>>>12,r[s++]=128|n>>>6&63,r[s++]=128|63&n):(r[s++]=240|n>>>18,r[s++]=128|n>>>12&63,r[s++]=128|n>>>6&63,r[s++]=128|63&n);return r},At.buf2binstring=function(e){return i(e,e.length)},At.binstring2buf=function(t){for(var r=new e.Buf8(t.length),n=0,a=r.length;n4)u[a++]=65533,r+=o-1;else{for(s&=2===o?31:3===o?15:7;o>1&&r1?u[a++]=65533:s<65536?u[a++]=s:(s-=65536,u[a++]=55296|s>>10&1023,u[a++]=56320|1023&s)}return i(u,a)},At.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+n[e[r]]>t?r:t},At}function Tt(){if(xt)return St;return xt=1,St=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}}var Et,Dt,Nt,Bt,Mt,Rt,Ot,It,zt,Ft,Lt,jt,Ut,Wt,Ht={},$t={};function Zt(){if(Mt)return $t;Mt=1;var e=it(),t=yt(),r=vt(),n=Dt?Et:(Dt=1,Et=function(e,t){var r,n,a,i,s,o,l,u,c,h,d,f,p,m,g,b,y,v,w,_,k,S,x,C,A;r=e.state,n=e.next_in,C=e.input,a=n+(e.avail_in-5),i=e.next_out,A=e.output,s=i-(t-e.avail_out),o=i+(e.avail_out-257),l=r.dmax,u=r.wsize,c=r.whave,h=r.wnext,d=r.window,f=r.hold,p=r.bits,m=r.lencode,g=r.distcode,b=(1<>>=w=v>>>24,p-=w,0==(w=v>>>16&255))A[i++]=65535&v;else{if(!(16&w)){if(0==(64&w)){v=m[(65535&v)+(f&(1<>>=w,p-=w),p<15&&(f+=C[n++]<>>=w=v>>>24,p-=w,!(16&(w=v>>>16&255))){if(0==(64&w)){v=g[(65535&v)+(f&(1<l){e.msg="invalid distance too far back",r.mode=30;break e}if(f>>>=w,p-=w,k>(w=i-s)){if((w=k-w)>c&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(S=0,x=d,0===h){if(S+=u-w,w<_){_-=w;do{A[i++]=d[S++]}while(--w);S=i-k,x=A}}else if(h2;)A[i++]=x[S++],A[i++]=x[S++],A[i++]=x[S++],_-=3;_&&(A[i++]=x[S++],_>1&&(A[i++]=x[S++]))}else{S=i-k;do{A[i++]=A[S++],A[i++]=A[S++],A[i++]=A[S++],_-=3}while(_>2);_&&(A[i++]=A[S++],_>1&&(A[i++]=A[S++]))}break}}break}}while(n>3,f&=(1<<(p-=_<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n=1&&0===I[P];P--);if(T>P&&(T=P),0===P)return c[h++]=20971520,c[h++]=20971520,f.bits=1,0;for(A=1;A0&&(0===s||1!==P))return-1;for(z[1]=0,x=1;x852||2===s&&B>592)return 1;for(;;){w=x-D,d[C]v?(_=F[L+d[C]],k=R[O+d[C]]):(_=96,k=0),p=1<>D)+(m-=p)]=w<<24|_<<16|k|0}while(0!==m);for(p=1<>=1;if(0!==p?(M&=p-1,M+=p):M=0,C++,0==--I[x]){if(x===P)break;x=o[l+d[C]]}if(x>T&&(M&b)!==g){for(0===D&&(D=T),y+=A,N=1<<(E=x-D);E+D852||2===s&&B>592)return 1;c[g=M&b]=T<<24|E<<16|y-h|0}}return 0!==M&&(c[y+M]=x-D<<24|64<<16|0),f.bits=T,0}}(),i=1,s=2,o=0,l=-2,u=1,c=12,h=30,d=852,f=592;function p(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function m(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new e.Buf16(320),this.work=new e.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function g(t){var r;return t&&t.state?(r=t.state,t.total_in=t.total_out=r.total=0,t.msg="",r.wrap&&(t.adler=1&r.wrap),r.mode=u,r.last=0,r.havedict=0,r.dmax=32768,r.head=null,r.hold=0,r.bits=0,r.lencode=r.lendyn=new e.Buf32(d),r.distcode=r.distdyn=new e.Buf32(f),r.sane=1,r.back=-1,o):l}function b(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,g(e)):l}function y(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?l:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,b(e))):l}function v(e,t){var r,n;return e?(n=new m,e.state=n,n.window=null,(r=y(e,t))!==o&&(e.state=null),r):l}var w,_,k=!0;function S(t){if(k){var r;for(w=new e.Buf32(512),_=new e.Buf32(32),r=0;r<144;)t.lens[r++]=8;for(;r<256;)t.lens[r++]=9;for(;r<280;)t.lens[r++]=7;for(;r<288;)t.lens[r++]=8;for(a(i,t.lens,0,288,w,0,t.work,{bits:9}),r=0;r<32;)t.lens[r++]=5;a(s,t.lens,0,32,_,0,t.work,{bits:5}),k=!1}t.lencode=w,t.lenbits=9,t.distcode=_,t.distbits=5}function x(t,r,n,a){var i,s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(e.arraySet(s.window,r,n-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):((i=s.wsize-s.wnext)>a&&(i=a),e.arraySet(s.window,r,n-a,i,s.wnext),(a-=i)?(e.arraySet(s.window,r,n-a,a,0),s.wnext=a,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,m.check=r(m.check,W,2,0),k=0,C=0,m.mode=2;break}if(m.flags=0,m.head&&(m.head.done=!1),!(1&m.wrap)||(((255&k)<<8)+(k>>8))%31){d.msg="incorrect header check",m.mode=h;break}if(8!=(15&k)){d.msg="unknown compression method",m.mode=h;break}if(C-=4,z=8+(15&(k>>>=4)),0===m.wbits)m.wbits=z;else if(z>m.wbits){d.msg="invalid window size",m.mode=h;break}m.dmax=1<>8&1),512&m.flags&&(W[0]=255&k,W[1]=k>>>8&255,m.check=r(m.check,W,2,0)),k=0,C=0,m.mode=3;case 3:for(;C<32;){if(0===w)break e;w--,k+=g[y++]<>>8&255,W[2]=k>>>16&255,W[3]=k>>>24&255,m.check=r(m.check,W,4,0)),k=0,C=0,m.mode=4;case 4:for(;C<16;){if(0===w)break e;w--,k+=g[y++]<>8),512&m.flags&&(W[0]=255&k,W[1]=k>>>8&255,m.check=r(m.check,W,2,0)),k=0,C=0,m.mode=5;case 5:if(1024&m.flags){for(;C<16;){if(0===w)break e;w--,k+=g[y++]<>>8&255,m.check=r(m.check,W,2,0)),k=0,C=0}else m.head&&(m.head.extra=null);m.mode=6;case 6:if(1024&m.flags&&((T=m.length)>w&&(T=w),T&&(m.head&&(z=m.head.extra_len-m.length,m.head.extra||(m.head.extra=new Array(m.head.extra_len)),e.arraySet(m.head.extra,g,y,T,z)),512&m.flags&&(m.check=r(m.check,g,T,y)),w-=T,y+=T,m.length-=T),m.length))break e;m.length=0,m.mode=7;case 7:if(2048&m.flags){if(0===w)break e;T=0;do{z=g[y+T++],m.head&&z&&m.length<65536&&(m.head.name+=String.fromCharCode(z))}while(z&&T>9&1,m.head.done=!0),d.adler=m.check=0,m.mode=c;break;case 10:for(;C<32;){if(0===w)break e;w--,k+=g[y++]<>>=7&C,C-=7&C,m.mode=27;break}for(;C<3;){if(0===w)break e;w--,k+=g[y++]<>>=1)){case 0:m.mode=14;break;case 1:if(S(m),m.mode=20,6===f){k>>>=2,C-=2;break e}break;case 2:m.mode=17;break;case 3:d.msg="invalid block type",m.mode=h}k>>>=2,C-=2;break;case 14:for(k>>>=7&C,C-=7&C;C<32;){if(0===w)break e;w--,k+=g[y++]<>>16^65535)){d.msg="invalid stored block lengths",m.mode=h;break}if(m.length=65535&k,k=0,C=0,m.mode=15,6===f)break e;case 15:m.mode=16;case 16:if(T=m.length){if(T>w&&(T=w),T>_&&(T=_),0===T)break e;e.arraySet(b,g,y,T,v),w-=T,y+=T,_-=T,v+=T,m.length-=T;break}m.mode=c;break;case 17:for(;C<14;){if(0===w)break e;w--,k+=g[y++]<>>=5,C-=5,m.ndist=1+(31&k),k>>>=5,C-=5,m.ncode=4+(15&k),k>>>=4,C-=4,m.nlen>286||m.ndist>30){d.msg="too many length or distance symbols",m.mode=h;break}m.have=0,m.mode=18;case 18:for(;m.have>>=3,C-=3}for(;m.have<19;)m.lens[H[m.have++]]=0;if(m.lencode=m.lendyn,m.lenbits=7,L={bits:m.lenbits},F=a(0,m.lens,0,19,m.lencode,0,m.work,L),m.lenbits=L.bits,F){d.msg="invalid code lengths set",m.mode=h;break}m.have=0,m.mode=19;case 19:for(;m.have>>16&255,M=65535&U,!((N=U>>>24)<=C);){if(0===w)break e;w--,k+=g[y++]<>>=N,C-=N,m.lens[m.have++]=M;else{if(16===M){for(j=N+2;C>>=N,C-=N,0===m.have){d.msg="invalid bit length repeat",m.mode=h;break}z=m.lens[m.have-1],T=3+(3&k),k>>>=2,C-=2}else if(17===M){for(j=N+3;C>>=N)),k>>>=3,C-=3}else{for(j=N+7;C>>=N)),k>>>=7,C-=7}if(m.have+T>m.nlen+m.ndist){d.msg="invalid bit length repeat",m.mode=h;break}for(;T--;)m.lens[m.have++]=z}}if(m.mode===h)break;if(0===m.lens[256]){d.msg="invalid code -- missing end-of-block",m.mode=h;break}if(m.lenbits=9,L={bits:m.lenbits},F=a(i,m.lens,0,m.nlen,m.lencode,0,m.work,L),m.lenbits=L.bits,F){d.msg="invalid literal/lengths set",m.mode=h;break}if(m.distbits=6,m.distcode=m.distdyn,L={bits:m.distbits},F=a(s,m.lens,m.nlen,m.ndist,m.distcode,0,m.work,L),m.distbits=L.bits,F){d.msg="invalid distances set",m.mode=h;break}if(m.mode=20,6===f)break e;case 20:m.mode=21;case 21:if(w>=6&&_>=258){d.next_out=v,d.avail_out=_,d.next_in=y,d.avail_in=w,m.hold=k,m.bits=C,n(d,P),v=d.next_out,b=d.output,_=d.avail_out,y=d.next_in,g=d.input,w=d.avail_in,k=m.hold,C=m.bits,m.mode===c&&(m.back=-1);break}for(m.back=0;B=(U=m.lencode[k&(1<>>16&255,M=65535&U,!((N=U>>>24)<=C);){if(0===w)break e;w--,k+=g[y++]<>R)])>>>16&255,M=65535&U,!(R+(N=U>>>24)<=C);){if(0===w)break e;w--,k+=g[y++]<>>=R,C-=R,m.back+=R}if(k>>>=N,C-=N,m.back+=N,m.length=M,0===B){m.mode=26;break}if(32&B){m.back=-1,m.mode=c;break}if(64&B){d.msg="invalid literal/length code",m.mode=h;break}m.extra=15&B,m.mode=22;case 22:if(m.extra){for(j=m.extra;C>>=m.extra,C-=m.extra,m.back+=m.extra}m.was=m.length,m.mode=23;case 23:for(;B=(U=m.distcode[k&(1<>>16&255,M=65535&U,!((N=U>>>24)<=C);){if(0===w)break e;w--,k+=g[y++]<>R)])>>>16&255,M=65535&U,!(R+(N=U>>>24)<=C);){if(0===w)break e;w--,k+=g[y++]<>>=R,C-=R,m.back+=R}if(k>>>=N,C-=N,m.back+=N,64&B){d.msg="invalid distance code",m.mode=h;break}m.offset=M,m.extra=15&B,m.mode=24;case 24:if(m.extra){for(j=m.extra;C>>=m.extra,C-=m.extra,m.back+=m.extra}if(m.offset>m.dmax){d.msg="invalid distance too far back",m.mode=h;break}m.mode=25;case 25:if(0===_)break e;if(T=P-_,m.offset>T){if((T=m.offset-T)>m.whave&&m.sane){d.msg="invalid distance too far back",m.mode=h;break}T>m.wnext?(T-=m.wnext,E=m.wsize-T):E=m.wnext-T,T>m.length&&(T=m.length),D=m.window}else D=b,E=v-m.offset,T=m.length;T>_&&(T=_),_-=T,m.length-=T;do{b[v++]=D[E++]}while(--T);0===m.length&&(m.mode=21);break;case 26:if(0===_)break e;b[v++]=m.length,_--,m.mode=21;break;case 27:if(m.wrap){for(;C<32;){if(0===w)break e;w--,k|=g[y++]<=0&&c.windowBits<16&&(c.windowBits=-c.windowBits,0===c.windowBits&&(c.windowBits=-15)),!(c.windowBits>=0&&c.windowBits<16)||u&&u.windowBits||(c.windowBits+=32),c.windowBits>15&&c.windowBits<48&&0==(15&c.windowBits)&&(c.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var h=e.inflateInit2(this.strm,c.windowBits);if(h!==n.Z_OK)throw new Error(a[h]);if(this.header=new s,e.inflateGetHeader(this.strm,this.header),c.dictionary&&("string"==typeof c.dictionary?c.dictionary=r.string2buf(c.dictionary):"[object ArrayBuffer]"===o.call(c.dictionary)&&(c.dictionary=new Uint8Array(c.dictionary)),c.raw&&(h=e.inflateSetDictionary(this.strm,c.dictionary))!==n.Z_OK))throw new Error(a[h])}function u(e,t){var r=new l(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}return l.prototype.push=function(a,i){var s,l,u,c,h,d=this.strm,f=this.options.chunkSize,p=this.options.dictionary,m=!1;if(this.ended)return!1;l=i===~~i?i:!0===i?n.Z_FINISH:n.Z_NO_FLUSH,"string"==typeof a?d.input=r.binstring2buf(a):"[object ArrayBuffer]"===o.call(a)?d.input=new Uint8Array(a):d.input=a,d.next_in=0,d.avail_in=d.input.length;do{if(0===d.avail_out&&(d.output=new t.Buf8(f),d.next_out=0,d.avail_out=f),(s=e.inflate(d,n.Z_NO_FLUSH))===n.Z_NEED_DICT&&p&&(s=e.inflateSetDictionary(this.strm,p)),s===n.Z_BUF_ERROR&&!0===m&&(s=n.Z_OK,m=!1),s!==n.Z_STREAM_END&&s!==n.Z_OK)return this.onEnd(s),this.ended=!0,!1;d.next_out&&(0!==d.avail_out&&s!==n.Z_STREAM_END&&(0!==d.avail_in||l!==n.Z_FINISH&&l!==n.Z_SYNC_FLUSH)||("string"===this.options.to?(u=r.utf8border(d.output,d.next_out),c=d.next_out-u,h=r.buf2string(d.output,u),d.next_out=c,d.avail_out=f-c,c&&t.arraySet(d.output,d.output,u,c,0),this.onData(h)):this.onData(t.shrinkBuf(d.output,d.next_out)))),0===d.avail_in&&0===d.avail_out&&(m=!0)}while((d.avail_in>0||0===d.avail_out)&&s!==n.Z_STREAM_END);return s===n.Z_STREAM_END&&(l=n.Z_FINISH),l===n.Z_FINISH?(s=e.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===n.Z_OK):l!==n.Z_SYNC_FLUSH||(this.onEnd(n.Z_OK),d.avail_out=0,!0)},l.prototype.onData=function(e){this.chunks.push(e)},l.prototype.onEnd=function(e){e===n.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=t.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},Ht.Inflate=l,Ht.inflate=u,Ht.inflateRaw=function(e,t){return(t=t||{}).raw=!0,u(e,t)},Ht.ungzip=u,Ht}function Xt(){if(jt)return Lt;jt=1;var e=it().assign,t=function(){if(Ct)return pt;Ct=1;var e=_t(),t=it(),r=Pt(),n=wt(),a=Tt(),i=Object.prototype.toString,s=0,o=-1,l=0,u=8;function c(h){if(!(this instanceof c))return new c(h);this.options=t.assign({level:o,method:u,chunkSize:16384,windowBits:15,memLevel:8,strategy:l,to:""},h||{});var d=this.options;d.raw&&d.windowBits>0?d.windowBits=-d.windowBits:d.gzip&&d.windowBits>0&&d.windowBits<16&&(d.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var f=e.deflateInit2(this.strm,d.level,d.method,d.windowBits,d.memLevel,d.strategy);if(f!==s)throw new Error(n[f]);if(d.header&&e.deflateSetHeader(this.strm,d.header),d.dictionary){var p;if(p="string"==typeof d.dictionary?r.string2buf(d.dictionary):"[object ArrayBuffer]"===i.call(d.dictionary)?new Uint8Array(d.dictionary):d.dictionary,(f=e.deflateSetDictionary(this.strm,p))!==s)throw new Error(n[f]);this._dict_set=!0}}function h(e,t){var r=new c(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}return c.prototype.push=function(n,a){var o,l,u=this.strm,c=this.options.chunkSize;if(this.ended)return!1;l=a===~~a?a:!0===a?4:0,"string"==typeof n?u.input=r.string2buf(n):"[object ArrayBuffer]"===i.call(n)?u.input=new Uint8Array(n):u.input=n,u.next_in=0,u.avail_in=u.input.length;do{if(0===u.avail_out&&(u.output=new t.Buf8(c),u.next_out=0,u.avail_out=c),1!==(o=e.deflate(u,l))&&o!==s)return this.onEnd(o),this.ended=!0,!1;0!==u.avail_out&&(0!==u.avail_in||4!==l&&2!==l)||("string"===this.options.to?this.onData(r.buf2binstring(t.shrinkBuf(u.output,u.next_out))):this.onData(t.shrinkBuf(u.output,u.next_out)))}while((u.avail_in>0||0===u.avail_out)&&1!==o);return 4===l?(o=e.deflateEnd(this.strm),this.onEnd(o),this.ended=!0,o===s):2!==l||(this.onEnd(s),u.avail_out=0,!0)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){e===s&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=t.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},pt.Deflate=c,pt.deflate=h,pt.deflateRaw=function(e,t){return(t=t||{}).raw=!0,h(e,t)},pt.gzip=function(e,t){return(t=t||{}).gzip=!0,h(e,t)},pt}(),r={};return e(r,t,qt(),Vt()),Lt=r}function Kt(){if(Wt)return rt;Wt=1;var e=Be();return rt.STORE={magic:"\0\0",compressWorker:function(){return new e("STORE compression")},uncompressWorker:function(){return new e("STORE decompression")}},rt.DEFLATE=function(){if(Ut)return nt;Ut=1;var e="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,t=Xt(),r=Ne(),n=Be(),a=e?"uint8array":"array";function i(e,t){n.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}return nt.magic="\b\0",r.inherits(i,n),i.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(r.transformTo(a,e.data),!1)},i.prototype.flush=function(){n.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},i.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this._pako=null},i.prototype._createPako=function(){this._pako=new t[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},nt.compressWorker=function(e){return new i("Deflate",e)},nt.uncompressWorker=function(){return new i("Inflate",{})},nt}(),rt}var Gt,Jt,Yt,Qt,er,tr,rr,nr,ar,ir,sr,or,lr,ur,cr,hr,dr,fr,pr,mr,gr,br,yr,vr,wr,_r,kr,Sr,xr={};function Cr(){return Gt||(Gt=1,xr.LOCAL_FILE_HEADER="PK",xr.CENTRAL_FILE_HEADER="PK",xr.CENTRAL_DIRECTORY_END="PK",xr.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",xr.ZIP64_CENTRAL_DIRECTORY_END="PK",xr.DATA_DESCRIPTOR="PK\b"),xr}function Ar(){if(Yt)return Jt;Yt=1;var e=Ne(),t=Be(),r=Me(),n=Je(),a=Cr(),i=function(e,t){var r,n="";for(r=0;r>>=8;return n},s=function(t,s,o,l,u,c){var h,d,f=t.file,p=t.compression,m=c!==r.utf8encode,g=e.transformTo("string",c(f.name)),b=e.transformTo("string",r.utf8encode(f.name)),y=f.comment,v=e.transformTo("string",c(y)),w=e.transformTo("string",r.utf8encode(y)),_=b.length!==f.name.length,k=w.length!==y.length,S="",x="",C="",A=f.dir,P=f.date,T={crc32:0,compressedSize:0,uncompressedSize:0};s&&!o||(T.crc32=t.crc32,T.compressedSize=t.compressedSize,T.uncompressedSize=t.uncompressedSize);var E=0;s&&(E|=8),m||!_&&!k||(E|=2048);var D,N,B,M=0,R=0;A&&(M|=16),"UNIX"===u?(R=798,M|=(D=f.unixPermissions,N=A,B=D,D||(B=N?16893:33204),(65535&B)<<16)):(R=20,M|=63&(f.dosPermissions||0)),h=P.getUTCHours(),h<<=6,h|=P.getUTCMinutes(),h<<=5,h|=P.getUTCSeconds()/2,d=P.getUTCFullYear()-1980,d<<=4,d|=P.getUTCMonth()+1,d<<=5,d|=P.getUTCDate(),_&&(x=i(1,1)+i(n(g),4)+b,S+="up"+i(x.length,2)+x),k&&(C=i(1,1)+i(n(v),4)+w,S+="uc"+i(C.length,2)+C);var O="";return O+="\n\0",O+=i(E,2),O+=p.magic,O+=i(h,2),O+=i(d,2),O+=i(T.crc32,4),O+=i(T.compressedSize,4),O+=i(T.uncompressedSize,4),O+=i(g.length,2),O+=i(S.length,2),{fileRecord:a.LOCAL_FILE_HEADER+O+g+S,dirRecord:a.CENTRAL_FILE_HEADER+i(R,2)+O+i(v.length,2)+"\0\0\0\0"+i(M,4)+i(l,4)+g+S+v}},o=function(e){return a.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)};function l(e,r,n,a){t.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=r,this.zipPlatform=n,this.encodeFileName=a,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}return e.inherits(l,t),l.prototype.push=function(e){var r=e.meta.percent||0,n=this.entriesCount,a=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,t.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:n?(r+100*(n-a-1))/n:100}}))},l.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=s(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},l.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=s(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:o(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},l.prototype.flush=function(){for(var t=this.bytesWritten,r=0;r0?e.substring(0,t):""},d=function(e){return"/"!==e.slice(-1)&&(e+="/"),e},f=function(e,t){return t=void 0!==t?t:a.createFolders,e=d(e),this.files[e]||c.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function p(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var m={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(e){var t=[];return this.forEach((function(r,n){e(r,n)&&t.push(n)})),t},file:function(e,t,r){if(1===arguments.length){if(p(e)){var n=e;return this.filter((function(e,t){return!t.dir&&n.test(e)}))}var a=this.files[this.root+e];return a&&!a.dir?a:null}return e=this.root+e,c.call(this,e,t,r),this},folder:function(e){if(!e)return this;if(p(e))return this.filter((function(t,r){return r.dir&&e.test(t)}));var t=this.root+e,r=f.call(this,t),n=this.clone();return n.root=r.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||("/"!==e.slice(-1)&&(e+="/"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var r=this.filter((function(t,r){return r.name.slice(0,e.length)===e})),n=0;n=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(t){return e.transformTo("string",this.readData(t))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},ar=t}function Dr(){if(or)return sr;or=1;var e=Er();function t(t){e.call(this,t);for(var r=0;r=0;--i)if(this.data[i]===t&&this.data[i+1]===r&&this.data[i+2]===n&&this.data[i+3]===a)return i-this.zero;return-1},t.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),a=e.charCodeAt(3),i=this.readData(4);return t===i[0]&&r===i[1]&&n===i[2]&&a===i[3]},t.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},sr=t}function Nr(){if(hr)return cr;hr=1;var e=Dr();function t(t){e.call(this,t)}return Ne().inherits(t,e),t.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},cr=t}function Br(){if(mr)return pr;mr=1;var e=Ne(),t=ne(),r=Dr(),n=function(){if(ur)return lr;ur=1;var e=Er();function t(t){e.call(this,t)}return Ne().inherits(t,e),t.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},t.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},t.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},t.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},lr=t}(),a=function(){if(fr)return dr;fr=1;var e=Nr();function t(t){e.call(this,t)}return Ne().inherits(t,e),t.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},dr=t}(),i=Nr();return pr=function(s){var o=e.getTypeOf(s);return e.checkSupport(o),"string"!==o||t.uint8array?"nodebuffer"===o?new a(s):t.uint8array?new i(e.transformTo("uint8array",s)):new r(e.transformTo("array",s)):new n(s)}}function Mr(){if(br)return gr;br=1;var e=Br(),t=Ne(),r=Qe(),n=Je(),a=Me(),i=Kt(),s=ne();function o(e,t){this.options=e,this.loadOptions=t}return o.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var n,a;if(e.skip(22),this.fileNameLength=e.readInt(2),a=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(a),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(n=function(e){for(var t in i)if(Object.prototype.hasOwnProperty.call(i,t)&&i[t].magic===e)return i[t];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+t.pretty(this.compressionMethod)+" unknown (inner file : "+t.transformTo("string",this.fileName)+")");this.decompressed=new r(this.compressedSize,this.uncompressedSize,this.crc32,n,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0===e&&(this.dosPermissions=63&this.externalFileAttributes),3===e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var r=e(this.extraFields[1].value);this.uncompressedSize===t.MAX_VALUE_32BITS&&(this.uncompressedSize=r.readInt(8)),this.compressedSize===t.MAX_VALUE_32BITS&&(this.compressedSize=r.readInt(8)),this.localHeaderOffset===t.MAX_VALUE_32BITS&&(this.localHeaderOffset=r.readInt(8)),this.diskNumberStart===t.MAX_VALUE_32BITS&&(this.diskNumberStart=r.readInt(4))}},readExtraFields:function(e){var t,r,n,a=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+41)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e0)this.isSignature(n,r.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error("Corrupted zip: missing "+Math.abs(i)+" bytes.")},prepareReader:function(t){this.reader=e(t)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},yr=i}(),a=Ye(),i=me();function s(e){return new t.Promise((function(t,r){var n=e.decompressed.getContentWorker().pipe(new a);n.on("error",(function(e){r(e)})).on("end",(function(){n.streamInfo.crc32!==e.decompressed.crc32?r(new Error("Corrupted zip : CRC32 mismatch")):t()})).resume()}))}return wr=function(a,o){var l=this;return o=e.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:r.utf8decode}),i.isNode&&i.isStream(a)?t.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):e.prepareContent("the loaded zip file",a,!0,o.optimizedBinaryString,o.base64).then((function(e){var t=new n(o);return t.load(e),t})).then((function(e){var r=[t.Promise.resolve(e)],n=e.files;if(o.checkCRC32)for(var a=0;a(()=>{var t={438:(e,t,r)=>{r.r(t),r.d(t,{default:()=>d});var n=r(537),a=r.n(n),i=r(645),s=r.n(i),o=r(806),l=r.n(o),u=new URL(r(583),r.b),c=s()(a()),h=l()(u);c.push([e.id,`@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${h})}`,"",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:["@namespace \"http://www.w3.org/1998/Math/MathML\";\r\n\r\nmath {\r\n display: inline-block;\r\n line-height: initial;\r\n}\r\n\r\nmfrac {\r\n display: inline-block;\r\n vertical-align: -50%;\r\n text-align: center;\r\n\r\n &>:first-child {\r\n border-bottom: solid thin currentColor;\r\n }\r\n\r\n &>* {\r\n display: block;\r\n }\r\n}\r\n\r\nmsub {\r\n &>:nth-child(2) {\r\n font-size: smaller;\r\n vertical-align: sub;\r\n }\r\n}\r\n\r\nmsup {\r\n &>:nth-child(2) {\r\n font-size: smaller;\r\n vertical-align: super;\r\n }\r\n}\r\n\r\nmunder, mover, munderover {\r\n display: inline-flex;\r\n flex-flow: column nowrap;\r\n vertical-align: middle;\r\n text-align: center;\r\n\r\n &>:not(:first-child) {\r\n font-size: smaller;\r\n }\r\n}\r\n\r\nmunderover {\r\n &>:last-child { order: -1; }\r\n}\r\n\r\nmroot, msqrt {\r\n position: relative;\r\n display: inline-block;\r\n border-top: solid thin currentColor; \r\n margin-top: 0.5px;\r\n vertical-align: middle; \r\n margin-left: 1ch; \r\n\r\n &:before {\r\n content: \"\";\r\n display: inline-block;\r\n position: absolute;\r\n width: 1ch;\r\n left: -1ch;\r\n top: -1px;\r\n bottom: 0;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E\");\r\n }\r\n}"],sourceRoot:""}]);const d=c.toString()},645:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,a,i){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(n)for(var o=0;o0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),r&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=r):c[2]=r),a&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=a):c[4]="".concat(a)),t.push(c))}},t}},806:e=>{e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},537:e=>{e.exports=function(e){var t=e[1],r=e[3];if(!r)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(a," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},522:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OpenXmlPackage=void 0;const n=r(626),a=r(472),i=r(593),s=r(461);class o{constructor(e,t){this._zip=e,this.options=t,this.xmlParser=new a.XmlParser}get(e){return this._zip.files[function(e){return e.startsWith("/")?e.substr(1):e}(e)]}update(e,t){this._zip.file(e,t)}static async load(e,t){const r=await n.loadAsync(e);return new o(r,t)}save(e="blob"){return this._zip.generateAsync({type:e})}load(e,t="string"){var r,n;return null!==(n=null===(r=this.get(e))||void 0===r?void 0:r.async(t))&&void 0!==n?n:Promise.resolve(null)}async loadRelationships(e=null){let t="_rels/.rels";if(null!=e){const[r,n]=(0,i.splitPath)(e);t=`${r}_rels/${n}.rels`}const r=await this.load(t);return r?(0,s.parseRelationships)(this.parseXmlDocument(r).firstElementChild,this.xmlParser):null}parseXmlDocument(e){return(0,a.parseXmlString)(e,this.options.trimXmlDeclaration)}}t.OpenXmlPackage=o},530:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Part=void 0;const n=r(472);t.Part=class{constructor(e,t){this._package=e,this.path=t}async load(){this.rels=await this._package.loadRelationships(this.path);const e=await this._package.load(this.path),t=this._package.parseXmlDocument(e);this._package.options.keepOrigin&&(this._xmlDocument=t),this.parseXml(t.firstElementChild)}save(){this._package.update(this.path,(0,n.serializeXmlString)(this._xmlDocument))}parseXml(e){}}},461:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.parseRelationships=t.RelationshipTypes=void 0,function(e){e.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",e.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",e.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",e.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",e.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",e.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",e.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",e.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",e.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",e.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",e.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",e.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",e.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",e.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",e.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",e.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",e.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties"}(r||(t.RelationshipTypes=r={})),t.parseRelationships=function(e,t){return t.elements(e).map((e=>({id:t.attr(e,"Id"),type:t.attr(e,"Type"),target:t.attr(e,"Target"),targetMode:t.attr(e,"TargetMode")})))}},168:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DocumentParser=t.autos=void 0;const n=r(120),a=r(109),i=r(59),s=r(472),o=r(488),l=r(172),u=r(149),c=r(320);t.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const h=[],d={oMath:n.DomType.MmlMath,oMathPara:n.DomType.MmlMathParagraph,f:n.DomType.MmlFraction,func:n.DomType.MmlFunction,fName:n.DomType.MmlFunctionName,num:n.DomType.MmlNumerator,den:n.DomType.MmlDenominator,rad:n.DomType.MmlRadical,deg:n.DomType.MmlDegree,e:n.DomType.MmlBase,sSup:n.DomType.MmlSuperscript,sSub:n.DomType.MmlSubscript,sPre:n.DomType.MmlPreSubSuper,sup:n.DomType.MmlSuperArgument,sub:n.DomType.MmlSubArgument,d:n.DomType.MmlDelimiter,nary:n.DomType.MmlNary,eqArr:n.DomType.MmlEquationArray,lim:n.DomType.MmlLimit,limLow:n.DomType.MmlLimitLower,m:n.DomType.MmlMatrix,mr:n.DomType.MmlMatrixRow,box:n.DomType.MmlBox,bar:n.DomType.MmlBar,groupChr:n.DomType.MmlGroupChar};t.DocumentParser=class{constructor(e){this.options=Object.assign({ignoreWidth:!1,debug:!1},e)}parseNotes(e,t,r){var n=[];for(let a of s.default.elements(e,t)){const e=new r;e.id=s.default.attr(a,"id"),e.noteType=s.default.attr(a,"type"),e.children=this.parseBodyElements(a),n.push(e)}return n}parseDocumentFile(e){var t=s.default.element(e,"body"),r=s.default.element(e,"background"),a=s.default.element(t,"sectPr");return{type:n.DomType.Document,children:this.parseBodyElements(t),props:a?(0,i.parseSectionProperties)(a,s.default):{},cssStyle:r?this.parseBackground(r):{}}}parseBackground(e){var t={},r=p.colorAttr(e,"color");return r&&(t["background-color"]=r),t}parseBodyElements(e){var t=[];for(let r of s.default.elements(e))switch(r.localName){case"p":t.push(this.parseParagraph(r));break;case"tbl":t.push(this.parseTable(r));break;case"sdt":t.push(...this.parseSdt(r,(e=>this.parseBodyElements(e))))}return t}parseStylesFile(e){var t=[];return p.foreach(e,(e=>{switch(e.localName){case"style":t.push(this.parseStyle(e));break;case"docDefaults":t.push(this.parseDefaultStyles(e))}})),t}parseDefaultStyles(e){var t={id:null,name:null,target:null,basedOn:null,styles:[]};return p.foreach(e,(e=>{switch(e.localName){case"rPrDefault":var r=s.default.element(e,"rPr");r&&t.styles.push({target:"span",values:this.parseDefaultProperties(r,{})});break;case"pPrDefault":var n=s.default.element(e,"pPr");n&&t.styles.push({target:"p",values:this.parseDefaultProperties(n,{})})}})),t}parseStyle(e){var t={id:s.default.attr(e,"styleId"),isDefault:s.default.boolAttr(e,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(s.default.attr(e,"type")){case"paragraph":t.target="p";break;case"table":t.target="table";break;case"character":t.target="span"}return p.foreach(e,(e=>{switch(e.localName){case"basedOn":t.basedOn=s.default.attr(e,"val");break;case"name":t.name=s.default.attr(e,"val");break;case"link":t.linked=s.default.attr(e,"val");break;case"next":t.next=s.default.attr(e,"val");break;case"aliases":t.aliases=s.default.attr(e,"val").split(",");break;case"pPr":t.styles.push({target:"p",values:this.parseDefaultProperties(e,{})}),t.paragraphProps=(0,a.parseParagraphProperties)(e,s.default);break;case"rPr":t.styles.push({target:"span",values:this.parseDefaultProperties(e,{})}),t.runProps=(0,o.parseRunProperties)(e,s.default);break;case"tblPr":case"tcPr":t.styles.push({target:"td",values:this.parseDefaultProperties(e,{})});break;case"tblStylePr":for(let r of this.parseTableStyle(e))t.styles.push(r);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${e.localName}`)}})),t}parseTableStyle(e){var t=[],r=s.default.attr(e,"type"),n="",a="";switch(r){case"firstRow":a=".first-row",n="tr.first-row td";break;case"lastRow":a=".last-row",n="tr.last-row td";break;case"firstCol":a=".first-col",n="td.first-col";break;case"lastCol":a=".last-col",n="td.last-col";break;case"band1Vert":a=":not(.no-vband)",n="td.odd-col";break;case"band2Vert":a=":not(.no-vband)",n="td.even-col";break;case"band1Horz":a=":not(.no-hband)",n="tr.odd-row";break;case"band2Horz":a=":not(.no-hband)",n="tr.even-row";break;default:return[]}return p.foreach(e,(e=>{switch(e.localName){case"pPr":t.push({target:`${n} p`,mod:a,values:this.parseDefaultProperties(e,{})});break;case"rPr":t.push({target:`${n} span`,mod:a,values:this.parseDefaultProperties(e,{})});break;case"tblPr":case"tcPr":t.push({target:n,mod:a,values:this.parseDefaultProperties(e,{})})}})),t}parseNumberingFile(e){var t=[],r={},n=[];return p.foreach(e,(e=>{switch(e.localName){case"abstractNum":this.parseAbstractNumbering(e,n).forEach((e=>t.push(e)));break;case"numPicBullet":n.push(this.parseNumberingPicBullet(e));break;case"num":var a=s.default.attr(e,"numId"),i=s.default.elementAttr(e,"abstractNumId","val");r[i]=a}})),t.forEach((e=>e.id=r[e.id])),t}parseNumberingPicBullet(e){var t=s.default.element(e,"pict"),r=t&&s.default.element(t,"shape"),n=r&&s.default.element(r,"imagedata");return n?{id:s.default.intAttr(e,"numPicBulletId"),src:s.default.attr(n,"id"),style:s.default.attr(r,"style")}:null}parseAbstractNumbering(e,t){var r=[],n=s.default.attr(e,"abstractNumId");return p.foreach(e,(e=>{"lvl"===e.localName&&r.push(this.parseNumberingLevel(n,e,t))})),r}parseNumberingLevel(e,t,r){var n={id:e,level:s.default.intAttr(t,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return p.foreach(t,(e=>{switch(e.localName){case"start":n.start=s.default.intAttr(e,"val");break;case"pPr":this.parseDefaultProperties(e,n.pStyle);break;case"rPr":this.parseDefaultProperties(e,n.rStyle);break;case"lvlPicBulletId":var t=s.default.intAttr(e,"val");n.bullet=r.find((e=>e.id==t));break;case"lvlText":n.levelText=s.default.attr(e,"val");break;case"pStyle":n.pStyleName=s.default.attr(e,"val");break;case"numFmt":n.format=s.default.attr(e,"val");break;case"suff":n.suff=s.default.attr(e,"val")}})),n}parseSdt(e,t){const r=s.default.element(e,"sdtContent");return r?t(r):[]}parseInserted(e,t){var r,a;return{type:n.DomType.Inserted,children:null!==(a=null===(r=t(e))||void 0===r?void 0:r.children)&&void 0!==a?a:[]}}parseDeleted(e,t){var r,a;return{type:n.DomType.Deleted,children:null!==(a=null===(r=t(e))||void 0===r?void 0:r.children)&&void 0!==a?a:[]}}parseParagraph(e){var t={type:n.DomType.Paragraph,children:[]};for(let r of s.default.elements(e))switch(r.localName){case"pPr":this.parseParagraphProperties(r,t);break;case"r":t.children.push(this.parseRun(r,t));break;case"hyperlink":t.children.push(this.parseHyperlink(r,t));break;case"bookmarkStart":t.children.push((0,l.parseBookmarkStart)(r,s.default));break;case"bookmarkEnd":t.children.push((0,l.parseBookmarkEnd)(r,s.default));break;case"oMath":case"oMathPara":t.children.push(this.parseMathElement(r));break;case"sdt":t.children.push(...this.parseSdt(r,(e=>this.parseParagraph(e).children)));break;case"ins":t.children.push(this.parseInserted(r,(e=>this.parseParagraph(e))));break;case"del":t.children.push(this.parseDeleted(r,(e=>this.parseParagraph(e))))}return t}parseParagraphProperties(e,t){this.parseDefaultProperties(e,t.cssStyle={},null,(e=>{if((0,a.parseParagraphProperty)(e,t,s.default))return!0;switch(e.localName){case"pStyle":t.styleName=s.default.attr(e,"val");break;case"cnfStyle":t.className=m.classNameOfCnfStyle(e);break;case"framePr":this.parseFrame(e,t);break;case"rPr":break;default:return!1}return!0}))}parseFrame(e,t){"drop"==s.default.attr(e,"dropCap")&&(t.cssStyle.float="left")}parseHyperlink(e,t){var r={type:n.DomType.Hyperlink,parent:t,children:[]},a=s.default.attr(e,"anchor"),i=s.default.attr(e,"id");return a&&(r.href="#"+a),i&&(r.id=i),p.foreach(e,(e=>{"r"===e.localName&&r.children.push(this.parseRun(e,r))})),r}parseRun(e,t){var r={type:n.DomType.Run,parent:t,children:[]};return p.foreach(e,(e=>{switch((e=this.checkAlternateContent(e)).localName){case"t":r.children.push({type:n.DomType.Text,text:e.textContent});break;case"delText":r.children.push({type:n.DomType.DeletedText,text:e.textContent});break;case"fldSimple":r.children.push({type:n.DomType.SimpleField,instruction:s.default.attr(e,"instr"),lock:s.default.boolAttr(e,"lock",!1),dirty:s.default.boolAttr(e,"dirty",!1)});break;case"instrText":r.fieldRun=!0,r.children.push({type:n.DomType.Instruction,text:e.textContent});break;case"fldChar":r.fieldRun=!0,r.children.push({type:n.DomType.ComplexField,charType:s.default.attr(e,"fldCharType"),lock:s.default.boolAttr(e,"lock",!1),dirty:s.default.boolAttr(e,"dirty",!1)});break;case"noBreakHyphen":r.children.push({type:n.DomType.NoBreakHyphen});break;case"br":r.children.push({type:n.DomType.Break,break:s.default.attr(e,"type")||"textWrapping"});break;case"lastRenderedPageBreak":r.children.push({type:n.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":r.children.push({type:n.DomType.Symbol,font:s.default.attr(e,"font"),char:s.default.attr(e,"char")});break;case"tab":r.children.push({type:n.DomType.Tab});break;case"footnoteReference":r.children.push({type:n.DomType.FootnoteReference,id:s.default.attr(e,"id")});break;case"endnoteReference":r.children.push({type:n.DomType.EndnoteReference,id:s.default.attr(e,"id")});break;case"drawing":let t=this.parseDrawing(e);t&&(r.children=[t]);break;case"pict":r.children.push(this.parseVmlPicture(e));break;case"rPr":this.parseRunProperties(e,r)}})),r}parseMathElement(e){const t=`${e.localName}Pr`,r={type:d[e.localName],children:[]};for(const i of s.default.elements(e))if(d[i.localName])r.children.push(this.parseMathElement(i));else if("r"==i.localName){var a=this.parseRun(i);a.type=n.DomType.MmlRun,r.children.push(a)}else i.localName==t&&(r.props=this.parseMathProperies(i));return r}parseMathProperies(e){const t={};for(const r of s.default.elements(e))switch(r.localName){case"chr":t.char=s.default.attr(r,"val");break;case"vertJc":t.verticalJustification=s.default.attr(r,"val");break;case"pos":t.position=s.default.attr(r,"val");break;case"degHide":t.hideDegree=s.default.boolAttr(r,"val");break;case"begChr":t.beginChar=s.default.attr(r,"val");break;case"endChr":t.endChar=s.default.attr(r,"val")}return t}parseRunProperties(e,t){this.parseDefaultProperties(e,t.cssStyle={},null,(e=>{switch(e.localName){case"rStyle":t.styleName=s.default.attr(e,"val");break;case"vertAlign":t.verticalAlign=m.valueOfVertAlign(e,!0);break;default:return!1}return!0}))}parseVmlPicture(e){const t={type:n.DomType.VmlPicture,children:[]};for(const r of s.default.elements(e)){const e=(0,c.parseVmlElement)(r,this);e&&t.children.push(e)}return t}checkAlternateContent(e){var t;if("AlternateContent"!=e.localName)return e;var r=s.default.element(e,"Choice");if(r){var n=s.default.attr(r,"Requires"),a=e.lookupNamespaceURI(n);if(h.includes(a))return r.firstElementChild}return null===(t=s.default.element(e,"Fallback"))||void 0===t?void 0:t.firstElementChild}parseDrawing(e){for(var t of s.default.elements(e))switch(t.localName){case"inline":case"anchor":return this.parseDrawingWrapper(t)}}parseDrawingWrapper(e){var t,r={type:n.DomType.Drawing,children:[],cssStyle:{}},a="anchor"==e.localName;let i=null,o=s.default.boolAttr(e,"simplePos"),l={relative:"page",align:"left",offset:"0"},c={relative:"page",align:"top",offset:"0"};for(var h of s.default.elements(e))switch(h.localName){case"simplePos":o&&(l.offset=s.default.lengthAttr(h,"x",u.LengthUsage.Emu),c.offset=s.default.lengthAttr(h,"y",u.LengthUsage.Emu));break;case"extent":r.cssStyle.width=s.default.lengthAttr(h,"cx",u.LengthUsage.Emu),r.cssStyle.height=s.default.lengthAttr(h,"cy",u.LengthUsage.Emu);break;case"positionH":case"positionV":if(!o){let e="positionH"==h.localName?l:c;var d=s.default.element(h,"align"),f=s.default.element(h,"posOffset");e.relative=null!==(t=s.default.attr(h,"relativeFrom"))&&void 0!==t?t:e.relative,d&&(e.align=d.textContent),f&&(e.offset=p.sizeValue(f,u.LengthUsage.Emu))}break;case"wrapTopAndBottom":i="wrapTopAndBottom";break;case"wrapNone":i="wrapNone";break;case"graphic":var m=this.parseGraphic(h);m&&r.children.push(m)}return"wrapTopAndBottom"==i?(r.cssStyle.display="block",l.align&&(r.cssStyle["text-align"]=l.align,r.cssStyle.width="100%")):"wrapNone"==i?(r.cssStyle.display="block",r.cssStyle.position="relative",r.cssStyle.width="0px",r.cssStyle.height="0px",l.offset&&(r.cssStyle.left=l.offset),c.offset&&(r.cssStyle.top=c.offset)):!a||"left"!=l.align&&"right"!=l.align||(r.cssStyle.float=l.align),r}parseGraphic(e){var t=s.default.element(e,"graphicData");for(let e of s.default.elements(t))if("pic"===e.localName)return this.parsePicture(e);return null}parsePicture(e){var t={type:n.DomType.Image,src:"",cssStyle:{}},r=s.default.element(e,"blipFill"),a=s.default.element(r,"blip");t.src=s.default.attr(a,"embed");var i=s.default.element(e,"spPr"),o=s.default.element(i,"xfrm");for(var l of(t.cssStyle.position="relative",s.default.elements(o)))switch(l.localName){case"ext":t.cssStyle.width=s.default.lengthAttr(l,"cx",u.LengthUsage.Emu),t.cssStyle.height=s.default.lengthAttr(l,"cy",u.LengthUsage.Emu);break;case"off":t.cssStyle.left=s.default.lengthAttr(l,"x",u.LengthUsage.Emu),t.cssStyle.top=s.default.lengthAttr(l,"y",u.LengthUsage.Emu)}return t}parseTable(e){var t={type:n.DomType.Table,children:[]};return p.foreach(e,(e=>{switch(e.localName){case"tr":t.children.push(this.parseTableRow(e));break;case"tblGrid":t.columns=this.parseTableColumns(e);break;case"tblPr":this.parseTableProperties(e,t)}})),t}parseTableColumns(e){var t=[];return p.foreach(e,(e=>{"gridCol"===e.localName&&t.push({width:s.default.lengthAttr(e,"w")})})),t}parseTableProperties(e,t){switch(t.cssStyle={},t.cellStyle={},this.parseDefaultProperties(e,t.cssStyle,t.cellStyle,(e=>{switch(e.localName){case"tblStyle":t.styleName=s.default.attr(e,"val");break;case"tblLook":t.className=m.classNameOftblLook(e);break;case"tblpPr":this.parseTablePosition(e,t);break;case"tblStyleColBandSize":t.colBandSize=s.default.intAttr(e,"val");break;case"tblStyleRowBandSize":t.rowBandSize=s.default.intAttr(e,"val");break;default:return!1}return!0})),t.cssStyle["text-align"]){case"center":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto",t.cssStyle["margin-right"]="auto";break;case"right":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto"}}parseTablePosition(e,t){var r=s.default.lengthAttr(e,"topFromText"),n=s.default.lengthAttr(e,"bottomFromText"),a=s.default.lengthAttr(e,"rightFromText"),i=s.default.lengthAttr(e,"leftFromText");t.cssStyle.float="left",t.cssStyle["margin-bottom"]=m.addSize(t.cssStyle["margin-bottom"],n),t.cssStyle["margin-left"]=m.addSize(t.cssStyle["margin-left"],i),t.cssStyle["margin-right"]=m.addSize(t.cssStyle["margin-right"],a),t.cssStyle["margin-top"]=m.addSize(t.cssStyle["margin-top"],r)}parseTableRow(e){var t={type:n.DomType.Row,children:[]};return p.foreach(e,(e=>{switch(e.localName){case"tc":t.children.push(this.parseTableCell(e));break;case"trPr":this.parseTableRowProperties(e,t)}})),t}parseTableRowProperties(e,t){t.cssStyle=this.parseDefaultProperties(e,{},null,(e=>{switch(e.localName){case"cnfStyle":t.className=m.classNameOfCnfStyle(e);break;case"tblHeader":t.isHeader=s.default.boolAttr(e,"val");break;default:return!1}return!0}))}parseTableCell(e){var t={type:n.DomType.Cell,children:[]};return p.foreach(e,(e=>{switch(e.localName){case"tbl":t.children.push(this.parseTable(e));break;case"p":t.children.push(this.parseParagraph(e));break;case"tcPr":this.parseTableCellProperties(e,t)}})),t}parseTableCellProperties(e,t){t.cssStyle=this.parseDefaultProperties(e,{},null,(e=>{var r;switch(e.localName){case"gridSpan":t.span=s.default.intAttr(e,"val",null);break;case"vMerge":t.verticalMerge=null!==(r=s.default.attr(e,"val"))&&void 0!==r?r:"continue";break;case"cnfStyle":t.className=m.classNameOfCnfStyle(e);break;default:return!1}return!0}))}parseDefaultProperties(e,r=null,n=null,a=null){return r=r||{},p.foreach(e,(i=>{if(!(null==a?void 0:a(i)))switch(i.localName){case"jc":r["text-align"]=m.valueOfJc(i);break;case"textAlignment":r["vertical-align"]=m.valueOfTextAlignment(i);break;case"color":r.color=p.colorAttr(i,"val",null,t.autos.color);break;case"sz":r["font-size"]=r["min-height"]=s.default.lengthAttr(i,"val",u.LengthUsage.FontSize);break;case"shd":r["background-color"]=p.colorAttr(i,"fill",null,t.autos.shd);break;case"highlight":r["background-color"]=p.colorAttr(i,"val",null,t.autos.highlight);break;case"vertAlign":break;case"position":r.verticalAlign=s.default.lengthAttr(i,"val",u.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":r.width=m.valueOfSize(i,"w");break;case"trHeight":this.parseTrHeight(i,r);break;case"strike":r["text-decoration"]=s.default.boolAttr(i,"val",!0)?"line-through":"none";break;case"b":r["font-weight"]=s.default.boolAttr(i,"val",!0)?"bold":"normal";break;case"i":r["font-style"]=s.default.boolAttr(i,"val",!0)?"italic":"normal";break;case"caps":r["text-transform"]=s.default.boolAttr(i,"val",!0)?"uppercase":"none";break;case"smallCaps":r["text-transform"]=s.default.boolAttr(i,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(i,r);break;case"ind":case"tblInd":this.parseIndentation(i,r);break;case"rFonts":this.parseFont(i,r);break;case"tblBorders":this.parseBorderProperties(i,n||r);break;case"tblCellSpacing":r["border-spacing"]=m.valueOfMargin(i),r["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(i,r);break;case"bdr":r.border=m.valueOfBorder(i);break;case"tcBorders":this.parseBorderProperties(i,r);break;case"vanish":s.default.boolAttr(i,"val",!0)&&(r.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(i,n||r);break;case"tblLayout":r["table-layout"]=m.valueOfTblLayout(i);break;case"vAlign":r["vertical-align"]=m.valueOfTextAlignment(i);break;case"spacing":"pPr"==e.localName&&this.parseSpacing(i,r);break;case"wordWrap":s.default.boolAttr(i,"val")&&(r["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":r.hyphens=s.default.boolAttr(i,"val",!0)?"none":"auto";break;case"lang":r.$lang=s.default.attr(i,"val");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${e.localName}.${i.localName}`)}})),r}parseUnderline(e,t){var r=s.default.attr(e,"val");if(null!=r){switch(r){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":t["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":t["text-decoration-style"]="dotted";break;case"double":t["text-decoration-style"]="double";break;case"single":case"thick":case"words":t["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":t["text-decoration-style"]="wavy";break;case"none":t["text-decoration"]="none"}var n=p.colorAttr(e,"color");n&&(t["text-decoration-color"]=n)}}parseFont(e,t){var r=[s.default.attr(e,"ascii"),m.themeValue(e,"asciiTheme")].filter((e=>e)).join(", ");r.length>0&&(t["font-family"]=r)}parseIndentation(e,t){var r=s.default.lengthAttr(e,"firstLine"),n=s.default.lengthAttr(e,"hanging"),a=s.default.lengthAttr(e,"left"),i=s.default.lengthAttr(e,"start"),o=s.default.lengthAttr(e,"right"),l=s.default.lengthAttr(e,"end");r&&(t["text-indent"]=r),n&&(t["text-indent"]=`-${n}`),(a||i)&&(t["margin-left"]=a||i),(o||l)&&(t["margin-right"]=o||l)}parseSpacing(e,t){var r=s.default.lengthAttr(e,"before"),n=s.default.lengthAttr(e,"after"),a=s.default.intAttr(e,"line",null),i=s.default.attr(e,"lineRule");if(r&&(t["margin-top"]=r),n&&(t["margin-bottom"]=n),null!==a)switch(i){case"auto":t["line-height"]=`${(a/240).toFixed(2)}`;break;case"atLeast":t["line-height"]=`calc(100% + ${a/20}pt)`;break;default:t["line-height"]=t["min-height"]=a/20+"pt"}}parseMarginProperties(e,t){p.foreach(e,(e=>{switch(e.localName){case"left":t["padding-left"]=m.valueOfMargin(e);break;case"right":t["padding-right"]=m.valueOfMargin(e);break;case"top":t["padding-top"]=m.valueOfMargin(e);break;case"bottom":t["padding-bottom"]=m.valueOfMargin(e)}}))}parseTrHeight(e,t){s.default.attr(e,"hRule"),t.height=s.default.lengthAttr(e,"val")}parseBorderProperties(e,t){p.foreach(e,(e=>{switch(e.localName){case"start":case"left":t["border-left"]=m.valueOfBorder(e);break;case"end":case"right":t["border-right"]=m.valueOfBorder(e);break;case"top":t["border-top"]=m.valueOfBorder(e);break;case"bottom":t["border-bottom"]=m.valueOfBorder(e)}}))}};const f=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class p{static foreach(e,t){for(var r=0;r"1"==t[r])).join(" ")}static valueOfJc(e){var t=s.default.attr(e,"val");switch(t){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return t}static valueOfVertAlign(e,t=!1){var r=s.default.attr(e,"val");switch(r){case"subscript":return"sub";case"superscript":return t?"sup":"super"}return t?null:r}static valueOfTextAlignment(e){var t=s.default.attr(e,"val");switch(t){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return t}static addSize(e,t){return null==e?t:null==t?e:`calc(${e} + ${t})`}static classNameOftblLook(e){const t=s.default.hexAttr(e,"val",0);let r="";return(s.default.boolAttr(e,"firstRow")||32&t)&&(r+=" first-row"),(s.default.boolAttr(e,"lastRow")||64&t)&&(r+=" last-row"),(s.default.boolAttr(e,"firstColumn")||128&t)&&(r+=" first-col"),(s.default.boolAttr(e,"lastColumn")||256&t)&&(r+=" last-col"),(s.default.boolAttr(e,"noHBand")||512&t)&&(r+=" no-hband"),(s.default.boolAttr(e,"noVBand")||1024&t)&&(r+=" no-vband"),r.trim()}}},162:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CorePropsPart=void 0;const n=r(530),a=r(614);class i extends n.Part{parseXml(e){this.props=(0,a.parseCoreProps)(e,this._package.xmlParser)}}t.CorePropsPart=i},614:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseCoreProps=void 0,t.parseCoreProps=function(e,t){const r={};for(let n of t.elements(e))switch(n.localName){case"title":r.title=n.textContent;break;case"description":r.description=n.textContent;break;case"subject":r.subject=n.textContent;break;case"creator":r.creator=n.textContent;break;case"keywords":r.keywords=n.textContent;break;case"language":r.language=n.textContent;break;case"lastModifiedBy":r.lastModifiedBy=n.textContent;break;case"revision":n.textContent&&(r.revision=parseInt(n.textContent))}return r}},177:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CustomPropsPart=void 0;const n=r(530),a=r(821);class i extends n.Part{parseXml(e){this.props=(0,a.parseCustomProps)(e,this._package.xmlParser)}}t.CustomPropsPart=i},821:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseCustomProps=void 0,t.parseCustomProps=function(e,t){return t.elements(e,"property").map((e=>{const r=e.firstChild;return{formatId:t.attr(e,"fmtid"),name:t.attr(e,"name"),type:r.nodeName,value:r.textContent}}))}},665:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedPropsPart=void 0;const n=r(530),a=r(668);class i extends n.Part{parseXml(e){this.props=(0,a.parseExtendedProps)(e,this._package.xmlParser)}}t.ExtendedPropsPart=i},668:(e,t)=>{function r(e){if(void 0!==e)return parseInt(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.parseExtendedProps=void 0,t.parseExtendedProps=function(e,t){const n={};for(let a of t.elements(e))switch(a.localName){case"Template":n.template=a.textContent;break;case"Pages":n.pages=r(a.textContent);break;case"Words":n.words=r(a.textContent);break;case"Characters":n.characters=r(a.textContent);break;case"Application":n.application=a.textContent;break;case"Lines":n.lines=r(a.textContent);break;case"Paragraphs":n.paragraphs=r(a.textContent);break;case"Company":n.company=a.textContent;break;case"AppVersion":n.appVersion=a.textContent}return n}},172:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseBookmarkEnd=t.parseBookmarkStart=void 0;const n=r(120);t.parseBookmarkStart=function(e,t){return{type:n.DomType.BookmarkStart,id:t.attr(e,"id"),name:t.attr(e,"name"),colFirst:t.intAttr(e,"colFirst"),colLast:t.intAttr(e,"colLast")}},t.parseBookmarkEnd=function(e,t){return{type:n.DomType.BookmarkEnd,id:t.attr(e,"id")}}},191:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseBorders=t.parseBorder=void 0;const n=r(149);function a(e,t){return{type:t.attr(e,"val"),color:t.attr(e,"color"),size:t.lengthAttr(e,"sz",n.LengthUsage.Border),offset:t.lengthAttr(e,"space",n.LengthUsage.Point),frame:t.boolAttr(e,"frame"),shadow:t.boolAttr(e,"shadow")}}t.parseBorder=a,t.parseBorders=function(e,t){var r={};for(let n of t.elements(e))switch(n.localName){case"left":r.left=a(n,t);break;case"top":r.top=a(n,t);break;case"right":r.right=a(n,t);break;case"bottom":r.bottom=a(n,t)}return r}},149:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseCommonProperty=t.convertPercentage=t.convertBoolean=t.convertLength=t.LengthUsage=t.ns=void 0,t.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},t.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:1/12700,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:1/240,unit:""},VmlEmu:{mul:1/12700,unit:""}},t.convertLength=function(e,r=t.LengthUsage.Dxa){return null==e||/.+(p[xt]|[%])$/.test(e)?e:`${(parseInt(e)*r.mul).toFixed(2)}${r.unit}`},t.convertBoolean=function(e,t=!1){switch(e){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return t}},t.convertPercentage=function(e){return e?parseInt(e)/100:null},t.parseCommonProperty=function(e,r,n){if(e.namespaceURI!=t.ns.wordml)return!1;switch(e.localName){case"color":r.color=n.attr(e,"val");break;case"sz":r.fontSize=n.lengthAttr(e,"val",t.LengthUsage.FontSize);break;default:return!1}return!0}},448:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DocumentPart=void 0;const n=r(530);class a extends n.Part{constructor(e,t,r){super(e,t),this._documentParser=r}parseXml(e){this.body=this._documentParser.parseDocumentFile(e)}}t.DocumentPart=a},120:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.OpenXmlElementBase=t.DomType=void 0,function(e){e.Document="document",e.Paragraph="paragraph",e.Run="run",e.Break="break",e.NoBreakHyphen="noBreakHyphen",e.Table="table",e.Row="row",e.Cell="cell",e.Hyperlink="hyperlink",e.Drawing="drawing",e.Image="image",e.Text="text",e.Tab="tab",e.Symbol="symbol",e.BookmarkStart="bookmarkStart",e.BookmarkEnd="bookmarkEnd",e.Footer="footer",e.Header="header",e.FootnoteReference="footnoteReference",e.EndnoteReference="endnoteReference",e.Footnote="footnote",e.Endnote="endnote",e.SimpleField="simpleField",e.ComplexField="complexField",e.Instruction="instruction",e.VmlPicture="vmlPicture",e.MmlMath="mmlMath",e.MmlMathParagraph="mmlMathParagraph",e.MmlFraction="mmlFraction",e.MmlFunction="mmlFunction",e.MmlFunctionName="mmlFunctionName",e.MmlNumerator="mmlNumerator",e.MmlDenominator="mmlDenominator",e.MmlRadical="mmlRadical",e.MmlBase="mmlBase",e.MmlDegree="mmlDegree",e.MmlSuperscript="mmlSuperscript",e.MmlSubscript="mmlSubscript",e.MmlPreSubSuper="mmlPreSubSuper",e.MmlSubArgument="mmlSubArgument",e.MmlSuperArgument="mmlSuperArgument",e.MmlNary="mmlNary",e.MmlDelimiter="mmlDelimiter",e.MmlRun="mmlRun",e.MmlEquationArray="mmlEquationArray",e.MmlLimit="mmlLimit",e.MmlLimitLower="mmlLimitLower",e.MmlMatrix="mmlMatrix",e.MmlMatrixRow="mmlMatrixRow",e.MmlBox="mmlBox",e.MmlBar="mmlBar",e.MmlGroupChar="mmlGroupChar",e.VmlElement="vmlElement",e.Inserted="inserted",e.Deleted="deleted",e.DeletedText="deletedText"}(r||(t.DomType=r={})),t.OpenXmlElementBase=class{constructor(){this.children=[],this.cssStyle={}}}},931:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseLineSpacing=void 0,t.parseLineSpacing=function(e,t){return{before:t.lengthAttr(e,"before"),after:t.lengthAttr(e,"after"),line:t.intAttr(e,"line"),lineRule:t.attr(e,"lineRule")}}},109:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseNumbering=t.parseTabs=t.parseParagraphProperty=t.parseParagraphProperties=void 0;const n=r(149),a=r(59),i=r(931),s=r(488);function o(e,t,r){if(e.namespaceURI!=n.ns.wordml)return!1;if((0,n.parseCommonProperty)(e,t,r))return!0;switch(e.localName){case"tabs":t.tabs=l(e,r);break;case"sectPr":t.sectionProps=(0,a.parseSectionProperties)(e,r);break;case"numPr":t.numbering=u(e,r);break;case"spacing":return t.lineSpacing=(0,i.parseLineSpacing)(e,r),!1;case"textAlignment":return t.textAlignment=r.attr(e,"val"),!1;case"keepNext":t.keepLines=r.boolAttr(e,"val",!0);break;case"keepNext":t.keepNext=r.boolAttr(e,"val",!0);break;case"pageBreakBefore":t.pageBreakBefore=r.boolAttr(e,"val",!0);break;case"outlineLvl":t.outlineLevel=r.intAttr(e,"val");break;case"pStyle":t.styleName=r.attr(e,"val");break;case"rPr":t.runProps=(0,s.parseRunProperties)(e,r);break;default:return!1}return!0}function l(e,t){return t.elements(e,"tab").map((e=>({position:t.lengthAttr(e,"pos"),leader:t.attr(e,"leader"),style:t.attr(e,"val")})))}function u(e,t){var r={};for(let n of t.elements(e))switch(n.localName){case"numId":r.id=t.attr(n,"val");break;case"ilvl":r.level=t.intAttr(n,"val")}return r}t.parseParagraphProperties=function(e,t){let r={};for(let n of t.elements(e))o(n,r,t);return r},t.parseParagraphProperty=o,t.parseTabs=l,t.parseNumbering=u},488:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseRunProperty=t.parseRunProperties=void 0;const n=r(149);function a(e,t,r){return!!(0,n.parseCommonProperty)(e,t,r)}t.parseRunProperties=function(e,t){let r={};for(let n of t.elements(e))a(n,r,t);return r},t.parseRunProperty=a},59:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseSectionProperties=t.SectionType=void 0;const n=r(472),a=r(191);var i;function s(e,t){return{numberOfColumns:t.intAttr(e,"num"),space:t.lengthAttr(e,"space"),separator:t.boolAttr(e,"sep"),equalWidth:t.boolAttr(e,"equalWidth",!0),columns:t.elements(e,"col").map((e=>({width:t.lengthAttr(e,"w"),space:t.lengthAttr(e,"space")})))}}function o(e,t){return{chapSep:t.attr(e,"chapSep"),chapStyle:t.attr(e,"chapStyle"),format:t.attr(e,"fmt"),start:t.intAttr(e,"start")}}function l(e,t){return{id:t.attr(e,"id"),type:t.attr(e,"type")}}!function(e){e.Continuous="continuous",e.NextPage="nextPage",e.NextColumn="nextColumn",e.EvenPage="evenPage",e.OddPage="oddPage"}(i||(t.SectionType=i={})),t.parseSectionProperties=function(e,t=n.default){var r,i,u={};for(let n of t.elements(e))switch(n.localName){case"pgSz":u.pageSize={width:t.lengthAttr(n,"w"),height:t.lengthAttr(n,"h"),orientation:t.attr(n,"orient")};break;case"type":u.type=t.attr(n,"val");break;case"pgMar":u.pageMargins={left:t.lengthAttr(n,"left"),right:t.lengthAttr(n,"right"),top:t.lengthAttr(n,"top"),bottom:t.lengthAttr(n,"bottom"),header:t.lengthAttr(n,"header"),footer:t.lengthAttr(n,"footer"),gutter:t.lengthAttr(n,"gutter")};break;case"cols":u.columns=s(n,t);break;case"headerReference":(null!==(r=u.headerRefs)&&void 0!==r?r:u.headerRefs=[]).push(l(n,t));break;case"footerReference":(null!==(i=u.footerRefs)&&void 0!==i?i:u.footerRefs=[]).push(l(n,t));break;case"titlePg":u.titlePage=t.boolAttr(n,"val",!0);break;case"pgBorders":u.pageBorders=(0,a.parseBorders)(n,t);break;case"pgNumType":u.pageNumber=o(n,t)}return u}},667:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.renderAsync=t.praseAsync=t.defaultOptions=void 0;const n=r(213),a=r(168),i=r(932);t.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},t.praseAsync=function(e,r=null){const i=Object.assign(Object.assign({},t.defaultOptions),r);return n.WordDocument.load(e,new a.DocumentParser(i),i)},t.renderAsync=async function(e,r,s=null,o=null){const l=Object.assign(Object.assign({},t.defaultOptions),o),u=new i.HtmlRenderer(window.document),c=await n.WordDocument.load(e,new a.DocumentParser(l),l);return u.render(c,r,s,l),c}},380:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontTablePart=void 0;const n=r(530),a=r(512);class i extends n.Part{parseXml(e){this.fonts=(0,a.parseFonts)(e,this._package.xmlParser)}}t.FontTablePart=i},512:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseEmbedFontRef=t.parseFont=t.parseFonts=void 0;const r={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function n(e,t){let r={name:t.attr(e,"name"),embedFontRefs:[]};for(let n of t.elements(e))switch(n.localName){case"family":r.family=t.attr(n,"val");break;case"altName":r.altName=t.attr(n,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":r.embedFontRefs.push(a(n,t))}return r}function a(e,t){return{id:t.attr(e,"id"),key:t.attr(e,"fontKey"),type:r[e.localName]}}t.parseFonts=function(e,t){return t.elements(e).map((e=>n(e,t)))},t.parseFont=n,t.parseEmbedFontRef=a},984:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WmlFooter=t.WmlHeader=void 0;const n=r(120);class a extends n.OpenXmlElementBase{constructor(){super(...arguments),this.type=n.DomType.Header}}t.WmlHeader=a;class i extends n.OpenXmlElementBase{constructor(){super(...arguments),this.type=n.DomType.Footer}}t.WmlFooter=i},985:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FooterPart=t.HeaderPart=t.BaseHeaderFooterPart=void 0;const n=r(530),a=r(984);class i extends n.Part{constructor(e,t,r){super(e,t),this._documentParser=r}parseXml(e){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(e)}}t.BaseHeaderFooterPart=i,t.HeaderPart=class extends i{createRootElement(){return new a.WmlHeader}},t.FooterPart=class extends i{createRootElement(){return new a.WmlFooter}}},932:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HtmlRenderer=void 0;const n=r(120),a=r(593),i=r(630),s=r(438),o="http://www.w3.org/1998/Math/MathML";function l(e,t,r){return c(void 0,e,t,r)}function u(e,t,r){return c("http://www.w3.org/2000/svg",e,t,r)}function c(e,t,r,n){var a=e?document.createElementNS(e,t):document.createElement(t);return Object.assign(a,r),n&&d(a,n),a}function h(e){e.innerHTML=""}function d(e,t){t.forEach((t=>e.appendChild((0,a.isString)(t)?document.createTextNode(t):t)))}function f(e){return l("style",{innerHTML:e})}function p(e,t){e.appendChild(document.createComment(t))}t.HtmlRenderer=class{constructor(e){this.htmlDocument=e,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=l}render(e,t,r=null,n){var i;this.document=e,this.options=n,this.className=n.className,this.rootSelector=n.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,h(r=r||t),h(t),p(r,"docxjs library predefined styles"),r.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&n.useMathMLPolyfill&&(p(r,"docxjs mathml polyfill styles"),r.appendChild(f(s.default))),e.themePart&&(p(r,"docxjs document theme values"),this.renderTheme(e.themePart,r)),null!=e.stylesPart&&(this.styleMap=this.processStyles(e.stylesPart.styles),p(r,"docxjs document styles"),r.appendChild(this.renderStyles(e.stylesPart.styles))),e.numberingPart&&(this.prodessNumberings(e.numberingPart.domNumberings),p(r,"docxjs document numbering styles"),r.appendChild(this.renderNumbering(e.numberingPart.domNumberings,r))),e.footnotesPart&&(this.footnoteMap=(0,a.keyBy)(e.footnotesPart.notes,(e=>e.id))),e.endnotesPart&&(this.endnoteMap=(0,a.keyBy)(e.endnotesPart.notes,(e=>e.id))),e.settingsPart&&(this.defaultTabSize=null===(i=e.settingsPart.settings)||void 0===i?void 0:i.defaultTabStop),!n.ignoreFonts&&e.fontTablePart&&this.renderFontTable(e.fontTablePart,r);var o=this.renderSections(e.documentPart.body);this.options.inWrapper?t.appendChild(this.renderWrapper(o)):d(t,o),this.refreshTabStops()}renderTheme(e,t){var r,n;const a={},i=null===(r=e.theme)||void 0===r?void 0:r.fontScheme;i&&(i.majorFont&&(a["--docx-majorHAnsi-font"]=i.majorFont.latinTypeface),i.minorFont&&(a["--docx-minorHAnsi-font"]=i.minorFont.latinTypeface));const s=null===(n=e.theme)||void 0===n?void 0:n.colorScheme;if(s)for(let[e,t]of Object.entries(s.colors))a[`--docx-${e}-color`]=`#${t}`;const o=this.styleToString(`.${this.className}`,a);t.appendChild(f(o))}renderFontTable(e,t){for(let r of e.fonts)for(let e of r.embedFontRefs)this.document.loadFont(e.id,e.key).then((n=>{const a={"font-family":r.name,src:`url(${n})`};"bold"!=e.type&&"boldItalic"!=e.type||(a["font-weight"]="bold"),"italic"!=e.type&&"boldItalic"!=e.type||(a["font-style"]="italic"),p(t,`docxjs ${r.name} font`);const i=this.styleToString("@font-face",a);t.appendChild(f(i)),this.refreshTabStops()}))}processStyleName(e){return e?`${this.className}_${(0,a.escapeClassName)(e)}`:this.className}processStyles(e){const t=(0,a.keyBy)(e.filter((e=>null!=e.id)),(e=>e.id));for(const n of e.filter((e=>e.basedOn))){var r=t[n.basedOn];if(r){n.paragraphProps=(0,a.mergeDeep)(n.paragraphProps,r.paragraphProps),n.runProps=(0,a.mergeDeep)(n.runProps,r.runProps);for(const e of r.styles){const t=n.styles.find((t=>t.target==e.target));t?this.copyStyleProperties(e.values,t.values):n.styles.push(Object.assign(Object.assign({},e),{values:Object.assign({},e.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${n.basedOn}`)}for(let t of e)t.cssName=this.processStyleName(t.id);return t}prodessNumberings(e){var t;for(let r of e.filter((e=>e.pStyleName))){const e=this.findStyle(r.pStyleName);(null===(t=null==e?void 0:e.paragraphProps)||void 0===t?void 0:t.numbering)&&(e.paragraphProps.numbering.level=r.level)}}processElement(e){if(e.children)for(var t of e.children)t.parent=e,t.type==n.DomType.Table?this.processTable(t):this.processElement(t)}processTable(e){for(var t of e.children)for(var r of t.children)r.cssStyle=this.copyStyleProperties(e.cellStyle,r.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(r)}copyStyleProperties(e,t,r=null){if(!e)return t;for(var n of(null==t&&(t={}),null==r&&(r=Object.getOwnPropertyNames(e)),r))e.hasOwnProperty(n)&&!t.hasOwnProperty(n)&&(t[n]=e[n]);return t}createSection(e,t){var r=this.createElement("section",{className:e});return t&&(t.pageMargins&&(r.style.paddingLeft=t.pageMargins.left,r.style.paddingRight=t.pageMargins.right,r.style.paddingTop=t.pageMargins.top,r.style.paddingBottom=t.pageMargins.bottom),t.pageSize&&(this.options.ignoreWidth||(r.style.width=t.pageSize.width),this.options.ignoreHeight||(r.style.minHeight=t.pageSize.height)),t.columns&&t.columns.numberOfColumns&&(r.style.columnCount=`${t.columns.numberOfColumns}`,r.style.columnGap=t.columns.space,t.columns.separator&&(r.style.columnRule="1px solid black"))),r}renderSections(e){const t=[];this.processElement(e);const r=this.splitBySection(e.children);let n=null;for(let i=0,s=r.length;i"first"==e.type)):null)&&void 0!==i?i:r%2==1?e.find((e=>"even"==e.type)):null)&&void 0!==s?s:e.find((e=>"default"==e.type)),l=o&&this.document.findPartByRelId(o.id,this.document.documentPart);l&&(this.currentPart=l,this.usedHederFooterParts.includes(l.path)||(this.processElement(l.rootElement),this.usedHederFooterParts.push(l.path)),this.renderElements([l.rootElement],a),this.currentPart=null)}}isPageBreakElement(e){return e.type==n.DomType.Break&&("lastRenderedPageBreak"==e.break?!this.options.ignoreLastRenderedPageBreak:"page"==e.break)}splitBySection(e){var t,r={sectProps:null,elements:[]},a=[r];for(let c of e){if(c.type==n.DomType.Paragraph){const e=this.findStyle(c.styleName);(null===(t=null==e?void 0:e.paragraphProps)||void 0===t?void 0:t.pageBreakBefore)&&(r.sectProps=i,r={sectProps:null,elements:[]},a.push(r))}if(r.elements.push(c),c.type==n.DomType.Paragraph){const e=c;var i=e.sectionProps,s=-1,o=-1;if(this.options.breakPages&&e.children&&(s=e.children.findIndex((e=>{var t,r;return-1!=(o=null!==(r=null===(t=e.children)||void 0===t?void 0:t.findIndex(this.isPageBreakElement.bind(this)))&&void 0!==r?r:-1)}))),(i||-1!=s)&&(r.sectProps=i,r={sectProps:null,elements:[]},a.push(r)),-1!=s){let t=e.children[s],n=o=0;e--)null==a[e].sectProps?a[e].sectProps=c:c=a[e].sectProps;return a}renderWrapper(e){return this.createElement("div",{className:`${this.className}-wrapper`},e)}renderDefaultStyle(){var e=this.className;return f(`\n.${e}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } \n.${e}-wrapper>section.${e} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }\n.${e} { color: black; hyphens: auto; }\nsection.${e} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\nsection.${e}>article { margin-bottom: auto; z-index: 1; }\nsection.${e}>footer { z-index: 1; }\n.${e} table { border-collapse: collapse; }\n.${e} table td, .${e} table th { vertical-align: top; }\n.${e} p { margin: 0pt; min-height: 1em; }\n.${e} span { white-space: pre-wrap; overflow-wrap: break-word; }\n.${e} a { color: inherit; text-decoration: inherit; }\n`)}renderNumbering(e,t){var r="",n=[];for(var a of e){var i=`p.${this.numberingClass(a.id,a.level)}`,s="none";if(a.bullet){let e=`--${this.className}-${a.bullet.src}`.toLowerCase();r+=this.styleToString(`${i}:before`,{content:"' '",display:"inline-block",background:`var(${e})`},a.bullet.style),this.document.loadNumberingImage(a.bullet.src).then((r=>{var n=`${this.rootSelector} { ${e}: url(${r}) }`;t.appendChild(f(n))}))}else if(a.levelText){let e=this.numberingCounter(a.id,a.level);const t=e+" "+(a.start-1);a.level>0&&(r+=this.styleToString(`p.${this.numberingClass(a.id,a.level-1)}`,{"counter-reset":t})),n.push(t),r+=this.styleToString(`${i}:before`,Object.assign({content:this.levelTextToContent(a.levelText,a.suff,a.id,this.numFormatToCssValue(a.format)),"counter-increment":e},a.rStyle))}else s=this.numFormatToCssValue(a.format);r+=this.styleToString(i,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":s},a.pStyle))}return n.length>0&&(r+=this.styleToString(this.rootSelector,{"counter-reset":n.join(" ")})),f(r)}renderStyles(e){var t,r="";const n=this.styleMap,i=(0,a.keyBy)(e.filter((e=>e.isDefault)),(e=>e.target));for(const a of e){var s=a.styles;if(a.linked){var o=a.linked&&n[a.linked];o?s=s.concat(o.styles):this.options.debug&&console.warn(`Can't find linked style ${a.linked}`)}for(const e of s){var l=`${null!==(t=a.target)&&void 0!==t?t:""}.${a.cssName}`;a.target!=e.target&&(l+=` ${e.target}`),i[a.target]==a&&(l=`.${this.className} ${a.target}, `+l),r+=this.styleToString(l,e.values)}}return f(r)}renderNotes(e,t,r){var n=e.map((e=>t[e])).filter((e=>e));if(n.length>0){var a=this.createElement("ol",null,this.renderElements(n));r.appendChild(a)}}renderElement(e){switch(e.type){case n.DomType.Paragraph:return this.renderParagraph(e);case n.DomType.BookmarkStart:return this.renderBookmarkStart(e);case n.DomType.BookmarkEnd:return null;case n.DomType.Run:return this.renderRun(e);case n.DomType.Table:return this.renderTable(e);case n.DomType.Row:return this.renderTableRow(e);case n.DomType.Cell:return this.renderTableCell(e);case n.DomType.Hyperlink:return this.renderHyperlink(e);case n.DomType.Drawing:return this.renderDrawing(e);case n.DomType.Image:return this.renderImage(e);case n.DomType.Text:case n.DomType.Text:return this.renderText(e);case n.DomType.DeletedText:return this.renderDeletedText(e);case n.DomType.Tab:return this.renderTab(e);case n.DomType.Symbol:return this.renderSymbol(e);case n.DomType.Break:return this.renderBreak(e);case n.DomType.Footer:return this.renderContainer(e,"footer");case n.DomType.Header:return this.renderContainer(e,"header");case n.DomType.Footnote:case n.DomType.Endnote:return this.renderContainer(e,"li");case n.DomType.FootnoteReference:return this.renderFootnoteReference(e);case n.DomType.EndnoteReference:return this.renderEndnoteReference(e);case n.DomType.NoBreakHyphen:return this.createElement("wbr");case n.DomType.VmlPicture:return this.renderVmlPicture(e);case n.DomType.VmlElement:return this.renderVmlElement(e);case n.DomType.MmlMath:return this.renderContainerNS(e,o,"math",{xmlns:o});case n.DomType.MmlMathParagraph:return this.renderContainer(e,"span");case n.DomType.MmlFraction:return this.renderContainerNS(e,o,"mfrac");case n.DomType.MmlBase:return this.renderContainerNS(e,o,e.parent.type==n.DomType.MmlMatrixRow?"mtd":"mrow");case n.DomType.MmlNumerator:case n.DomType.MmlDenominator:case n.DomType.MmlFunction:case n.DomType.MmlLimit:case n.DomType.MmlBox:return this.renderContainerNS(e,o,"mrow");case n.DomType.MmlGroupChar:return this.renderMmlGroupChar(e);case n.DomType.MmlLimitLower:return this.renderContainerNS(e,o,"munder");case n.DomType.MmlMatrix:return this.renderContainerNS(e,o,"mtable");case n.DomType.MmlMatrixRow:return this.renderContainerNS(e,o,"mtr");case n.DomType.MmlRadical:return this.renderMmlRadical(e);case n.DomType.MmlSuperscript:return this.renderContainerNS(e,o,"msup");case n.DomType.MmlSubscript:return this.renderContainerNS(e,o,"msub");case n.DomType.MmlDegree:case n.DomType.MmlSuperArgument:case n.DomType.MmlSubArgument:return this.renderContainerNS(e,o,"mn");case n.DomType.MmlFunctionName:return this.renderContainerNS(e,o,"ms");case n.DomType.MmlDelimiter:return this.renderMmlDelimiter(e);case n.DomType.MmlRun:return this.renderMmlRun(e);case n.DomType.MmlNary:return this.renderMmlNary(e);case n.DomType.MmlPreSubSuper:return this.renderMmlPreSubSuper(e);case n.DomType.MmlBar:return this.renderMmlBar(e);case n.DomType.MmlEquationArray:return this.renderMllList(e);case n.DomType.Inserted:return this.renderInserted(e);case n.DomType.Deleted:return this.renderDeleted(e)}return null}renderChildren(e,t){return this.renderElements(e.children,t)}renderElements(e,t){if(null==e)return null;var r=e.flatMap((e=>this.renderElement(e))).filter((e=>null!=e));return t&&d(t,r),r}renderContainer(e,t,r){return this.createElement(t,r,this.renderChildren(e))}renderContainerNS(e,t,r,n){return c(t,r,n,this.renderChildren(e))}renderParagraph(e){var t,r,n,a,i=this.createElement("p");const s=this.findStyle(e.styleName);null!==(t=e.tabs)&&void 0!==t||(e.tabs=null===(r=null==s?void 0:s.paragraphProps)||void 0===r?void 0:r.tabs),this.renderClass(e,i),this.renderChildren(e,i),this.renderStyleValues(e.cssStyle,i),this.renderCommonProperties(i.style,e);const o=null!==(n=e.numbering)&&void 0!==n?n:null===(a=null==s?void 0:s.paragraphProps)||void 0===a?void 0:a.numbering;return o&&i.classList.add(this.numberingClass(o.id,o.level)),i}renderRunProperties(e,t){this.renderCommonProperties(e,t)}renderCommonProperties(e,t){null!=t&&(t.color&&(e.color=t.color),t.fontSize&&(e["font-size"]=t.fontSize))}renderHyperlink(e){var t=this.createElement("a");if(this.renderChildren(e,t),this.renderStyleValues(e.cssStyle,t),e.href)t.href=e.href;else if(e.id){const r=this.document.documentPart.rels.find((t=>t.id==e.id&&"External"===t.targetMode));t.href=null==r?void 0:r.target}return t}renderDrawing(e){var t=this.createElement("div");return t.style.display="inline-block",t.style.position="relative",t.style.textIndent="0px",this.renderChildren(e,t),this.renderStyleValues(e.cssStyle,t),t}renderImage(e){let t=this.createElement("img");return this.renderStyleValues(e.cssStyle,t),this.document&&this.document.loadDocumentImage(e.src,this.currentPart).then((e=>{t.src=e})),t}renderText(e){return this.htmlDocument.createTextNode(e.text)}renderDeletedText(e){return this.options.renderEndnotes?this.htmlDocument.createTextNode(e.text):null}renderBreak(e){return"textWrapping"==e.break?this.createElement("br"):null}renderInserted(e){return this.options.renderChanges?this.renderContainer(e,"ins"):this.renderChildren(e)}renderDeleted(e){return this.options.renderChanges?this.renderContainer(e,"del"):null}renderSymbol(e){var t=this.createElement("span");return t.style.fontFamily=e.font,t.innerHTML=`&#x${e.char};`,t}renderFootnoteReference(e){var t=this.createElement("sup");return this.currentFootnoteIds.push(e.id),t.textContent=`${this.currentFootnoteIds.length}`,t}renderEndnoteReference(e){var t=this.createElement("sup");return this.currentEndnoteIds.push(e.id),t.textContent=`${this.currentEndnoteIds.length}`,t}renderTab(e){var t,r=this.createElement("span");if(r.innerHTML=" ",this.options.experimental){r.className=this.tabStopClass();var a=null===(t=function(e,t){for(var r=e.parent;null!=r&&r.type!=t;)r=r.parent;return r}(e,n.DomType.Paragraph))||void 0===t?void 0:t.tabs;this.currentTabs.push({stops:a,span:r})}return r}renderBookmarkStart(e){var t=this.createElement("span");return t.id=e.name,t}renderRun(e){if(e.fieldRun)return null;const t=this.createElement("span");if(e.id&&(t.id=e.id),this.renderClass(e,t),this.renderStyleValues(e.cssStyle,t),e.verticalAlign){const r=this.createElement(e.verticalAlign);this.renderChildren(e,r),t.appendChild(r)}else this.renderChildren(e,t);return t}renderTable(e){let t=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},e.columns&&t.appendChild(this.renderTableColumns(e.columns)),this.renderClass(e,t),this.renderChildren(e,t),this.renderStyleValues(e.cssStyle,t),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),t}renderTableColumns(e){let t=this.createElement("colgroup");for(let r of e){let e=this.createElement("col");r.width&&(e.style.width=r.width),t.appendChild(e)}return t}renderTableRow(e){let t=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(e,t),this.renderChildren(e,t),this.renderStyleValues(e.cssStyle,t),this.currentCellPosition.row++,t}renderTableCell(e){let t=this.createElement("td");const r=this.currentCellPosition.col;return e.verticalMerge?"restart"==e.verticalMerge?(this.currentVerticalMerge[r]=t,t.rowSpan=1):this.currentVerticalMerge[r]&&(this.currentVerticalMerge[r].rowSpan+=1,t.style.display="none"):this.currentVerticalMerge[r]=null,this.renderClass(e,t),this.renderChildren(e,t),this.renderStyleValues(e.cssStyle,t),e.span&&(t.colSpan=e.span),this.currentCellPosition.col+=t.colSpan,t}renderVmlPicture(e){var t=l("div");return this.renderChildren(e,t),t}renderVmlElement(e){var t,r,n=u("svg");n.setAttribute("style",e.cssStyleText);const a=this.renderVmlChildElement(e);return(null===(t=e.imageHref)||void 0===t?void 0:t.id)&&(null===(r=this.document)||void 0===r||r.loadDocumentImage(e.imageHref.id,this.currentPart).then((e=>a.setAttribute("href",e)))),n.appendChild(a),requestAnimationFrame((()=>{const e=n.firstElementChild.getBBox();n.setAttribute("width",`${Math.ceil(e.x+e.width)}`),n.setAttribute("height",`${Math.ceil(e.y+e.height)}`)})),n}renderVmlChildElement(e){const t=u(e.tagName);Object.entries(e.attrs).forEach((([e,r])=>t.setAttribute(e,r)));for(let r of e.children)r.type==n.DomType.VmlElement?t.appendChild(this.renderVmlChildElement(r)):t.appendChild(...(0,a.asArray)(this.renderElement(r)));return t}renderMmlRadical(e){var t;const r=e.children.find((e=>e.type==n.DomType.MmlBase));if(null===(t=e.props)||void 0===t?void 0:t.hideDegree)return c(o,"msqrt",null,this.renderElements([r]));const a=e.children.find((e=>e.type==n.DomType.MmlDegree));return c(o,"mroot",null,this.renderElements([r,a]))}renderMmlDelimiter(e){var t,r;const n=[];return n.push(c(o,"mo",null,[null!==(t=e.props.beginChar)&&void 0!==t?t:"("])),n.push(...this.renderElements(e.children)),n.push(c(o,"mo",null,[null!==(r=e.props.endChar)&&void 0!==r?r:")"])),c(o,"mrow",null,n)}renderMmlNary(e){var t,r;const i=[],s=(0,a.keyBy)(e.children,(e=>e.type)),l=s[n.DomType.MmlSuperArgument],u=s[n.DomType.MmlSubArgument],h=l?c(o,"mo",null,(0,a.asArray)(this.renderElement(l))):null,d=u?c(o,"mo",null,(0,a.asArray)(this.renderElement(u))):null,f=c(o,"mo",null,[null!==(r=null===(t=e.props)||void 0===t?void 0:t.char)&&void 0!==r?r:"∫"]);return h||d?i.push(c(o,"munderover",null,[f,d,h])):h?i.push(c(o,"mover",null,[f,h])):d?i.push(c(o,"munder",null,[f,d])):i.push(f),i.push(...this.renderElements(s[n.DomType.MmlBase].children)),c(o,"mrow",null,i)}renderMmlPreSubSuper(e){const t=[],r=(0,a.keyBy)(e.children,(e=>e.type)),i=r[n.DomType.MmlSuperArgument],s=r[n.DomType.MmlSubArgument],l=i?c(o,"mo",null,(0,a.asArray)(this.renderElement(i))):null,u=s?c(o,"mo",null,(0,a.asArray)(this.renderElement(s))):null,h=c(o,"mo",null);return t.push(c(o,"msubsup",null,[h,u,l])),t.push(...this.renderElements(r[n.DomType.MmlBase].children)),c(o,"mrow",null,t)}renderMmlGroupChar(e){const t="bot"===e.props.verticalJustification?"mover":"munder",r=this.renderContainerNS(e,o,t);return e.props.char&&r.appendChild(c(o,"mo",null,[e.props.char])),r}renderMmlBar(e){const t=this.renderContainerNS(e,o,"mrow");switch(e.props.position){case"top":t.style.textDecoration="overline";break;case"bottom":t.style.textDecoration="underline"}return t}renderMmlRun(e){const t=c(o,"ms");return this.renderClass(e,t),this.renderStyleValues(e.cssStyle,t),this.renderChildren(e,t),t}renderMllList(e){const t=c(o,"mtable");this.renderClass(e,t),this.renderStyleValues(e.cssStyle,t),this.renderChildren(e);for(let r of this.renderChildren(e))t.appendChild(c(o,"mtr",null,[c(o,"mtd",null,[r])]));return t}renderStyleValues(e,t){for(let r in e)r.startsWith("$")?t.setAttribute(r.slice(1),e[r]):t.style[r]=e[r]}renderClass(e,t){e.className&&(t.className=e.className),e.styleName&&t.classList.add(this.processStyleName(e.styleName))}findStyle(e){var t;return e&&(null===(t=this.styleMap)||void 0===t?void 0:t[e])}numberingClass(e,t){return`${this.className}-num-${e}-${t}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(e,t,r=null){let n=`${e} {\r\n`;for(const e in t)e.startsWith("$")||(n+=` ${e}: ${t[e]};\r\n`);return r&&(n+=r),n+"}\r\n"}numberingCounter(e,t){return`${this.className}-num-${e}-${t}`}levelTextToContent(e,t,r,n){var a;return`"${e.replace(/%\d*/g,(e=>{let t=parseInt(e.substring(1),10)-1;return`"counter(${this.numberingCounter(r,t)}, ${n})"`}))}${null!==(a={tab:"\\9",space:"\\a0"}[t])&&void 0!==a?a:""}"`}numFormatToCssValue(e){var t;return null!==(t={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"}[e])&&void 0!==t?t:e}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout((()=>{const e=(0,i.computePixelToPoint)();for(let t of this.currentTabs)(0,i.updateTabStop)(t.span,t.stops,this.defaultTabSize,e)}),500))}}},630:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateTabStop=t.computePixelToPoint=void 0;const r={pos:0,leader:"none",style:"left"};function n(e){return parseFloat(e)}t.computePixelToPoint=function(e=document.body){const t=document.createElement("div");t.style.width="100pt",e.appendChild(t);const r=100/t.offsetWidth;return e.removeChild(t),r},t.updateTabStop=function(e,t,a,i=.75){const s=e.closest("p"),o=e.getBoundingClientRect(),l=s.getBoundingClientRect(),u=getComputedStyle(s),c=(null==t?void 0:t.length)>0?t.map((e=>({pos:n(e.position),leader:e.leader,style:e.style}))).sort(((e,t)=>e.pos-t.pos)):[r],h=c[c.length-1],d=l.width*i,f=n(a);let p=h.pos+f;if(p"clear"!=e.style&&e.pos>b));if(null==y)return;let v=1;if("right"==y.style||"center"==y.style){const t=Array.from(s.querySelectorAll(`.${e.className}`)),r=t.indexOf(e)+1,n=document.createRange();n.setStart(e,1),r{Object.defineProperty(t,"__esModule",{value:!0}),t.WmlEndnote=t.WmlFootnote=t.WmlBaseNote=void 0;const n=r(120);class a{}t.WmlBaseNote=a,t.WmlFootnote=class extends a{constructor(){super(...arguments),this.type=n.DomType.Footnote}},t.WmlEndnote=class extends a{constructor(){super(...arguments),this.type=n.DomType.Endnote}}},735:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.EndnotesPart=t.FootnotesPart=t.BaseNotePart=void 0;const n=r(530),a=r(881);class i extends n.Part{constructor(e,t,r){super(e,t),this._documentParser=r}}t.BaseNotePart=i,t.FootnotesPart=class extends i{constructor(e,t,r){super(e,t,r)}parseXml(e){this.notes=this._documentParser.parseNotes(e,"footnote",a.WmlFootnote)}},t.EndnotesPart=class extends i{constructor(e,t,r){super(e,t,r)}parseXml(e){this.notes=this._documentParser.parseNotes(e,"endnote",a.WmlEndnote)}}},527:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NumberingPart=void 0;const n=r(530),a=r(682);class i extends n.Part{constructor(e,t,r){super(e,t),this._documentParser=r}parseXml(e){Object.assign(this,(0,a.parseNumberingPart)(e,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(e)}}t.NumberingPart=i},682:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseNumberingBulletPicture=t.parseNumberingLevelOverrride=t.parseNumberingLevel=t.parseAbstractNumbering=t.parseNumbering=t.parseNumberingPart=void 0;const n=r(109),a=r(488);function i(e,t){let r={id:t.attr(e,"numId"),overrides:[]};for(let n of t.elements(e))switch(n.localName){case"abstractNumId":r.abstractId=t.attr(n,"val");break;case"lvlOverride":r.overrides.push(l(n,t))}return r}function s(e,t){let r={id:t.attr(e,"abstractNumId"),levels:[]};for(let n of t.elements(e))switch(n.localName){case"name":r.name=t.attr(n,"val");break;case"multiLevelType":r.multiLevelType=t.attr(n,"val");break;case"numStyleLink":r.numberingStyleLink=t.attr(n,"val");break;case"styleLink":r.styleLink=t.attr(n,"val");break;case"lvl":r.levels.push(o(n,t))}return r}function o(e,t){let r={level:t.intAttr(e,"ilvl")};for(let i of t.elements(e))switch(i.localName){case"start":r.start=t.attr(i,"val");break;case"lvlRestart":r.restart=t.intAttr(i,"val");break;case"numFmt":r.format=t.attr(i,"val");break;case"lvlText":r.text=t.attr(i,"val");break;case"lvlJc":r.justification=t.attr(i,"val");break;case"lvlPicBulletId":r.bulletPictureId=t.attr(i,"val");break;case"pStyle":r.paragraphStyle=t.attr(i,"val");break;case"pPr":r.paragraphProps=(0,n.parseParagraphProperties)(i,t);break;case"rPr":r.runProps=(0,a.parseRunProperties)(i,t)}return r}function l(e,t){let r={level:t.intAttr(e,"ilvl")};for(let n of t.elements(e))switch(n.localName){case"startOverride":r.start=t.intAttr(n,"val");break;case"lvl":r.numberingLevel=o(n,t)}return r}function u(e,t){var r=t.element(e,"pict"),n=r&&t.element(r,"shape"),a=n&&t.element(n,"imagedata");return a?{id:t.attr(e,"numPicBulletId"),referenceId:t.attr(a,"id"),style:t.attr(n,"style")}:null}t.parseNumberingPart=function(e,t){let r={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let n of t.elements(e))switch(n.localName){case"num":r.numberings.push(i(n,t));break;case"abstractNum":r.abstractNumberings.push(s(n,t));break;case"numPicBullet":r.bulletPictures.push(u(n,t))}return r},t.parseNumbering=i,t.parseAbstractNumbering=s,t.parseNumberingLevel=o,t.parseNumberingLevelOverrride=l,t.parseNumberingBulletPicture=u},472:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XmlParser=t.serializeXmlString=t.parseXmlString=void 0;const n=r(149);t.parseXmlString=function(e,t=!1){var r;t&&(e=e.replace(/<[?].*[?]>/,"")),e=65279===(r=e).charCodeAt(0)?r.substring(1):r;const n=(new DOMParser).parseFromString(e,"application/xml"),a=null===(i=n.getElementsByTagName("parsererror")[0])||void 0===i?void 0:i.textContent;var i;if(a)throw new Error(a);return n},t.serializeXmlString=function(e){return(new XMLSerializer).serializeToString(e)};class a{elements(e,t=null){const r=[];for(let n=0,a=e.childNodes.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.SettingsPart=void 0;const n=r(530),a=r(846);class i extends n.Part{constructor(e,t){super(e,t)}parseXml(e){this.settings=(0,a.parseSettings)(e,this._package.xmlParser)}}t.SettingsPart=i},846:(e,t)=>{function r(e,t){var r={defaultNoteIds:[]};for(let n of t.elements(e))switch(n.localName){case"numFmt":r.nummeringFormat=t.attr(n,"val");break;case"footnote":case"endnote":r.defaultNoteIds.push(t.attr(n,"id"))}return r}Object.defineProperty(t,"__esModule",{value:!0}),t.parseNoteProperties=t.parseSettings=void 0,t.parseSettings=function(e,t){var n={};for(let a of t.elements(e))switch(a.localName){case"defaultTabStop":n.defaultTabStop=t.lengthAttr(a,"val");break;case"footnotePr":n.footnoteProps=r(a,t);break;case"endnotePr":n.endnoteProps=r(a,t);break;case"autoHyphenation":n.autoHyphenation=t.boolAttr(a,"val")}return n},t.parseNoteProperties=r},240:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StylesPart=void 0;const n=r(530);class a extends n.Part{constructor(e,t,r){super(e,t),this._documentParser=r}parseXml(e){this.styles=this._documentParser.parseStylesFile(e)}}t.StylesPart=a},893:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ThemePart=void 0;const n=r(530),a=r(55);class i extends n.Part{constructor(e,t){super(e,t)}parseXml(e){this.theme=(0,a.parseTheme)(e,this._package.xmlParser)}}t.ThemePart=i},55:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseFontInfo=t.parseFontScheme=t.parseColorScheme=t.parseTheme=t.DmlTheme=void 0;class r{}function n(e,t){var r={name:t.attr(e,"name"),colors:{}};for(let i of t.elements(e)){var n=t.element(i,"srgbClr"),a=t.element(i,"sysClr");n?r.colors[i.localName]=t.attr(n,"val"):a&&(r.colors[i.localName]=t.attr(a,"lastClr"))}return r}function a(e,t){var r={name:t.attr(e,"name")};for(let n of t.elements(e))switch(n.localName){case"majorFont":r.majorFont=i(n,t);break;case"minorFont":r.minorFont=i(n,t)}return r}function i(e,t){return{latinTypeface:t.elementAttr(e,"latin","typeface"),eaTypeface:t.elementAttr(e,"ea","typeface"),csTypeface:t.elementAttr(e,"cs","typeface")}}t.DmlTheme=r,t.parseTheme=function(e,t){var i=new r,s=t.element(e,"themeElements");for(let e of t.elements(s))switch(e.localName){case"clrScheme":i.colorScheme=n(e,t);break;case"fontScheme":i.fontScheme=a(e,t)}return i},t.parseColorScheme=n,t.parseFontScheme=a,t.parseFontInfo=i},593:(e,t)=>{function r(e){return e&&"object"==typeof e&&!Array.isArray(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.asArray=t.formatCssRules=t.parseCssRules=t.mergeDeep=t.isString=t.isObject=t.blobToBase64=t.keyBy=t.resolvePath=t.splitPath=t.escapeClassName=void 0,t.escapeClassName=function(e){return null==e?void 0:e.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},t.splitPath=function(e){let t=e.lastIndexOf("/")+1;return[0==t?"":e.substring(0,t),0==t?e:e.substring(t)]},t.resolvePath=function(e,t){try{const r="http://docx/";return new URL(e,r+t).toString().substring(r.length)}catch(r){return`${t}${e}`}},t.keyBy=function(e,t){return e.reduce(((e,r)=>(e[t(r)]=r,e)),{})},t.blobToBase64=function(e){return new Promise(((t,r)=>{const n=new FileReader;n.onloadend=()=>t(n.result),n.onerror=()=>r(),n.readAsDataURL(e)}))},t.isObject=r,t.isString=function(e){return"string"==typeof e||e instanceof String},t.mergeDeep=function e(t,...n){var a;if(!n.length)return t;const i=n.shift();if(r(t)&&r(i))for(const n in i)r(i[n])?e(null!==(a=t[n])&&void 0!==a?a:t[n]={},i[n]):t[n]=i[n];return e(t,...n)},t.parseCssRules=function(e){const t={};for(const r of e.split(";")){const[e,n]=r.split(":");t[e]=n}return t},t.formatCssRules=function(e){return Object.entries(e).map(((e,t)=>`${e}: ${t}`)).join(";")},t.asArray=function(e){return Array.isArray(e)?e:[e]}},320:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseVmlElement=t.VmlElement=void 0;const n=r(149),a=r(120),i=r(472);class s extends a.OpenXmlElementBase{constructor(){super(...arguments),this.type=a.DomType.VmlElement,this.attrs={}}}function o(e){var t;return{stroke:i.default.attr(e,"color"),"stroke-width":null!==(t=i.default.lengthAttr(e,"weight",n.LengthUsage.Emu))&&void 0!==t?t:"1px"}}function l(e){return e.split(",")}t.VmlElement=s,t.parseVmlElement=function e(t,r){var n=new s;switch(t.localName){case"rect":n.tagName="rect",Object.assign(n.attrs,{width:"100%",height:"100%"});break;case"oval":n.tagName="ellipse",Object.assign(n.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":n.tagName="line";break;case"shape":n.tagName="g";break;case"textbox":n.tagName="foreignObject",Object.assign(n.attrs,{width:"100%",height:"100%"});break;default:return null}for(const e of i.default.attrs(t))switch(e.localName){case"style":n.cssStyleText=e.value;break;case"fillcolor":n.attrs.fill=e.value;break;case"from":const[t,r]=l(e.value);Object.assign(n.attrs,{x1:t,y1:r});break;case"to":const[a,i]=l(e.value);Object.assign(n.attrs,{x2:a,y2:i})}for(const a of i.default.elements(t))switch(a.localName){case"stroke":Object.assign(n.attrs,o(a));break;case"fill":Object.assign(n.attrs,{});break;case"imagedata":n.tagName="image",Object.assign(n.attrs,{width:"100%",height:"100%"}),n.imageHref={id:i.default.attr(a,"id"),title:i.default.attr(a,"title")};break;case"txbxContent":n.children.push(...r.parseBodyElements(a));break;default:const t=e(a,r);t&&n.children.push(t)}return n}},213:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.deobfuscate=t.WordDocument=void 0;const n=r(461),a=r(380),i=r(522),s=r(448),o=r(593),l=r(527),u=r(240),c=r(985),h=r(665),d=r(162),f=r(893),p=r(735),m=r(287),g=r(177),b=[{type:n.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:n.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:n.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:n.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class y{constructor(){this.parts=[],this.partsMap={}}static async load(e,t,r){var n=new y;return n._options=r,n._parser=t,n._package=await i.OpenXmlPackage.load(e,r),n.rels=await n._package.loadRelationships(),await Promise.all(b.map((e=>{var t;const r=null!==(t=n.rels.find((t=>t.type===e.type)))&&void 0!==t?t:e;return n.loadRelationshipPart(r.target,r.type)}))),n}save(e="blob"){return this._package.save(e)}async loadRelationshipPart(e,t){var r;if(this.partsMap[e])return this.partsMap[e];if(!this._package.get(e))return null;let i=null;switch(t){case n.RelationshipTypes.OfficeDocument:this.documentPart=i=new s.DocumentPart(this._package,e,this._parser);break;case n.RelationshipTypes.FontTable:this.fontTablePart=i=new a.FontTablePart(this._package,e);break;case n.RelationshipTypes.Numbering:this.numberingPart=i=new l.NumberingPart(this._package,e,this._parser);break;case n.RelationshipTypes.Styles:this.stylesPart=i=new u.StylesPart(this._package,e,this._parser);break;case n.RelationshipTypes.Theme:this.themePart=i=new f.ThemePart(this._package,e);break;case n.RelationshipTypes.Footnotes:this.footnotesPart=i=new p.FootnotesPart(this._package,e,this._parser);break;case n.RelationshipTypes.Endnotes:this.endnotesPart=i=new p.EndnotesPart(this._package,e,this._parser);break;case n.RelationshipTypes.Footer:i=new c.FooterPart(this._package,e,this._parser);break;case n.RelationshipTypes.Header:i=new c.HeaderPart(this._package,e,this._parser);break;case n.RelationshipTypes.CoreProperties:this.corePropsPart=i=new d.CorePropsPart(this._package,e);break;case n.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=i=new h.ExtendedPropsPart(this._package,e);break;case n.RelationshipTypes.CustomProperties:i=new g.CustomPropsPart(this._package,e);break;case n.RelationshipTypes.Settings:this.settingsPart=i=new m.SettingsPart(this._package,e)}if(null==i)return Promise.resolve(null);if(this.partsMap[e]=i,this.parts.push(i),await i.load(),(null===(r=i.rels)||void 0===r?void 0:r.length)>0){const[e]=(0,o.splitPath)(i.path);await Promise.all(i.rels.map((t=>this.loadRelationshipPart((0,o.resolvePath)(t.target,e),t.type))))}return i}async loadDocumentImage(e,t){const r=await this.loadResource(null!=t?t:this.documentPart,e,"blob");return this.blobToURL(r)}async loadNumberingImage(e){const t=await this.loadResource(this.numberingPart,e,"blob");return this.blobToURL(t)}async loadFont(e,t){const r=await this.loadResource(this.fontTablePart,e,"uint8array");return r?this.blobToURL(new Blob([v(r,t)])):r}blobToURL(e){return e?this._options.useBase64URL?(0,o.blobToBase64)(e):URL.createObjectURL(e):null}findPartByRelId(e,t=null){var r,n=(null!==(r=t.rels)&&void 0!==r?r:this.rels).find((t=>t.id==e));const a=t?(0,o.splitPath)(t.path)[0]:"";return n?this.partsMap[(0,o.resolvePath)(n.target,a)]:null}getPathById(e,t){const r=e.rels.find((e=>e.id==t)),[n]=(0,o.splitPath)(e.path);return r?(0,o.resolvePath)(r.target,n):null}loadResource(e,t,r){const n=this.getPathById(e,t);return n?this._package.load(n,r):Promise.resolve(null)}}function v(e,t){const r=t.replace(/{|}|-/g,""),n=new Array(16);for(let e=0;e<16;e++)n[16-e-1]=parseInt(r.substr(2*e,2),16);for(let t=0;t<32;t++)e[t]=e[t]^n[t%16];return e}t.WordDocument=y,t.deobfuscate=v},583:e=>{e.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:t=>{t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={id:e,exports:{}};return t[e](i,i.exports,n),i.exports}return n.m=t,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.b=document.baseURI||self.location.href,n(667)})(),e.exports=r(function(){if(Sr)return kr;function e(){if(!(this instanceof e))return new e;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var t=new e;for(var r in this)"function"!=typeof this[r]&&(t[r]=this[r]);return t}}return Sr=1,e.prototype=Tr(),e.prototype.loadAsync=Rr(),e.support=ne(),e.defaults=Ke(),e.version="3.10.1",e.loadAsync=function(t,r){return(new e).loadAsync(t,r)},e.external=be(),kr=e}())}(c);var Or=c.exports;const Ir={ignoreLastRenderedPageBreak:!1};var zr={getData:function(e,t={}){return"string"==typeof e?function(e,t){return fetch(e,t).then((e=>200!==e.status?Promise.reject(e):e))}(e,t):Promise.resolve(e)},render:function(e,t,r={}){if(!e)return t.innerHTML="",Promise.resolve();let n;return e instanceof Blob?n=e:e instanceof Response?n=e.blob():e instanceof ArrayBuffer&&(n=new Blob([e])),Or.renderAsync(n,t,t,{...Ir,...r})},getBlob:async function(e){let t;return e instanceof Blob?t=e:e instanceof Response?t=await e.blob():e instanceof ArrayBuffer&&(t=new Blob([e])),t}};async function Fr(e,t){t&&(t instanceof ArrayBuffer&&(t=new Blob([t])),function(e,t){let r=document.createElement("a");r.download=e,r.style.display="none",r.href=t,document.body.appendChild(r),r.click(),document.body.removeChild(r)}(e,URL.createObjectURL(t)))}class Lr{container=null;wrapper=null;wrapperMain=null;options={};requestOptions={};fileData=null;constructor(e,t={},r={}){this.container=e,this.options=t,this.requestOptions=r,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-docx",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-docx-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise(((t,r)=>{zr.getData(e,this.requestOptions).then((async e=>{this.fileData=await zr.getBlob(e),zr.render(this.fileData,this.wrapperMain,this.options).then((()=>{t()})).catch((e=>{zr.render("",this.wrapperMain,this.options),r(e)}))})).catch((e=>{zr.render("",this.wrapperMain,this.options),r(e)}))}))}save(e){Fr(e||`js-preview-docx-${(new Date).getTime()}.docx`,this.fileData)}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options=null,this.requestOptions=null}}return{init:function(e,t,r){return new Lr(e,t,r)}}})); diff --git a/cdn-demo/js-preview-lib/excel.css b/cdn-demo/js-preview-lib/excel.css new file mode 100644 index 0000000..1591d02 --- /dev/null +++ b/cdn-demo/js-preview-lib/excel.css @@ -0,0 +1,762 @@ +.x-spreadsheet { + font-size: 13px; + line-height: normal; + user-select: none; + -moz-user-select: none; + font-family: 'Lato', 'Source Sans Pro', Roboto, Helvetica, Arial, sans-serif; + box-sizing: content-box; + background: #fff; + -webkit-font-smoothing: antialiased; +} +.x-spreadsheet textarea { + font: 400 13px Arial, 'Lato', 'Source Sans Pro', Roboto, Helvetica, sans-serif; +} +.x-spreadsheet-sheet { + position: relative; + overflow: hidden; +} +.x-spreadsheet-table { + vertical-align: bottom; +} +.x-spreadsheet-tooltip { + font-family: inherit; + position: absolute; + padding: 5px 10px; + color: #fff; + border-radius: 1px; + background: #000000; + font-size: 12px; + z-index: 201; +} +.x-spreadsheet-tooltip:before { + pointer-events: none; + position: absolute; + left: calc(50% - 4px); + top: -4px; + content: ""; + width: 8px; + height: 8px; + background: inherit; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + z-index: 1; + box-shadow: 1px 1px 3px -1px rgba(0, 0, 0, 0.3); +} +.x-spreadsheet-color-palette { + padding: 5px; +} +.x-spreadsheet-color-palette table { + margin: 0; + padding: 0; + border-collapse: separate; + border-spacing: 2; + background: #fff; +} +.x-spreadsheet-color-palette table td { + margin: 0; + cursor: pointer; + border: 1px solid transparent; +} +.x-spreadsheet-color-palette table td:hover { + border-color: #ddd; +} +.x-spreadsheet-color-palette table td .x-spreadsheet-color-palette-cell { + width: 16px; + height: 16px; +} +.x-spreadsheet-border-palette { + padding: 6px; +} +.x-spreadsheet-border-palette table { + margin: 0; + padding: 0; + border-collapse: separate; + border-spacing: 0; + background: #fff; + table-layout: fixed; +} +.x-spreadsheet-border-palette table td { + margin: 0; +} +.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left { + border-right: 1px solid #eee; + padding-right: 6px; +} +.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell { + width: 30px; + height: 30px; + cursor: pointer; + text-align: center; +} +.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell:hover { + background-color: #eee; +} +.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right { + padding-left: 6px; +} +.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-line-type { + position: relative; + left: 0; + top: -3px; +} +.x-spreadsheet-dropdown { + position: relative; +} +.x-spreadsheet-dropdown .x-spreadsheet-dropdown-content { + position: absolute; + z-index: 200; + background: #fff; + box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15); +} +.x-spreadsheet-dropdown.bottom-left .x-spreadsheet-dropdown-content { + top: calc(100% + 5px); + left: 0; +} +.x-spreadsheet-dropdown.bottom-right .x-spreadsheet-dropdown-content { + top: calc(100% + 5px); + right: 0; +} +.x-spreadsheet-dropdown.top-left .x-spreadsheet-dropdown-content { + bottom: calc(100% + 5px); + left: 0; +} +.x-spreadsheet-dropdown.top-right .x-spreadsheet-dropdown-content { + bottom: calc(100% + 5px); + right: 0; +} +.x-spreadsheet-dropdown .x-spreadsheet-dropdown-title { + padding: 0 5px; + display: inline-block; +} +/* resizer **/ +.x-spreadsheet-resizer { + position: absolute; + z-index: 11; +} +.x-spreadsheet-resizer .x-spreadsheet-resizer-hover { + background-color: rgba(75, 137, 255, 0.25); +} +.x-spreadsheet-resizer .x-spreadsheet-resizer-line { + position: absolute; +} +.x-spreadsheet-resizer.horizontal { + cursor: row-resize; +} +.x-spreadsheet-resizer.horizontal .x-spreadsheet-resizer-line { + border-bottom: 2px dashed #4b89ff; + left: 0; + bottom: 0; +} +.x-spreadsheet-resizer.vertical { + cursor: col-resize; +} +.x-spreadsheet-resizer.vertical .x-spreadsheet-resizer-line { + border-right: 2px dashed #4b89ff; + top: 0; + right: 0; +} +/* scrollbar */ +.x-spreadsheet-scrollbar { + position: absolute; + bottom: 0; + right: 0; + background-color: #f4f5f8; + opacity: 0.9; + z-index: 12; +} +.x-spreadsheet-scrollbar.horizontal { + right: 15px; + overflow-x: scroll; + overflow-y: hidden; +} +.x-spreadsheet-scrollbar.horizontal > div { + height: 1px; + background: #ddd; +} +.x-spreadsheet-scrollbar.vertical { + bottom: 15px; + overflow-x: hidden; + overflow-y: scroll; +} +.x-spreadsheet-scrollbar.vertical > div { + width: 1px; + background: #ddd; +} +/* @{css-prefix}-overlayer */ +.x-spreadsheet-overlayer { + position: absolute; + left: 0; + top: 0; + z-index: 10; +} +.x-spreadsheet-overlayer .x-spreadsheet-overlayer-content { + position: absolute; + overflow: hidden; + pointer-events: none; + width: 100%; + height: 100%; +} +.x-spreadsheet-editor, +.x-spreadsheet-selector { + box-sizing: content-box; + position: absolute; + overflow: hidden; + pointer-events: none; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +/* @{css-prefix}-selector */ +.x-spreadsheet-selector .hide-input { + position: absolute; + z-index: 0; +} +.x-spreadsheet-selector .hide-input input { + padding: 0; + width: 0; + border: none!important; +} +.x-spreadsheet-selector .x-spreadsheet-selector-area { + position: absolute; + border: 2px solid #4b89ff; + background: rgba(75, 137, 255, 0.1); + z-index: 5; +} +.x-spreadsheet-selector .x-spreadsheet-selector-clipboard, +.x-spreadsheet-selector .x-spreadsheet-selector-autofill { + position: absolute; + background: transparent; + z-index: 100; +} +.x-spreadsheet-selector .x-spreadsheet-selector-clipboard { + border: 2px dashed #4b89ff; +} +.x-spreadsheet-selector .x-spreadsheet-selector-autofill { + border: 1px dashed rgba(0, 0, 0, 0.45); +} +.x-spreadsheet-selector .x-spreadsheet-selector-corner { + pointer-events: auto; + position: absolute; + cursor: crosshair; + font-size: 0; + height: 5px; + width: 5px; + right: -5px; + bottom: -5px; + border: 2px solid #ffffff; + background: #4b89ff; +} +.x-spreadsheet-editor { + z-index: 20; +} +.x-spreadsheet-editor .x-spreadsheet-editor-area { + position: absolute; + text-align: left; + border: 2px solid #4b89ff; + line-height: 0; + z-index: 100; + pointer-events: auto; +} +.x-spreadsheet-editor .x-spreadsheet-editor-area textarea { + box-sizing: content-box; + border: none; + padding: 0 3px; + outline: none; + resize: none; + text-align: start; + overflow-y: hidden; + font: 400 13px Arial, 'Lato', 'Source Sans Pro', Roboto, Helvetica, sans-serif; + color: inherit; + white-space: normal; + word-wrap: break-word; + line-height: 22px; + margin: 0; +} +.x-spreadsheet-editor .x-spreadsheet-editor-area .textline { + overflow: hidden; + visibility: hidden; + position: fixed; + top: 0; + left: 0; +} +.x-spreadsheet-item { + user-select: none; + background: 0; + border: 1px solid transparent; + outline: none; + height: 26px; + color: rgba(0, 0, 0, 0.9); + line-height: 26px; + list-style: none; + padding: 2px 10px; + cursor: default; + text-align: left; + overflow: hidden; +} +.x-spreadsheet-item.disabled { + pointer-events: none; + opacity: 0.5; +} +.x-spreadsheet-item:hover, +.x-spreadsheet-item.active { + background: rgba(0, 0, 0, 0.05); +} +.x-spreadsheet-item.divider { + height: 0; + padding: 0; + margin: 5px 0; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} +.x-spreadsheet-item .label { + float: right; + opacity: 0.65; + font-size: 1em; +} +.x-spreadsheet-item.state, +.x-spreadsheet-header.state { + padding-left: 35px!important; + position: relative; +} +.x-spreadsheet-item.state:before, +.x-spreadsheet-header.state:before { + content: ''; + position: absolute; + width: 10px; + height: 10px; + left: 12px; + top: calc(50% - 5px); + background: rgba(0, 0, 0, 0.08); + border-radius: 2px; +} +.x-spreadsheet-item.state.checked:before, +.x-spreadsheet-header.state.checked:before { + background: #4b89ff; +} +.x-spreadsheet-checkbox { + position: relative; + display: inline-block; + backface-visibility: hidden; + outline: 0; + vertical-align: baseline; + font-style: normal; + font-size: 1rem; + line-height: 1em; +} +.x-spreadsheet-checkbox > input { + position: absolute; + top: 0; + left: 0; + opacity: 0!important; + outline: 0; + z-index: -1; +} +.x-spreadsheet-suggest, +.x-spreadsheet-contextmenu, +.x-spreadsheet-sort-filter { + position: absolute; + box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15); + background: #fff; + z-index: 100; + width: 260px; + pointer-events: auto; + overflow: auto; +} +.x-spreadsheet-suggest { + width: 200px; +} +.x-spreadsheet-filter { + border: 1px solid #e9e9e9; + font-size: 12px; + margin: 10px; +} +.x-spreadsheet-filter .x-spreadsheet-header { + padding: 0.5em 0.75em; + background: #f8f8f9; + border-bottom: 1px solid #e9e9e9; + border-left: 1px solid transparent; +} +.x-spreadsheet-filter .x-spreadsheet-body { + height: 200px; + overflow-y: auto; +} +.x-spreadsheet-filter .x-spreadsheet-body .x-spreadsheet-item { + height: 20px; + line-height: 20px; +} +.x-spreadsheet-sort-filter .x-spreadsheet-buttons { + margin: 10px; +} +.x-spreadsheet-bottombar { + height: 40px; + padding: 0 30px; + text-align: left; + background: #f5f6f7; + display: flex; +} +.x-spreadsheet-bottombar { + position: relative; + border-top: 1px solid #e0e2e4; +} +.x-spreadsheet-bottombar .x-spreadsheet-menu > li { + line-height: 40px; + height: 40px; + padding-top: 0; + padding-bottom: 0; + vertical-align: middle; + border-right: 1px solid #e8eaed; +} +.x-spreadsheet-menu { + list-style: none; + margin: 0; + padding: 0; + user-select: none; +} +.x-spreadsheet-menu > li { + float: left; + line-height: 1.25em; + padding: 0.785em 1em; + margin: 0; + vertical-align: middle; + text-align: left; + font-weight: 400; + color: #80868b; + white-space: nowrap; + cursor: pointer; + transition: all 0.3s; + font-weight: bold; +} +.x-spreadsheet-menu > li.active { + background-color: #fff; + color: rgba(0, 0, 0, 0.65); +} +.x-spreadsheet-menu > li .x-spreadsheet-dropdown { + display: inline-block; +} +.x-spreadsheet-print { + position: absolute; + left: 0; + top: 0; + z-index: 100; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.x-spreadsheet-print-bar { + background: #424242; + height: 60px; + line-height: 60px; + padding: 0 30px; +} +.x-spreadsheet-print-bar .-title { + color: #fff; + font-weight: bold; + font-size: 1.2em; + float: left; +} +.x-spreadsheet-print-bar .-right { + float: right; + margin-top: 12px; +} +.x-spreadsheet-print-content { + display: flex; + flex: auto; + flex-direction: row; + background: #d0d0d0; + height: calc(100% - 60px); +} +.x-spreadsheet-print-content .-sider { + flex: 0 0 300px; + width: 300px; + border-left: 2px solid #ccc; + background: #fff; +} +.x-spreadsheet-print-content .-content { + flex: auto; + overflow-x: auto; + overflow-y: scroll; + height: 100%; +} +.x-spreadsheet-canvas-card-wraper { + margin: 40px 20px; +} +.x-spreadsheet-canvas-card { + background: #fff; + margin: auto; + page-break-before: auto; + page-break-after: always; + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 3px rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.2); +} +.x-spreadsheet-calendar { + color: rgba(0, 0, 0, 0.65); + background: #ffffff; + user-select: none; +} +.x-spreadsheet-calendar .calendar-header { + font-weight: 700; + line-height: 30px; + text-align: center; + width: 100%; + float: left; + background: #f9fafb; +} +.x-spreadsheet-calendar .calendar-header .calendar-header-left { + padding-left: 5px; + float: left; +} +.x-spreadsheet-calendar .calendar-header .calendar-header-right { + float: right; +} +.x-spreadsheet-calendar .calendar-header .calendar-header-right a { + padding: 3px 0; + margin-right: 2px; + border-radius: 2px; +} +.x-spreadsheet-calendar .calendar-header .calendar-header-right a:hover { + background: rgba(0, 0, 0, 0.08); +} +.x-spreadsheet-calendar .calendar-body { + border-collapse: collapse; + border-spacing: 0; +} +.x-spreadsheet-calendar .calendar-body th, +.x-spreadsheet-calendar .calendar-body td { + width: 14.28571429%; + min-width: 32px; + text-align: center; + font-weight: 700; + line-height: 30px; + padding: 0; +} +.x-spreadsheet-calendar .calendar-body td > .cell:hover { + background: #ecf6fd; +} +.x-spreadsheet-calendar .calendar-body td > .cell.active, +.x-spreadsheet-calendar .calendar-body td > .cell.active:hover { + background: #ecf6fd; + color: #2185D0; +} +.x-spreadsheet-calendar .calendar-body td > .cell.disabled { + pointer-events: none; + opacity: 0.5; +} +.x-spreadsheet-datepicker { + box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); + position: absolute; + left: 0; + top: calc(100% + 5px); + z-index: 10; + width: auto; +} +.x-spreadsheet-buttons { + display: flex; + justify-content: flex-end; +} +.x-spreadsheet-buttons .x-spreadsheet-button { + margin-left: 8px; +} +.x-spreadsheet-button { + display: inline-block; + border-radius: 3px; + line-height: 1em; + min-height: 1em; + white-space: nowrap; + text-align: center; + cursor: pointer; + font-size: 1em; + font-weight: 700; + padding: 0.75em 1em; + color: rgba(0, 0, 0, 0.6); + background: #E0E1E2; + text-decoration: none; + font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif; + outline: none; + vertical-align: baseline; + zoom: 1; + user-select: none; + transition: all 0.1s linear; +} +.x-spreadsheet-button.active, +.x-spreadsheet-button:hover { + background-color: #C0C1C2; + color: rgba(0, 0, 0, 0.8); +} +.x-spreadsheet-button.primary { + color: #fff; + background-color: #2185D0; +} +.x-spreadsheet-button.primary:hover, +.x-spreadsheet-button.primary.active { + color: #fff; + background-color: #1678c2; +} +.x-spreadsheet-form-input { + font-size: 1em; + position: relative; + font-weight: 400; + display: inline-flex; + color: rgba(0, 0, 0, 0.87); +} +.x-spreadsheet-form-input input { + z-index: 1; + margin: 0; + max-width: 100%; + flex: 1 0 auto; + outline: 0; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + text-align: left; + line-height: 30px; + height: 30px; + padding: 0 8px; + background: #fff; + border: 1px solid #e9e9e9; + border-radius: 3px; + transition: box-shadow 0.1s ease, border-color 0.1s ease; + box-shadow: inset 0 1px 2px hsla(0, 0%, 4%, 0.06); +} +.x-spreadsheet-form-input input:focus { + border-color: #4b89ff; + box-shadow: inset 0 1px 2px rgba(75, 137, 255, 0.2); +} +.x-spreadsheet-form-select { + position: relative; + display: inline-block; + background: #fff; + border: 1px solid #e9e9e9; + border-radius: 2px; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + user-select: none; + box-shadow: inset 0 1px 2px hsla(0, 0%, 4%, 0.06); +} +.x-spreadsheet-form-select .input-text { + text-overflow: ellipsis; + white-space: nowrap; + min-width: 60px; + width: auto; + height: 30px; + line-height: 30px; + padding: 0 8px; +} +.x-spreadsheet-form-fields { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +.x-spreadsheet-form-fields .x-spreadsheet-form-field { + flex: 0 1 auto; +} +.x-spreadsheet-form-fields .x-spreadsheet-form-field .label { + display: inline-block; + margin: 0 10px 0 0; +} +.x-spreadsheet-form-field { + display: block; + vertical-align: middle; + margin-left: 10px; + margin-bottom: 10px; +} +.x-spreadsheet-form-field:first-child { + margin-left: 0; +} +.x-spreadsheet-form-field.error .x-spreadsheet-form-select, +.x-spreadsheet-form-field.error input { + border-color: #f04134; +} +.x-spreadsheet-form-field .tip { + color: #f04134; + font-size: 0.9em; +} +.x-spreadsheet-dimmer { + display: none; + position: absolute; + top: 0 !important; + left: 0 !important; + width: 100%; + height: 100%; + text-align: center; + vertical-align: middle; + background-color: rgba(0, 0, 0, 0.6); + opacity: 0; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation-duration: 0.5s; + animation-duration: 0.5s; + transition: background-color 0.5s linear; + user-select: none; + z-index: 1000; +} +.x-spreadsheet-dimmer.active { + display: block; + opacity: 1; +} +form fieldset { + border: none; +} +form fieldset label { + display: block; + margin-bottom: 0.5em; + font-size: 1em; + color: #666; +} +form fieldset select { + font-size: 1.1em; + width: 100%; + background-color: #fff; + border: none; + border-bottom: 2px solid #ddd; + padding: 0.5em 0.85em; + border-radius: 2px; +} +.x-spreadsheet-modal, +.x-spreadsheet-toast { + font-size: 13px; + position: fixed; + z-index: 1001; + text-align: left; + line-height: 1.25em; + min-width: 360px; + color: rgba(0, 0, 0, 0.87); + font-family: 'Lato', 'Source Sans Pro', Roboto, Helvetica, Arial, sans-serif; + border-radius: 4px; + border: 1px solid rgba(0, 0, 0, 0.1); + background-color: #fff; + background-clip: padding-box; + box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 8px; +} +.x-spreadsheet-toast { + background-color: rgba(255, 255, 255, 0.85); +} +.x-spreadsheet-modal-header, +.x-spreadsheet-toast-header { + font-weight: 600; + background-clip: padding-box; + background-color: rgba(255, 255, 255, 0.85); + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-radius: 4px 4px 0 0; +} + +.x-spreadsheet-toast-header { + color: #F2711C; +} +.x-spreadsheet-modal-header { + border-bottom: 1px solid #e0e2e4; + background: rgba(0, 0, 0, 0.08); + font-size: 1.0785em; +} +.x-spreadsheet-modal-header, +.x-spreadsheet-modal-content, +.x-spreadsheet-toast-header, +.x-spreadsheet-toast-content { + padding: 0.75em 1em; +} + +.x-spreadsheet-menu li:first-child { + display: none; +} + +.vue-office-excel { + height: 100%; +} \ No newline at end of file diff --git a/cdn-demo/js-preview-lib/excel.umd.js b/cdn-demo/js-preview-lib/excel.umd.js new file mode 100644 index 0000000..c004e42 --- /dev/null +++ b/cdn-demo/js-preview-lib/excel.umd.js @@ -0,0 +1,43 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jsPreviewExcel=t()}(this,(function(){"use strict";class e{constructor(e,t=""){"string"==typeof e?(this.el=document.createElement(e),this.el.className=t):this.el=e,this.data={}}data(e,t){return void 0!==t?(this.data[e]=t,this):this.data[e]}on(e,t){const[r,...n]=e.split(".");let i=r;return"mousewheel"===i&&/Firefox/i.test(window.navigator.userAgent)&&(i="DOMMouseScroll"),this.el.addEventListener(i,(e=>{t(e);for(let t=0;t{this.css(t,`${e[t]}px`)})),this;const{offsetTop:t,offsetLeft:r,offsetHeight:n,offsetWidth:i}=this.el;return{top:t,left:r,height:n,width:i}}scroll(e){const{el:t}=this;return void 0!==e&&(void 0!==e.left&&(t.scrollLeft=e.left),void 0!==e.top&&(t.scrollTop=e.top)),{left:t.scrollLeft,top:t.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new e(this.el.parentNode)}children(...e){return 0===arguments.length?this.el.childNodes:(e.forEach((e=>this.child(e))),this)}removeChild(e){this.el.removeChild(e)}child(t){let r=t;return"string"==typeof t?r=document.createTextNode(t):t instanceof e&&(r=t.el),this.el.appendChild(r),this}contains(e){return this.el.contains(e)}className(e){return void 0!==e?(this.el.className=e,this):this.el.className}addClass(e){return this.el.classList.add(e),this}hasClass(e){return this.el.classList.contains(e)}removeClass(e){return this.el.classList.remove(e),this}toggle(e="active"){return this.toggleClass(e)}toggleClass(e){return this.el.classList.toggle(e)}active(e=!0,t="active"){return e?this.addClass(t):this.removeClass(t),this}checked(e=!0){return this.active(e,"checked"),this}disabled(e=!0){return e?this.addClass("disabled"):this.removeClass("disabled"),this}attr(e,t){if(void 0!==t)this.el.setAttribute(e,t);else{if("string"==typeof e)return this.el.getAttribute(e);Object.keys(e).forEach((t=>{this.el.setAttribute(t,e[t])}))}return this}removeAttr(e){return this.el.removeAttribute(e),this}html(e){return void 0!==e?(this.el.innerHTML=e,this):this.el.innerHTML}val(e){return void 0!==e?(this.el.value=e,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...e){return e.forEach((e=>this.el.style.removeProperty(e))),this}css(e,t){return void 0===t&&"string"!=typeof e?(Object.keys(e).forEach((t=>{this.el.style[t]=e[t]})),this):void 0!==t?(this.el.style[e]=t,this):this.el.style[e]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const t=(t,r="")=>new e(t,r),r=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function n(e){let t="",n=e;for(;n>=r.length;)n/=r.length,n-=1,t+=r[parseInt(n,10)%r.length];const i=e%r.length;return t+=r[i],t}function i(e){let t=0;for(let n=0;n="0"&&e.charAt(n)<="9"?r+=e.charAt(n):t+=e.charAt(n);return[i(t),parseInt(r,10)-1]}function a(e,t){return`${n(e)}${t+1}`}function s(e,t,r,n=(()=>!0)){if(0===t&&0===r)return e;const[i,s]=o(e);return n(i,s)?a(i+t,s+r):e}class c{constructor(e,t,r,n,i=0,o=0){this.sri=e,this.sci=t,this.eri=r,this.eci=n,this.w=i,this.h=o}set(e,t,r,n){this.sri=e,this.sci=t,this.eri=r,this.eci=n}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...e){let[t,r]=[0,0];1===e.length?[r,t]=o(e[0]):2===e.length&&([t,r]=e);const{sri:n,sci:i,eri:a,eci:s}=this;return n<=t&&t<=a&&i<=r&&r<=s}each(e,t=(()=>!0)){const{sri:r,sci:n,eri:i,eci:o}=this;for(let a=r;a<=i;a+=1)if(t(a))for(let t=n;t<=o;t+=1)e(a,t)}contains(e){return this.sri<=e.sri&&this.sci<=e.sci&&this.eri>=e.eri&&this.eci>=e.eci}within(e){return this.sri>=e.sri&&this.sci>=e.sci&&this.eri<=e.eri&&this.eci<=e.eci}disjoint(e){return this.sri>e.eri||this.sci>e.eci||e.sri>this.eri||e.sci>this.eci}intersects(e){return this.sri<=e.eri&&this.sci<=e.eci&&e.sri<=this.eri&&e.sci<=this.eci}union(e){const{sri:t,sci:r,eri:n,eci:i}=this;return new c(e.srin?e.eri:n,e.eci>i?e.eci:i)}difference(e){const t=[],r=(e,r,n,i)=>{t.push(new c(e,r,n,i))},{sri:n,sci:i,eri:o,eci:a}=this,s=e.sri-n,l=e.sci-i,u=o-e.eri,f=a-e.eci;return s>0?(r(n,i,e.sri-1,a),u>0?(r(e.eri+1,i,o,a),l>0&&r(e.sri,i,e.eri,e.sci-1),f>0&&r(e.sri,e.eci+1,e.eri,a)):(l>0&&r(e.sri,i,o,e.sci-1),f>0&&r(e.sri,e.eci+1,o,a))):u>0&&(r(e.eri+1,i,o,a),l>0&&r(n,i,e.eri,e.sci-1),f>0&&r(n,e.eci+1,e.eri,a)),l>0?(r(n,i,o,e.sci-1),f>0?(r(n,e.eri+1,o,a),s>0&&r(n,e.sci,e.sri-1,e.eci),u>0&&r(e.sri+1,e.sci,o,e.eci)):(s>0&&r(n,e.sci,e.sri-1,a),u>0&&r(e.sri+1,e.sci,o,a))):f>0&&(r(o,e.eci+1,o,a),s>0&&r(n,i,e.sri-1,e.eci),u>0&&r(e.eri+1,i,o,e.eci)),t}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:e,sci:t,eri:r,eci:n}=this;let i=a(t,e);return this.multiple()&&(i=`${i}:${a(n,r)}`),i}clone(){const{sri:e,sci:t,eri:r,eci:n,w:i,h:o}=this;return new c(e,t,r,n,i,o)}equals(e){return this.eri===e.eri&&this.eci===e.eci&&this.sri===e.sri&&this.sci===e.sci}static valueOf(e){const t=e.split(":"),[r,n]=o(t[0]);let[i,a]=[n,r];return t.length>1&&([a,i]=o(t[1])),new c(n,r,i,a)}}class l{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class u{constructor(){this.undoItems=[],this.redoItems=[]}add(e){this.undoItems.push(JSON.stringify(e)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(e,t){const{undoItems:r,redoItems:n}=this;this.canUndo()&&(n.push(JSON.stringify(e)),t(JSON.parse(r.pop())))}redo(e,t){const{undoItems:r,redoItems:n}=this;this.canRedo()&&(r.push(JSON.stringify(e)),t(JSON.parse(n.pop())))}}class f{constructor(){this.range=null,this.state="clear"}copy(e){return this.range=e,this.state="copy",this}cut(e){return this.range=e,this.state="cut",this}isCopy(){return"copy"===this.state}isCut(){return"cut"===this.state}isClear(){return"clear"===this.state}clear(){this.range=null,this.state="clear"}}class h{constructor(e,t,r){this.ci=e,this.operator=t,this.value=r}set(e,t){this.operator=e,this.value=t}includes(e){const{operator:t,value:r}=this;return"all"===t||"in"===t&&r.includes(e)}vlength(){const{operator:e,value:t}=this;return"in"===e?t.length:0}getData(){const{ci:e,operator:t,value:r}=this;return{ci:e,operator:t,value:r}}}class d{constructor(e,t){this.ci=e,this.order=t}asc(){return"asc"===this.order}desc(){return"desc"===this.order}}class p{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:e,filters:t,sort:r}){null!=e&&(this.ref=e,this.filters=t.map((e=>new h(e.ci,e.operator,e.value))),r&&(this.sort=new d(r.ci,r.order)))}getData(){if(this.active()){const{ref:e,filters:t,sort:r}=this;return{ref:e,filters:t.map((e=>e.getData())),sort:r}}return{}}addFilter(e,t,r){const n=this.getFilter(e);null==n?this.filters.push(new h(e,t,r)):n.set(t,r)}setSort(e,t){this.sort=t?new d(e,t):null}includes(e,t){return!!this.active()&&this.hrange().includes(e,t)}getSort(e){const{sort:t}=this;return t&&t.ci===e?t:null}getFilter(e){const{filters:t}=this;for(let r=0;r!t.within(e)))}getFirstIncludes(e,t){for(let r=0;rt.intersects(e))))}intersects(e){for(let t=0;t{e.intersects(t)&&(t=e.union(t))})),t}add(e){this.deleteWithin(e),this._.push(e)}shift(e,t,r,n){this._.forEach((i=>{const{sri:o,sci:a,eri:s,eci:c}=i,l=i;"row"===e?o>=t?(l.sri+=r,l.eri+=r):o=t?(l.sci+=r,l.eci+=r):a{const i=n;i.within(e)&&(i.eri+=t,i.sri+=t,i.sci+=r,i.eci+=r)}))}setData(e){return this._=e.map((e=>c.valueOf(e))),this}getData(){return this._.map((e=>e.toString()))}}const b=(e={},...t)=>(t.forEach((t=>{Object.keys(t).forEach((r=>{const n=t[r];"string"==typeof n||"number"==typeof n||"boolean"==typeof n?e[r]=n:"function"!=typeof n&&!Array.isArray(n)&&n instanceof Object?(e[r]=e[r]||{},b(e[r],n)):e[r]=n}))})),e);function y(e){const t=`${e}`;let r=0,n=!1;for(let e=0;e5?s.toFixed(2):s;return s.toFixed(Math.max(n,i))}var g={cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},merge:(...e)=>b({},...e),equals:function e(t,r){const n=Object.keys(t);if(n.length!==Object.keys(r).length)return!1;for(let i=0;ie))=>{let r=0,n=0;return Object.keys(e).forEach((i=>{r+=t(e[i],i),n+=1})),[r,n]},rangeEach:function(e,t,r){for(let n=e;ni);c+=1)s=o(c),a+=s;return[c,a-s,s]},deleteProperty:function(e,t){const r=e[`${t}`];return delete e[`${t}`],r},numberCalc:v};class w{constructor({len:e,height:t}){this._={},this.len=e,this.height=t}getHeight(e){if(this.isHide(e))return 0;const t=this.get(e);return t&&t.height?t.height:this.height}setHeight(e,t){this.getOrNew(e).height=t}unhide(e){let t=e;for(;t>0&&(t-=1,this.isHide(t));)this.setHide(t,!1)}isHide(e){const t=this.get(e);return t&&t.hide}setHide(e,t){const r=this.getOrNew(e);!0===t?r.hide=!0:delete r.hide}setStyle(e,t){this.getOrNew(e).style=t}sumHeight(e,t,r){return g.rangeSum(e,t,(e=>r&&r.has(e)?0:this.getHeight(e)))}totalHeight(){return this.sumHeight(0,this.len)}get(e){return this._[e]}getOrNew(e){return this._[e]=this._[e]||{cells:{}},this._[e]}getCell(e,t){const r=this.get(e);return void 0!==r&&void 0!==r.cells&&void 0!==r.cells[t]?r.cells[t]:null}getCellMerge(e,t){const r=this.getCell(e,t);return r&&r.merge?r.merge:[0,0]}getCellOrNew(e,t){const r=this.getOrNew(e);return r.cells[t]=r.cells[t]||{},r.cells[t]}setCell(e,t,r,n="all"){const i=this.getOrNew(e);"all"===n?i.cells[t]=r:"text"===n?(i.cells[t]=i.cells[t]||{},i.cells[t].text=r.text):"format"===n&&(i.cells[t]=i.cells[t]||{},i.cells[t].style=r.style,r.merge&&(i.cells[t].merge=r.merge))}setCellText(e,t,r){const n=this.getCellOrNew(e,t);!1!==n.editable&&(n.text=r)}copyPaste(e,t,r,n=!1,i=(()=>{})){const{sri:o,sci:a,eri:c,eci:l}=e,u=t.sri,f=t.sci,h=t.eri,d=t.eci,[p,m]=e.size(),[b,y]=t.size();let v=!0,w=0;(h0){const{text:e}=k;let t=y-f+(b-u)+2;if(v||(t-=w+1),"="===e[0])k.text=e.replace(/[a-zA-Z]{1,3}\d+/g,(e=>{let[r,n]=[0,0];return o===u?r=t-1:n=t-1,/^\d+$/.test(e)?e:s(e,r,n)}));else if(p<=1&&m>1&&(u>c||h1&&(f>l||d{this.eachCells(n,(i=>{let o=parseInt(n,10),a=parseInt(i,10);e.includes(n,i)&&(o=t.sri+(o-e.sri),a=t.sci+(a-e.sci)),r[o]=r[o]||{cells:{}},r[o].cells[a]=this._[n].cells[i]}))})),this._=r}paste(e,t){if(e.length<=0)return;const{sri:r,sci:n}=t;e.forEach(((e,t)=>{const i=r+t;e.forEach(((e,t)=>{const r=n+t;this.setCellText(i,r,e)}))}))}insert(e,t=1){const r={};this.each(((n,i)=>{let o=parseInt(n,10);o>=e&&(o+=t,this.eachCells(n,((r,n)=>{n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(r=>s(r,0,t,((t,r)=>r>=e)))))}))),r[o]=i})),this._=r,this.len+=t}delete(e,t){const r=t-e+1,n={};this.each(((i,o)=>{const a=parseInt(i,10);at&&(n[a-r]=o,this.eachCells(i,((e,n)=>{n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(e=>s(e,0,-r,((e,r)=>r>t)))))})))})),this._=n,this.len-=r}insertColumn(e,t=1){this.each(((r,n)=>{const i={};this.eachCells(r,((r,n)=>{let o=parseInt(r,10);o>=e&&(o+=t,n.text&&"="===n.text[0]&&(n.text=n.text.replace(/[a-zA-Z]{1,3}\d+/g,(r=>s(r,t,0,(t=>t>=e)))))),i[o]=n})),n.cells=i}))}deleteColumn(e,t){const r=t-e+1;this.each(((n,i)=>{const o={};this.eachCells(n,((n,i)=>{const a=parseInt(n,10);at&&(o[a-r]=i,i.text&&"="===i.text[0]&&(i.text=i.text.replace(/[a-zA-Z]{1,3}\d+/g,(e=>s(e,-r,0,(e=>e>t))))))})),i.cells=o}))}deleteCells(e,t="all"){e.each(((e,r)=>{this.deleteCell(e,r,t)}))}deleteCell(e,t,r="all"){const n=this.get(e);if(null!==n){const i=this.getCell(e,t);null!==i&&!1!==i.editable&&("all"===r?delete n.cells[t]:"text"===r?(i.text&&delete i.text,i.value&&delete i.value):"format"===r?(void 0!==i.style&&delete i.style,i.merge&&delete i.merge):"merge"===r&&i.merge&&delete i.merge)}}maxCell(){const e=Object.keys(this._),t=e[e.length-1],r=this._[t];if(r){const{cells:e}=r,n=Object.keys(e),i=n[n.length-1];return[parseInt(t,10),parseInt(i,10)]}return[0,0]}each(e){Object.entries(this._).forEach((([t,r])=>{e(t,r)}))}eachCells(e,t){this._[e]&&this._[e].cells&&Object.entries(this._[e].cells).forEach((([e,r])=>{t(e,r)}))}setData(e){e.len&&(this.len=e.len,delete e.len),this._=e}getData(){const{len:e}=this;return Object.assign({len:e},this._)}}class _{constructor({len:e,width:t,indexWidth:r,minWidth:n}){this._={},this.len=e,this.width=t,this.indexWidth=r,this.minWidth=n}setData(e){e.len&&(this.len=e.len,delete e.len),this._=e}getData(){const{len:e}=this;return Object.assign({len:e},this._)}getWidth(e){if(this.isHide(e))return 0;const t=this._[e];return t&&t.width?t.width:this.width}getOrNew(e){return this._[e]=this._[e]||{},this._[e]}setWidth(e,t){this.getOrNew(e).width=t}unhide(e){let t=e;for(;t>0&&(t-=1,this.isHide(t));)this.setHide(t,!1)}isHide(e){const t=this._[e];return t&&t.hide}setHide(e,t){const r=this.getOrNew(e);!0===t?r.hide=!0:delete r.hide}setStyle(e,t){this.getOrNew(e).style=t}sumWidth(e,t){return g.rangeSum(e,t,(e=>this.getWidth(e)))}totalWidth(){return this.sumWidth(0,this.len)}}let x=["en"];const k={en:{toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}}};function S(e,t){if(t)for(const r of x){if(!t[r])break;let n=t[r];const i=e.match(/(?:\\.|[^.])+/g);for(let e=0;eT(e)}function O(e,t,r=!1){r?x=[e]:x.unshift(e),t&&(k[e]=t)}const C={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function R(e,t,...r){let n="";return e||(n=T(`validation.${t}`,...r)),[e,n]}class A{constructor(e,t,r,n){this.required=t,this.value=r,this.type=e,this.operator=n,this.message=""}parseValue(e){const{type:t}=this;return"date"===t?new Date(e):"number"===t?Number(e):e}equals(e){let t=this.type===e.type&&this.required===e.required&&this.operator===e.operator;return t&&(t=Array.isArray(this.value)?g.arrayEquals(this.value,e.value):this.value===e.value),t}values(){return this.value.split(",")}validate(e){const{required:t,operator:r,value:n,type:i}=this;if(t&&/^\s*$/.test(e))return R(!1,"required");if(/^\s*$/.test(e))return[!0];if(C[i]&&!C[i].test(e))return R(!1,"notMatch");if("list"===i)return R(this.values().includes(e),"notIn");if(r){const t=this.parseValue(e);if("be"===r){const[e,r]=n;return R(t>=this.parseValue(e)&&t<=this.parseValue(r),"between",e,r)}if("nbe"===r){const[e,r]=n;return R(tthis.parseValue(r),"notBetween",e,r)}if("eq"===r)return R(t===this.parseValue(n),"equal",n);if("neq"===r)return R(t!==this.parseValue(n),"notEqual",n);if("lt"===r)return R(tthis.parseValue(n),"greaterThan",n);if("gte"===r)return R(t>=this.parseValue(n),"greaterThanEqual",n)}return[!0]}}class M{constructor(e,t,r){this.refs=t,this.mode=e,this.validator=r}includes(e,t){const{refs:r}=this;for(let n=0;n{const n=c.valueOf(r);if(n.intersects(e)){n.difference(e).forEach((e=>t.push(e.toString())))}else t.push(r)})),this.refs=t}getData(){const{refs:e,mode:t,validator:r}=this,{type:n,required:i,operator:o,value:a}=r;return{refs:e,mode:t,type:n,required:i,operator:o,value:a}}static valueOf({refs:e,mode:t,type:r,required:n,operator:i,value:o}){return new M(t,e,new A(r,n,o,i))}}class P{constructor(){this._=[],this.errors=new Map}getError(e,t){return this.errors.get(`${e}_${t}`)}validate(e,t,r){const n=this.get(e,t),i=`${e}_${t}`,{errors:o}=this;if(null!==n){const[e,t]=n.validator.validate(r);e?o.delete(i):o.set(i,t)}else o.delete(i);return!0}add(e,t,{type:r,required:n,value:i,operator:o}){const a=new A(r,n,i,o),s=this.getByValidator(a);null!==s?s.addRef(t):this._.push(new M(e,[t],a))}getByValidator(e){for(let t=0;t{t.remove(e)}))}each(e){this._.forEach((t=>e(t)))}getData(){return this._.filter((e=>e.refs.length>0)).map((e=>e.getData()))}setData(e){this._=e.map((e=>M.valueOf(e)))}}const j={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},I=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function D(e,t,r=(()=>{})){const{merges:n}=this,i=t.clone(),[o,a]=e.size(),[s,c]=t.size();return o>s&&(i.eri=t.sri+o-1),a>c&&(i.eci=t.sci+a-1),!n.intersects(i)||(r(T("error.pasteForMergedCell")),!1)}function N(e,t,r,n=!1){const{rows:i,merges:o}=this;"all"!==r&&"format"!==r||(i.deleteCells(t,r),o.deleteWithin(t)),i.copyPaste(e,t,r,n,((e,t,r)=>{if(r&&r.merge){const[n,i]=r.merge;if(n<=0&&i<=0)return;o.add(new c(e,t,e+n,t+i))}}))}function F(e,t){const{clipboard:r,rows:n,merges:i}=this;n.cutPaste(e,t),i.move(e,t.sri-e.sri,t.sci-e.sci),r.clear()}function L(e,t,r){const{styles:n,rows:i}=this,o=i.getCellOrNew(e,t);let a={};void 0!==o.style&&(a=g.cloneDeep(n[o.style])),a=g.merge(a,{border:r}),o.style=this.addStyle(a)}function B({mode:e,style:t,color:r}){const{styles:n,selector:i,rows:o}=this,{sri:a,sci:s,eri:c,eci:l}=i.range,u=!this.isSignleSelected();if(u||"inside"!==e&&"horizontal"!==e&&"vertical"!==e)if("outside"!==e||u){if("none"===e)i.range.each(((e,t)=>{const r=o.getCell(e,t);if(r&&void 0!==r.style){const e=g.cloneDeep(n[r.style]);delete e.border,r.style=this.addStyle(e)}}));else if("all"===e||"inside"===e||"outside"===e||"horizontal"===e||"vertical"===e){const n=[];for(let i=a;i<=c;i+=1)for(let f=s;f<=l;f+=1){const h=[];for(let e=0;en.splice(e,1))),f>l)break;const d=o.getCell(i,f);let[p,m]=[0,0];d&&d.merge&&([p,m]=d.merge,n.push([i,f,p,m]));const b=p>0&&i+p===c,y=m>0&&f+m===l;let v={};"all"===e?v={bottom:[t,r],top:[t,r],left:[t,r],right:[t,r]}:"inside"===e?(!y&&f0&&L.call(this,i,f,v),f+=m}}else if("top"===e||"bottom"===e)for(let n=s;n<=l;n+=1)"top"===e&&(L.call(this,a,n,{top:[t,r]}),n+=o.getCellMerge(a,n)[1]),"bottom"===e&&(L.call(this,c,n,{bottom:[t,r]}),n+=o.getCellMerge(c,n)[1]);else if("left"===e||"right"===e)for(let n=a;n<=c;n+=1)"left"===e&&(L.call(this,n,s,{left:[t,r]}),n+=o.getCellMerge(n,s)[0]),"right"===e&&(L.call(this,n,l,{right:[t,r]}),n+=o.getCellMerge(n,l)[0])}else L.call(this,a,s,{top:[t,r],bottom:[t,r],left:[t,r],right:[t,r]})}function z(e,t){const{rows:r}=this,n=this.freezeTotalHeight();let i=r.height;n+r.heighte);a+=1)o.has(a)||(c=r.getHeight(a),s+=c);return s-=c,s<=0?{ri:-1,top:0,height:c}:{ri:a-1,top:s,height:c}}function U(e,t){const{cols:r}=this,n=this.freezeTotalWidth();let i=r.indexWidth;n+r.indexWidthr.getWidth(e)));return a<=0?{ci:-1,left:0,width:r.indexWidth}:{ci:o-1,left:a,width:s}}class H{constructor(e,t){this.settings=g.merge(j,t||{}),this.name=e||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new m,this.rows=new w(this.settings.row),this.cols=new _(this.settings.col),this.validations=new P,this.hyperlinks={},this.comments={},this.selector=new class{constructor(){this.range=new c(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(e,t){this.ri=e,this.ci=t}size(){return this.range.size()}},this.scroll=new l,this.history=new u,this.clipboard=new f,this.autoFilter=new p,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(e,t,r){this.changeData((()=>{this.validations.add(e,t,r)}))}removeValidation(){const{range:e}=this.selector;this.changeData((()=>{this.validations.remove(e)}))}getSelectedValidator(){const{ri:e,ci:t}=this.selector,r=this.validations.get(e,t);return r?r.validator:null}getSelectedValidation(){const{ri:e,ci:t,range:r}=this.selector,n=this.validations.get(e,t),i={ref:r.toString()};return null!==n&&(i.mode=n.mode,i.validator=n.validator),i}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),(e=>{this.setData(e)}))}redo(){this.history.redo(this.getData(),(e=>{this.setData(e)}))}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(void 0===navigator.clipboard)return;let e="";const t=this.rows.getData();for(let r=this.selector.range.sri;r<=this.selector.range.eri;r+=1){if(I(t,r)){for(let n=this.selector.range.sci;n<=this.selector.range.eci;n+=1)if(n>this.selector.range.sci&&(e+="\t"),I(t[r].cells,n)){const i=String(t[r].cells[n].text);-1===i.indexOf("\n")&&-1===i.indexOf("\t")&&-1===i.indexOf('"')?e+=i:e+=`"${i}"`}}else for(let t=this.selector.range.sci;t<=this.selector.range.eci;t+=1)e+="\t";e+="\n"}navigator.clipboard.writeText(e).then((()=>{}),(t=>{console.log("text copy to the system clipboard error ",e,t)}))}cut(){this.clipboard.cut(this.selector.range)}paste(e="all",t=(()=>{})){const{clipboard:r,selector:n}=this;return!r.isClear()&&(!!D.call(this,r.range,n.range,t)&&(this.changeData((()=>{r.isCopy()?N.call(this,r.range,n.range,e):r.isCut()&&F.call(this,r.range,n.range)})),!0))}pasteFromText(e){const t=e.split("\r\n").map((e=>e.replace(/"/g,"").split("\t")));t.length>0&&(t.length-=1);const{rows:r,selector:n}=this;this.changeData((()=>{r.paste(t,n.range)}))}autofill(e,t,r=(()=>{})){const n=this.selector.range;return!!D.call(this,n,e,r)&&(this.changeData((()=>{N.call(this,n,e,t,!0)})),!0)}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(e,t){const{selector:r,rows:n,cols:i,merges:o}=this;let{sri:a,sci:s,eri:l,eci:u}=r.range;const f=r.ri,h=r.ci;let[d,p]=[e,t];return e<0&&(d=n.len-1),t<0&&(p=i.len-1),[a,l]=d>f?[f,d]:[d,f],[s,u]=p>h?[h,p]:[p,h],r.range=o.union(new c(a,s,l,u)),r.range=o.union(r.range),r.range}calSelectedRangeByStart(e,t){const{selector:r,rows:n,cols:i,merges:o}=this;let a=o.getFirstIncludes(e,t);return null===a&&(a=new c(e,t,e,t),-1===e&&(a.sri=0,a.eri=n.len-1),-1===t&&(a.sci=0,a.eci=i.len-1)),r.range=a,a}setSelectedCellAttr(e,t){this.changeData((()=>{const{selector:r,styles:n,rows:i}=this;if("merge"===e)t?this.merge():this.unmerge();else if("border"===e)B.call(this,t);else if("formula"===e){const{ri:e,ci:n,range:o}=r;if(r.multiple()){const[n,s]=r.size(),{sri:c,sci:l,eri:u,eci:f}=o;if(n>1)for(let e=l;e<=f;e+=1){i.getCellOrNew(u+1,e).text=`=${t}(${a(e,c)}:${a(e,u)})`}else if(s>1){i.getCellOrNew(e,f+1).text=`=${t}(${a(l,e)}:${a(f,e)})`}}else{i.getCellOrNew(e,n).text=`=${t}()`}}else r.range.each(((r,o)=>{const a=i.getCellOrNew(r,o);let s={};if(void 0!==a.style&&(s=g.cloneDeep(n[a.style])),"format"===e)s.format=t,a.style=this.addStyle(s);else if("font-bold"===e||"font-italic"===e||"font-name"===e||"font-size"===e){const r={};r[e.split("-")[1]]=t,s.font=Object.assign(s.font||{},r),a.style=this.addStyle(s)}else"strike"===e||"textwrap"===e||"underline"===e||"align"===e||"valign"===e||"color"===e||"bgcolor"===e?(s[e]=t,a.style=this.addStyle(s)):a[e]=t}))}))}setSelectedCellText(e,t="input"){const{autoFilter:r,selector:n,rows:i}=this,{ri:o,ci:a}=n;let s=o;this.unsortedRowMap.has(o)&&(s=this.unsortedRowMap.get(o));const c=i.getCell(s,a),l=c?c.text:"";if(this.setCellText(s,a,e,t),r.active()){const t=r.getFilter(a);if(t){const r=t.value.findIndex((e=>e===l));r>=0&&t.value.splice(r,1,e)}}}getSelectedCell(){const{ri:e,ci:t}=this.selector;let r=e;return this.unsortedRowMap.has(e)&&(r=this.unsortedRowMap.get(e)),this.rows.getCell(r,t)}xyInSelectedRect(e,t){const{left:r,top:n,width:i,height:o}=this.getSelectedRect(),a=e-this.cols.indexWidth,s=t-this.rows.height;return a>r&&an&&s0&&b>l&&(d=l),m>0&&m>u&&(p=u),{l:l,t:u,left:d,top:p,height:f,width:h,scroll:t}}getCellRectByXY(e,t){const{scroll:r,merges:n,rows:i,cols:o}=this;let{ri:a,top:s,height:c}=z.call(this,t,r.y),{ci:l,left:u,width:f}=U.call(this,e,r.x);if(-1===l&&(f=o.totalWidth()),-1===a&&(c=i.totalHeight()),a>=0||l>=0){const e=n.getFirstIncludes(a,l);e&&(a=e.sri,l=e.sci,({left:u,top:s,width:f,height:c}=this.cellRect(a,l)))}return{ri:a,ci:l,left:u,top:s,width:f,height:c}}isSignleSelected(){const{sri:e,sci:t,eri:r,eci:n}=this.selector.range,i=this.getCell(e,t);if(i&&i.merge){const[o,a]=i.merge;if(e+o===r&&t+a===n)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:e,sci:t,eri:r,eci:n}=this.selector.range,i=this.getCell(e,t);if(i&&i.merge){const[o,a]=i.merge;if(e+o===r&&t+a===n)return!0}return!1}merge(){const{selector:e,rows:t}=this;if(this.isSignleSelected())return;const[r,n]=e.size();if(r>1||n>1){const{sri:i,sci:o}=e.range;this.changeData((()=>{const a=t.getCellOrNew(i,o);a.merge=[r-1,n-1],this.merges.add(e.range),this.rows.deleteCells(e.range),this.rows.setCell(i,o,a)}))}}unmerge(){const{selector:e}=this;if(!this.isSignleSelected())return;const{sri:t,sci:r}=e.range;this.changeData((()=>{this.rows.deleteCell(t,r,"merge"),this.merges.deleteWithin(e.range)}))}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:e,selector:t}=this;this.changeData((()=>{e.active()?(e.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):e.ref=t.range.toString()}))}setAutoFilter(e,t,r,n){const{autoFilter:i}=this;i.addFilter(e,r,n),i.setSort(e,t),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:e,rows:t}=this;if(!e.active())return;const{sort:r}=e,{rset:n,fset:i}=e.filteredRows(((e,r)=>t.getCell(e,r))),o=Array.from(i),a=Array.from(i);r&&o.sort(((e,t)=>"asc"===r.order?e-t:"desc"===r.order?t-e:0)),this.exceptRowSet=n,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,o.forEach(((e,t)=>{this.sortedRowMap.set(a[t],e),this.unsortedRowMap.set(e,a[t])}))}deleteCell(e="all"){const{selector:t}=this;this.changeData((()=>{this.rows.deleteCells(t.range,e),"all"!==e&&"format"!==e||this.merges.deleteWithin(t.range)}))}insert(e,t=1){this.changeData((()=>{const{sri:r,sci:n}=this.selector.range,{rows:i,merges:o,cols:a}=this;let s=r;"row"===e?i.insert(r,t):"column"===e&&(i.insertColumn(n,t),s=n,a.len+=1),o.shift(e,s,t,((e,t,r,n)=>{const o=i.getCell(e,t);o.merge[0]+=r,o.merge[1]+=n}))}))}delete(e){this.changeData((()=>{const{rows:t,merges:r,selector:n,cols:i}=this,{range:o}=n,{sri:a,sci:s,eri:c,eci:l}=n.range,[u,f]=n.range.size();let h=a,d=u;"row"===e?t.delete(a,c):"column"===e&&(t.deleteColumn(s,l),h=o.sci,d=f,i.len-=1),r.shift(e,h,-d,((e,r,n,i)=>{const o=t.getCell(e,r);o.merge[0]+=n,o.merge[1]+=i,0===o.merge[0]&&0===o.merge[1]&&delete o.merge}))}))}scrollx(e,t){const{scroll:r,freeze:n,cols:i}=this,[,o]=n,[a,s,c]=g.rangeReduceIf(o,i.len,0,0,e,(e=>i.getWidth(e)));let l=s;e>0&&(l+=c),r.x!==l&&(r.ci=e>0?a:0,r.x=l,t())}scrolly(e,t){const{scroll:r,freeze:n,rows:i}=this,[o]=n,[a,s,c]=g.rangeReduceIf(o,i.len,0,0,e,(e=>i.getHeight(e)));let l=s;e>0&&(l+=c),r.y!==l&&(r.ri=e>0?a:0,r.y=l,t())}cellRect(e,t){const{rows:r,cols:n}=this,i=n.sumWidth(0,t),o=r.sumHeight(0,e),a=r.getCell(e,t);let s=n.getWidth(t),c=r.getHeight(e);if(null!==a&&a.merge){const[i,o]=a.merge;if(i>0)for(let t=1;t<=i;t+=1)c+=r.getHeight(e+t);if(o>0)for(let e=1;e<=o;e+=1)s+=n.getWidth(t+e)}return{left:i,top:o,width:s,height:c,cell:a}}getCell(e,t){return this.rows.getCell(e,t)}getCellTextOrDefault(e,t){const r=this.getCell(e,t);return r&&r.text?r.text:""}getCellStyle(e,t){const r=this.getCell(e,t);return r&&void 0!==r.style?this.styles[r.style]:null}getCellStyleOrDefault(e,t){const{styles:r,rows:n}=this,i=n.getCell(e,t),o=i&&void 0!==i.style?r[i.style]:{};return g.merge(this.defaultStyle(),o)}getSelectedCellStyle(){const{ri:e,ci:t}=this.selector;return this.getCellStyleOrDefault(e,t)}setCellText(e,t,r,n){const{rows:i,history:o,validations:a}=this;"finished"===n?(i.setCellText(e,t,""),o.add(this.getData()),i.setCellText(e,t,r)):(i.setCellText(e,t,r),this.change(this.getData())),a.validate(e,t,r)}freezeIsActive(){const[e,t]=this.freeze;return e>0||t>0}setFreeze(e,t){this.changeData((()=>{this.freeze=[e,t]}))}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(e,t){this.changeData((()=>{this.rows.setHeight(e,t)}))}setColWidth(e,t){this.changeData((()=>{this.cols.setWidth(e,t)}))}viewHeight(){const{view:e,showToolbar:t,showBottomBar:r}=this.settings;let n=e.height();return r&&(n-=41),t&&(n-=41),n}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[e,t]=this.freeze;return new c(0,0,e-1,t-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:e,cols:t}=this,[r,n]=e.maxCell(),i=e.sumHeight(0,r+1),o=t.sumWidth(0,n+1);return new c(0,0,r,n,o,i)}exceptRowTotalHeight(e,t){const{exceptRowSet:r,rows:n}=this,i=Array.from(r);let o=0;return i.forEach((r=>{if(rt){const e=n.getHeight(r);o+=e}})),o}viewRange(){const{scroll:e,rows:t,cols:r,freeze:n,exceptRowSet:i}=this;let{ri:o,ci:a}=e;o<=0&&([o]=n),a<=0&&([,a]=n);let[s,l]=[0,0],[u,f]=[t.len,r.len];for(let e=o;ethis.viewHeight()));e+=1);for(let e=a;ethis.viewWidth()));e+=1);return new c(o,a,u,f,s,l)}eachMergesInView(e,t){this.merges.filterIntersects(e).forEach((e=>t(e)))}hideRowsOrCols(){const{rows:e,cols:t,selector:r}=this,[n,i]=r.size(),{sri:o,sci:a,eri:s,eci:c}=r.range;if(n===e.len)for(let e=a;e<=c;e+=1)t.setHide(e,!0);else if(i===t.len)for(let t=o;t<=s;t+=1)e.setHide(t,!0)}unhideRowsOrCols(e,t){this[`${e}s`].unhide(t)}rowEach(e,t,r){let n=0;const{rows:i}=this,o=this.exceptRowSet,a=[...o];let s=0;for(let t=0;t0&&(r(a,n,e),n+=e,n>this.viewHeight()))break}}colEach(e,t,r){let n=0;const{cols:i}=this;for(let o=e;o<=t;o+=1){const e=i.getWidth(o);if(e>0&&(r(o,n,e),n+=e,n>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(e){const{styles:t}=this;for(let r=0;r{if("merges"===t||"rows"===t||"cols"===t||"validations"===t)this[t].setData(e[t]);else if("freeze"===t){const[r,n]=o(e[t]);this.freeze=[n,r]}else"autofilter"===t?this.autoFilter.setData(e[t]):void 0!==e[t]&&(this[t]=e[t])})),this}getData(){const{name:e,freeze:t,styles:r,merges:n,rows:i,cols:o,validations:s,autoFilter:c}=this;return{name:e,freeze:a(t[1],t[0]),styles:r,merges:n.getData(),rows:i.getData(),cols:o.getData(),validations:s.getData(),autofilter:c.getData()}}}function W(e,t,r){e.addEventListener(t,r)}function V(e,t,r){e.removeEventListener(t,r)}function q(e){e.xclickoutside&&(V(window.document.body,"click",e.xclickoutside),delete e.xclickoutside)}function X(e,t){e.xclickoutside=r=>{2===r.detail||e.contains(r.target)||(t?t(e):(e.hide(),q(e)))},W(window.document.body,"click",e.xclickoutside)}function G(e,t,r){W(e,"mousemove",t);e.xEvtUp=n=>{V(e,"mousemove",t),V(e,"mouseup",e.xEvtUp),r(n)},W(e,"mouseup",e.xEvtUp)}function Y(e,t,r,n){let i="";Math.abs(e)>Math.abs(t)?(i=e>0?"right":"left",n(i,e,r)):(i=t>0?"down":"up",n(i,t,r))}const K="x-spreadsheet";class Z{constructor(e=!1,r){this.moving=!1,this.vertical=e,this.el=t("div",`${K}-resizer ${e?"vertical":"horizontal"}`).children(this.unhideHoverEl=t("div",`${K}-resizer-hover`).on("dblclick.stop",(e=>this.mousedblclickHandler(e))).css("position","absolute").hide(),this.hoverEl=t("div",`${K}-resizer-hover`).on("mousedown.stop",(e=>this.mousedownHandler(e))),this.lineEl=t("div",`${K}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=r,this.unhideFn=()=>{}}showUnhide(e){this.unhideIndex=e,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(e,t){const{moving:r,vertical:n,hoverEl:i,lineEl:o,el:a,unhideHoverEl:s}=this;if(r)return;this.cRect=e;const{left:c,top:l,width:u,height:f}=e;a.offset({left:n?c+u-5:c,top:n?l:l+f-5}).show(),i.offset({width:n?5:u,height:n?f:5}),o.offset({width:n?0:t.width,height:n?t.height:0}),s.offset({left:n?5-u:c,top:n?l:5-f,width:n?5:u,height:n?f:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(e){let t=e;const{el:r,lineEl:n,cRect:i,vertical:o,minDistance:a}=this;let s=o?i.width:i.height;n.show(),G(window,(e=>{this.moving=!0,null!==t&&1===e.buttons&&(o?(s+=e.movementX,s>a&&r.css("left",`${i.left+s}px`)):(s+=e.movementY,s>a&&r.css("top",`${i.top+s}px`)),t=e)}),(()=>{t=null,n.hide(),this.moving=!1,this.hide(),this.finishedFn&&(s{})).on("scroll.stop",(e=>{const{scrollTop:t,scrollLeft:r}=e.target;this.moveFn&&this.moveFn(this.vertical?t:r,e)}))}move(e){return this.el.scroll(e),this}scroll(){return this.el.scroll()}set(e,t){const r=e-1;if(t>r){const e=this.vertical?"height":"width";this.el.css(e,r-15+"px").show(),this.contentEl.css(this.vertical?"width":"height","1px").css(e,`${t}px`)}else this.el.hide();return this}}let Q=10;class ee{constructor(e=!1){this.useHideInput=e,this.inputChange=()=>{},this.cornerEl=t("div",`${K}-selector-corner`),this.areaEl=t("div",`${K}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=t("div",`${K}-selector-clipboard`).hide(),this.autofillEl=t("div",`${K}-selector-autofill`).hide(),this.el=t("div",`${K}-selector`).css("z-index",`${Q}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),e&&(this.hideInput=t("input","").on("compositionend",(e=>{this.inputChange(e.target.value)})),this.el.child(this.hideInputDiv=t("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=t("div","hide-input").child(this.hideInput))),Q+=1}setOffset(e){return this.el.offset(e).show(),this}hide(){return this.el.hide(),this}setAreaOffset(e){const{left:t,top:r,width:n,height:i}=e,o={width:n-3+.8,height:i-3+.8,left:t-.8,top:r-.8};this.areaEl.offset(o).show(),this.useHideInput&&(this.hideInputDiv.offset(o),this.hideInput.val("").focus())}setClipboardOffset(e){const{left:t,top:r,width:n,height:i}=e;this.clipboardEl.offset({left:t,top:r,width:n-5,height:i-5})}showAutofill(e){const{left:t,top:r,width:n,height:i}=e;this.autofillEl.offset({width:n-3,height:i-3,left:t,top:r}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function te(e){const{data:t}=this,{left:r,top:n,width:i,height:o,scroll:a,l:s,t:c}=e,l=t.freezeTotalWidth(),u=t.freezeTotalHeight();let f=r-l;l>s&&(f-=a.x);let h=n-u;return u>c&&(h-=a.y),{left:f,top:h,width:i,height:o}}function re(e){const{data:t}=this,{left:r,width:n,height:i,l:o,t:a,scroll:s}=e,c=t.freezeTotalWidth();let l=r-c;return c>o&&(l-=s.x),{left:l,top:a,width:n,height:i}}function ne(e){const{data:t}=this,{top:r,width:n,height:i,l:o,t:a,scroll:s}=e,c=t.freezeTotalHeight();let l=r-c;return c>a&&(l-=s.y),{left:o,top:l,width:n,height:i}}function ie(e){const{br:t}=this;t.setAreaOffset(te.call(this,e))}function oe(e){const{tl:t}=this;t.setAreaOffset(e)}function ae(e){const{t:t}=this;t.setAreaOffset(re.call(this,e))}function se(e){const{l:t}=this;t.setAreaOffset(ne.call(this,e))}function ce(e){const{l:t}=this;t.setClipboardOffset(ne.call(this,e))}function le(e){const{br:t}=this;t.setClipboardOffset(te.call(this,e))}function ue(e){const{tl:t}=this;t.setClipboardOffset(e)}function fe(e){const{t:t}=this;t.setClipboardOffset(re.call(this,e))}function he(e){ie.call(this,e),oe.call(this,e),ae.call(this,e),se.call(this,e)}function de(e){le.call(this,e),ue.call(this,e),fe.call(this,e),ce.call(this,e)}class pe{constructor(e){this.inputChange=()=>{},this.data=e,this.br=new ee(!0),this.t=new ee,this.l=new ee,this.tl=new ee,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=t("div",`${K}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,Q+=1}resetData(e){this.data=e,this.range=e.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:e,tl:t,t:r,l:n,br:i}=this,o=e.freezeTotalHeight(),a=e.freezeTotalWidth();o>0||a>0?(t.setOffset({width:a,height:o}),r.setOffset({left:a,height:o}),n.setOffset({top:o,width:a}),i.setOffset({left:a,top:o})):(t.hide(),r.hide(),n.hide(),i.setOffset({left:0,top:0}))}resetAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();he.call(this,e),de.call(this,t),this.resetOffset()}resetBRTAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();ie.call(this,e),ae.call(this,e),le.call(this,t),fe.call(this,t),this.resetOffset()}resetBRLAreaOffset(){const e=this.data.getSelectedRect(),t=this.data.getClipboardRect();ie.call(this,e),se.call(this,e),le.call(this,t),ce.call(this,t),this.resetOffset()}set(e,t,r=!0){const{data:n}=this,i=n.calSelectedRangeByStart(e,t),{sri:o,sci:a}=i;if(r){let[r,i]=[e,t];e<0&&(r=0),t<0&&(i=0),n.selector.setIndexes(r,i),this.indexes=[r,i]}this.moveIndexes=[o,a],this.range=i,this.resetAreaOffset(),this.el.show()}setEnd(e,t,r=!0){const{data:n,lastri:i,lastci:o}=this;if(r){if(e===i&&t===o)return;this.lastri=e,this.lastci=t}this.range=n.calSelectedRangeByEnd(e,t),he.call(this,this.data.getSelectedRect())}reset(){const{eri:e,eci:t}=this.data.selector.range;this.setEnd(e,t)}showAutofill(e,t){if(-1===e&&-1===t)return;const{sri:r,sci:n,eri:i,eci:o}=this.range,[a,s]=[e,t],l=r-e,u=i-e,f=o-t;if(n-t>0)this.arange=new c(r,s,i,n-1);else if(l>0)this.arange=new c(a,n,r-1,o);else if(f<0)this.arange=new c(r,o+1,i,s);else{if(!(u<0))return void(this.arange=null);this.arange=new c(i+1,n,a,o)}if(null!==this.arange){const e=this.data.getRect(this.arange);e.width+=2,e.height+=2;const{br:t,l:r,t:n,tl:i}=this;t.showAutofill(te.call(this,e)),r.showAutofill(ne.call(this,e)),n.showAutofill(re.call(this,e)),i.showAutofill(e)}}hideAutofill(){["br","l","t","tl"].forEach((e=>{this[e].hideAutofill()}))}showClipboard(){const e=this.data.getClipboardRect();de.call(this,e),["br","l","t","tl"].forEach((e=>{this[e].showClipboard()}))}hideClipboard(){["br","l","t","tl"].forEach((e=>{this[e].hideClipboard()}))}}function me(e){e.preventDefault(),e.stopPropagation();const{filterItems:t}=this;t.length<=0||(this.itemIndex>=0&&t[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=t.length-1),t[this.itemIndex].toggle())}function be(e){e.stopPropagation();const{filterItems:t}=this;t.length<=0||(this.itemIndex>=0&&t[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>t.length-1&&(this.itemIndex=0),t[this.itemIndex].toggle())}function ye(e){e.preventDefault();const{filterItems:t}=this;t.length<=0||(e.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),t[this.itemIndex].el.click(),this.hide())}function ve(e){const{keyCode:t}=e;switch(e.ctrlKey&&e.stopPropagation(),t){case 37:case 39:default:e.stopPropagation();break;case 38:me.call(this,e);break;case 40:be.call(this,e);break;case 13:case 9:ye.call(this,e)}}class ge{constructor(e,r,n="200px"){this.filterItems=[],this.items=e,this.el=t("div",`${K}-suggest`).css("width",n).hide(),this.itemClick=r,this.itemIndex=-1}setOffset(e){this.el.cssRemoveKeys("top","bottom").offset(e)}hide(){const{el:e}=this;this.filterItems=[],this.itemIndex=-1,e.hide(),q(this.el.parent())}setItems(e){this.items=e}search(e){let{items:r}=this;if(/^\s*$/.test(e)||(r=r.filter((t=>(t.key||t).startsWith(e.toUpperCase())))),r=r.map((e=>{let{title:r}=e;r?"function"==typeof r&&(r=r()):r=e;const n=t("div",`${K}-item`).child(r).on("click.stop",(()=>{this.itemClick(e),this.hide()}));return e.label&&n.child(t("div","label").html(e.label)),n})),this.filterItems=r,r.length<=0)return;const{el:n}=this;n.html("").children(...r).show(),X(n.parent(),(()=>{this.hide()}))}bindInputEvents(e){e.on("keydown",(e=>ve.call(this,e)))}}class we extends e{constructor(e){super("div",`${K}-icon`),this.iconNameEl=t("div",`${K}-icon-img ${e}`),this.child(this.iconNameEl)}setName(e){this.iconNameEl.className(`${K}-icon-img ${e}`)}}function _e(e,t){e.setMonth(e.getMonth()+t)}function xe(e,t){const r=new Date(e);return r.setDate(t-e.getDay()+1),r}class ke{constructor(e){this.value=e,this.cvalue=new Date(e),this.headerLeftEl=t("div","calendar-header-left"),this.bodyEl=t("tbody",""),this.buildAll(),this.el=t("div","x-spreadsheet-calendar").children(t("div","calendar-header").children(this.headerLeftEl,t("div","calendar-header-right").children(t("a","calendar-prev").on("click.stop",(()=>this.prev())).child(new we("chevron-left")),t("a","calendar-next").on("click.stop",(()=>this.next())).child(new we("chevron-right")))),t("table","calendar-body").children(t("thead","").child(t("tr","").children(...T("calendar.weeks").map((e=>t("th","cell").child(e))))),this.bodyEl)),this.selectChange=()=>{}}setValue(e){this.value=e,this.cvalue=new Date(e),this.buildAll()}prev(){const{value:e}=this;_e(e,-1),this.buildAll()}next(){const{value:e}=this;_e(e,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:e}=this;this.headerLeftEl.html(`${T("calendar.months")[e.getMonth()]} ${e.getFullYear()}`)}buildBody(){const{value:e,cvalue:r,bodyEl:n}=this,i=function(e,t,r){const n=new Date(e,t,1,23,59,59),i=[[],[],[],[],[],[]];for(let e=0;e<6;e+=1)for(let o=0;o<7;o+=1){const a=xe(n,7*e+o),s=a.getMonth()!==t,c=a.getMonth()===r.getMonth()&&a.getDate()===r.getDate();i[e][o]={d:a,disabled:s,active:c}}return i}(e.getFullYear(),e.getMonth(),r).map((e=>{const r=e.map((e=>{let r="cell";return e.disabled&&(r+=" disabled"),e.active&&(r+=" active"),t("td","").child(t("div",r).on("click.stop",(()=>{this.selectChange(e.d)})).child(e.d.getDate().toString()))}));return t("tr","").children(...r)}));n.html("").children(...i)}}class Se{constructor(){this.calendar=new ke(new Date),this.el=t("div",`${K}-datepicker`).child(this.calendar.el).hide()}setValue(e){const{calendar:t}=this;return"string"==typeof e?/^\d{4}-\d{1,2}-\d{1,2}$/.test(e)&&t.setValue(new Date(e.replace(new RegExp("-","g"),"/"))):e instanceof Date&&t.setValue(e),this}change(e){this.calendar.selectChange=t=>{e(t),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function Te(){const{inputText:e}=this;if(!/^\s*$/.test(e)){const{textlineEl:t,textEl:r,areaOffset:n}=this,i=e.split("\n"),o=Math.max(...i.map((e=>e.length))),a=t.offset().width/e.length,s=(o+1)*a+5,c=this.viewFn().width-n.left-a;let l=i.length;if(s>n.width){let e=s;s>c&&(e=c,l+=parseInt(s/c,10),l+=s%c>0?1:0),r.css("width",`${e}px`)}l*=this.rowHeight,l>n.height&&r.css("height",`${l}px`)}}function Ee({target:e},t){const{value:r,selectionEnd:n}=e,i=`${r.slice(0,n)}${t}${r.slice(n)}`;e.value=i,e.setSelectionRange(n+1,n+1),this.inputText=i,this.textlineEl.html(i),Te.call(this)}function Oe(e){const{keyCode:t,altKey:r}=e;13!==t&&9!==t&&e.stopPropagation(),13===t&&r&&(Ee.call(this,e,"\n"),e.stopPropagation()),13!==t||r||e.preventDefault()}function Ce(e){const t=e.target.value,{suggest:r,textlineEl:n,validator:i}=this,{cell:o}=this;if(null!==o)if("editable"in o&&!0===o.editable||void 0===o.editable){if(this.inputText=t,i)"list"===i.type?r.search(t):r.hide();else{const e=t.lastIndexOf("=");-1!==e?r.search(t.substring(e+1)):r.hide()}n.html(t),Te.call(this),this.change("input",t)}else e.target.value=o.text;else{if(this.inputText=t,i)"list"===i.type?r.search(t):r.hide();else{const e=t.lastIndexOf("=");-1!==e?r.search(t.substring(e+1)):r.hide()}n.html(t),Te.call(this),this.change("input",t)}}function Re(e){const{el:t}=this.textEl;setTimeout((()=>{t.focus(),t.setSelectionRange(e,e)}),0)}function Ae(e,t){const{textEl:r,textlineEl:n}=this;r.el.blur(),r.val(e),n.html(e),Re.call(this,t)}function Me(e){const{inputText:t,validator:r}=this;let n=0;if(r&&"list"===r.type)this.inputText=e,n=this.inputText.length;else{const r=t.lastIndexOf("="),i=t.substring(0,r+1);let o=t.substring(r+1);o=-1!==o.indexOf(")")?o.substring(o.indexOf(")")):"",this.inputText=`${i+e.key}(`,n=this.inputText.length,this.inputText+=`)${o}`}Ae.call(this,this.inputText,n)}function Pe(){this.suggest.setItems(this.formulas)}class je{constructor(e,r,n){this.viewFn=r,this.rowHeight=n,this.formulas=e,this.suggest=new ge(e,(e=>{Me.call(this,e)})),this.datepicker=new Se,this.datepicker.change((e=>{this.setText(function(e){let t=e.getMonth()+1,r=e.getDate();return t<10&&(t=`0${t}`),r<10&&(r=`0${r}`),`${e.getFullYear()}-${t}-${r}`}(e)),this.clear()})),this.areaEl=t("div",`${K}-editor-area`).children(this.textEl=t("textarea","").on("input",(e=>Ce.call(this,e))).on("paste.stop",(()=>{})).on("keydown",(e=>Oe.call(this,e))),this.textlineEl=t("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",(()=>{})).on("mousedown.stop",(()=>{})),this.el=t("div",`${K}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(e,t){this.freeze.w=e,this.freeze.h=t}clear(){""!==this.inputText&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),Pe.call(this),this.datepicker.hide()}setOffset(e,t="top"){const{textEl:r,areaEl:n,suggest:i,freeze:o,el:a}=this;if(e){this.areaOffset=e;const{left:s,top:c,width:l,height:u,l:f,t:h}=e,d={left:0,top:0};o.w>f&&o.h>h||(o.wf?d.top=o.h:o.h>h&&(d.left=o.w)),a.offset(d),n.offset({left:s-d.left-.8,top:c-d.top-.8}),r.offset({width:l-9+.8,height:u-3+.8});const p={left:0};p[t]=u,i.setOffset(p),i.hide()}}setCell(e,t){const{el:r,datepicker:n,suggest:i}=this;r.show(),this.cell=e;const o=e&&e.text||"";if(this.setText(o),this.validator=t,t){const{type:e}=t;"date"===e&&(n.show(),/^\s*$/.test(o)||n.setValue(o)),"list"===e&&(i.setItems(t.values()),i.search(""))}}setText(e){this.inputText=e,Ae.call(this,e,e.length),Te.call(this)}}class Ie extends e{constructor(e,t=""){super("div",`${K}-button ${t}`),this.child(T(`button.${e}`))}}function De(){return window.devicePixelRatio||1}function Ne(){return De()-.5}function Fe(e){return parseInt(e*De(),10)}function Le(e){const t=Fe(e);return t>0?t-.5:.5}class Be{constructor(e,t,r,n,i=0){this.x=e,this.y=t,this.width=r,this.height=n,this.padding=i,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:e,bottom:t,left:r,right:n}){e&&(this.borderTop=e),n&&(this.borderRight=n),t&&(this.borderBottom=t),r&&(this.borderLeft=r)}innerWidth(){return this.width-2*this.padding-2}innerHeight(){return this.height-2*this.padding-2}textx(e){const{width:t,padding:r}=this;let{x:n}=this;return"left"===e?n+=r:"center"===e?n+=t/2:"right"===e&&(n+=t-r),n}texty(e,t){const{height:r,padding:n}=this;let{y:i}=this;return"top"===e?i+=n:"middle"===e?i+=r/2-t/2:"bottom"===e&&(i+=r-n-t),i}topxys(){const{x:e,y:t,width:r}=this;return[[e,t],[e+r,t]]}rightxys(){const{x:e,y:t,width:r,height:n}=this;return[[e+r,t],[e+r,t+n]]}bottomxys(){const{x:e,y:t,width:r,height:n}=this;return[[e,t+n],[e+r,t+n]]}leftxys(){const{x:e,y:t,height:r}=this;return[[e,t],[e,t+r]]}}function ze(e,t,r,n,i,o,a){const s={x:0,y:0};"underline"===e?s.y="bottom"===i?0:"top"===i?-(o+2):-o/2:"strike"===e&&("bottom"===i?s.y=o/2:"top"===i&&(s.y=-(o/2+2))),"center"===n?s.x=a/2:"right"===n&&(s.x=a),this.line([t-s.x,r-s.y],[t-s.x+a,r-s.y])}class Ue{constructor(e,t,r){this.el=e,this.ctx=e.getContext("2d"),this.resize(t,r),this.ctx.scale(De(),De())}resize(e,t){this.el.style.width=`${e}px`,this.el.style.height=`${t}px`,this.el.width=Fe(e),this.el.height=Fe(t)}clear(){const{width:e,height:t}=this.el;return this.ctx.clearRect(0,0,e,t),this}attr(e){return Object.assign(this.ctx,e),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(e,t){return this.ctx.translate(Fe(e),Fe(t)),this}scale(e,t){return this.ctx.scale(e,t),this}clearRect(e,t,r,n){return this.ctx.clearRect(e,t,r,n),this}fillRect(e,t,r,n){return this.ctx.fillRect(Fe(e)-.5,Fe(t)-.5,Fe(r),Fe(n)),this}fillText(e,t,r){return this.ctx.fillText(e,Fe(t),Fe(r)),this}text(e,t,r={},n=!0){const{ctx:i}=this,{align:o,valign:a,font:s,color:c,strike:l,underline:u}=r,f=t.textx(o);i.save(),i.beginPath(),this.attr({textAlign:o,textBaseline:a,font:`${s.italic?"italic":""} ${s.bold?"bold":""} ${Fe(s.size)}px ${s.name}`,fillStyle:c,strokeStyle:c});const h=`${e}`.split("\n"),d=t.innerWidth(),p=[];h.forEach((e=>{const t=i.measureText(e).width;if(n&&t>Fe(d)){let t={w:0,len:0,start:0};for(let r=0;r=Fe(d)&&(p.push(e.substr(t.start,t.len)),t={w:0,len:0,start:r}),t.len+=1,t.w+=i.measureText(e[r]).width+1;t.len>0&&p.push(e.substr(t.start,t.len))}else p.push(e)}));const m=(p.length-1)*(s.size+2);let b=t.texty(a,m);return p.forEach((e=>{const t=i.measureText(e).width;this.fillText(e,f,b),l&&ze.call(this,"strike",f,b,o,a,s.size,t),u&&ze.call(this,"underline",f,b,o,a,s.size,t),b+=s.size+2})),i.restore(),this}border(e,t){const{ctx:r}=this;return r.lineWidth=Ne,r.strokeStyle=t,"medium"===e?r.lineWidth=Fe(2)-.5:"thick"===e?r.lineWidth=Fe(3):"dashed"===e?r.setLineDash([Fe(3),Fe(2)]):"dotted"===e?r.setLineDash([Fe(1),Fe(1)]):"double"===e&&r.setLineDash([Fe(2),0]),this}line(...e){const{ctx:t}=this;if(e.length>1){t.beginPath();const[r,n]=e[0];t.moveTo(Le(r),Le(n));for(let r=1;r{const[r]=e;let n=e;if('"'===r)return e.substring(1);let i=1;if("-"===r&&(n=e.substring(1),i=-1),n[0]>="0"&&n[0]<="9")return i*Number(n);const[a,s]=o(n);return i*t(a,s)},Ve=(e,t,r,n=[])=>{if("="===e[0]){const i=(e=>{const t=[],r=[];let n=[],i=0,s="",c=1,l="";for(let u=0;u="a"&&f<="z")n.push(f.toUpperCase());else if(f>="0"&&f<="9"||f>="A"&&f<="Z"||"."===f)n.push(f);else if('"'===f){for(u+=1;'"'!==e.charAt(u);)n.push(e.charAt(u)),u+=1;r.push(`"${n.join("")}`),n=[]}else if("-"===f&&/[+\-*/,(]/.test(l))n.push(f);else{if("("!==f&&n.length>0&&r.push(n.join("")),")"===f){let e=t.pop();if(2===i)try{const[t,n]=o(r.pop()),[i,s]=o(r.pop());let c=0;for(let e=i;e<=t;e+=1)for(let t=s;t<=n;t+=1)r.push(a(e,t)),c+=1;r.push([e,c])}catch(e){}else if(1===i||3===i)3===i&&r.push(s),r.push([e,c]),c=1;else for(;"("!==e&&(r.push(e),!(t.length<=0));)e=t.pop();i=0}else if("="===f||">"===f||"<"===f){const t=e.charAt(u+1);s=f,"="!==t&&"-"!==t||(s+=t,u+=1),i=3}else if(":"===f)i=2;else if(","===f)3===i&&r.push(s),i=1,c+=1;else if("("===f&&n.length>0)t.push(n.join(""));else{if(t.length>0&&("+"===f||"-"===f)){let e=t[t.length-1];if("("!==e&&r.push(t.pop()),"*"===e||"/"===e)for(;t.length>0&&(e=t[t.length-1],"("!==e);)r.push(t.pop())}else if(t.length>0){const e=t[t.length-1];"*"!==e&&"/"!==e||r.push(t.pop())}t.push(f)}n=[]}l=f}}for(n.length>0&&r.push(n.join(""));t.length>0;)r.push(t.pop());return r})(e.substring(1));return i.length<=0?e:((e,t,r,n)=>{const i=[];for(let o=0;o"===s||"<"===s){let e=i.pop();Number.isNaN(e)||(e=Number(e));let t=i.pop();Number.isNaN(t)||(t=Number(t));let r=!1;"="===s?r=t===e:">"===a?r=t>e:">="===a?r=t>=e:"<"===a?r=t="a"&&s<="z"||s>="A"&&s<="Z")&&n.push(a),i.push($e(a,r)),n.pop()}}return i[0]})(i,t,((e,i)=>Ve(r(e,i),t,r,n)),n)}return e};var qe={render:Ve};const Xe=[{key:"SUM",title:E("formula.sum"),render:e=>e.reduce(((e,t)=>v("+",e,t)),0)},{key:"AVERAGE",title:E("formula.average"),render:e=>e.reduce(((e,t)=>Number(e)+Number(t)),0)/e.length},{key:"MAX",title:E("formula.max"),render:e=>Math.max(...e.map((e=>Number(e))))},{key:"MIN",title:E("formula.min"),render:e=>Math.min(...e.map((e=>Number(e))))},{key:"IF",title:E("formula._if"),render:([e,t,r])=>e?t:r},{key:"AND",title:E("formula.and"),render:e=>e.every((e=>e))},{key:"OR",title:E("formula.or"),render:e=>e.some((e=>e))},{key:"CONCAT",title:E("formula.concat"),render:e=>e.join("")}],Ge=Xe,Ye={};Xe.forEach((e=>{Ye[e.key]=e}));const Ke=e=>e,Ze=e=>{if(/^(-?\d*.?\d*)$/.test(e)){const t=Number(e).toFixed(2).toString(),[r,...n]=t.split("\\.");return[r.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...n]}return e},Je=[{key:"normal",title:E("format.normal"),type:"string",render:Ke},{key:"text",title:E("format.text"),type:"string",render:Ke},{key:"number",title:E("format.number"),type:"number",label:"1,000.12",render:Ze},{key:"percent",title:E("format.percent"),type:"number",label:"10.12%",render:e=>`${e}%`},{key:"rmb",title:E("format.rmb"),type:"number",label:"¥10.00",render:e=>`¥${Ze(e)}`},{key:"usd",title:E("format.usd"),type:"number",label:"$10.00",render:e=>`$${Ze(e)}`},{key:"eur",title:E("format.eur"),type:"number",label:"€10.00",render:e=>`€${Ze(e)}`},{key:"date",title:E("format.date"),type:"date",label:"26/09/2008",render:Ke},{key:"time",title:E("format.time"),type:"date",label:"15:59:00",render:Ke},{key:"datetime",title:E("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:Ke},{key:"duration",title:E("format.duration"),type:"date",label:"24:01:00",render:Ke}],Qe={};Je.forEach((e=>{Qe[e.key]=e}));const et=5,tt={fillStyle:"#f4f5f8"},rt={fillStyle:"#fff",lineWidth:Ne,strokeStyle:"#e6e6e6"};function nt(e,t,r,n=0){const{left:i,top:o,width:a,height:s}=e.cellRect(t,r);return new Be(i,o+n,a,s,et)}function it(e,t,r,n,i=0){const{sortedRowMap:o,rows:a,cols:s}=t;if(a.isHide(r)||s.isHide(n))return;let c=r;o.has(r)&&(c=o.get(r));const l=t.getCell(c,n);if(null===l)return;let u=!1;"editable"in l&&!1===l.editable&&(u=!0);const f=t.getCellStyleOrDefault(c,n),h=nt(t,r,n,i);h.bgcolor=f.bgcolor,void 0!==f.border&&(h.setBorders(f.border),e.strokeBorders(h)),e.rect(h,(()=>{let i="";i=t.settings.evalPaused?l.text||"":qe.render(l.text||"",Ye,((e,r)=>t.getCellTextOrDefault(r,e))),f.format&&(i=Qe[f.format].render(i));const o=Object.assign({},f.font);o.size=function(e){for(let t=0;t{const i=nt(t,e,n);r.dropdown(i)}))}}function at(e,t,r,n,i){const{draw:o,data:a}=this;o.save(),o.translate(t,r).translate(n,i);const{exceptRowSet:s}=a,c=a.exceptRowTotalHeight(e.sri,e.eri);o.save(),o.translate(0,-c),e.each(((e,t)=>{it(o,a,e,t)}),(e=>(e=>{const t=s.has(e);if(t){const t=a.rows.getHeight(e);o.translate(0,-t)}return!t})(e))),o.restore();const l=new Set;o.save(),o.translate(0,-c),a.eachMergesInView(e,(({sri:e,sci:t,eri:r})=>{if(s.has(e)){if(!l.has(e)){l.add(e);const t=a.rows.sumHeight(e,r+1);o.translate(0,-t)}}else it(o,a,e,t)})),o.restore(),ot.call(this,e),o.restore()}function st(e,t,r,n){const{draw:i}=this;i.save(),i.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(e,t,r,n),i.restore()}function ct(e,t,r,i,o,a){const{draw:s,data:c}=this,l=t.h,u=t.w,f=a+i,h=o+r;s.save(),s.attr(tt),"all"!==e&&"left"!==e||s.fillRect(0,f,r,l),"all"!==e&&"top"!==e||s.fillRect(h,0,u,i);const{sri:d,sci:p,eri:m,eci:b}=c.selector.range;s.attr({textAlign:"center",textBaseline:"middle",font:`500 ${Fe(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:Ne(),strokeStyle:"#e6e6e6"}),"all"!==e&&"left"!==e||(c.rowEach(t.sri,t.eri,((e,t,n)=>{const i=f+t,o=e;s.line([0,i],[r,i]),d<=o&&o0&&c.rows.isHide(e-1)&&(s.save(),s.attr({strokeStyle:"#c6c6c6"}),s.line([5,i+5],[r-5,i+5]),s.restore())})),s.line([0,l+f],[r,l+f]),s.line([r,f],[r,l+f])),"all"!==e&&"top"!==e||(c.colEach(t.sci,t.eci,((e,t,r)=>{const o=h+t,a=e;s.line([o,0],[o,i]),p<=a&&a0&&c.cols.isHide(e-1)&&(s.save(),s.attr({strokeStyle:"#c6c6c6"}),s.line([o+5,5],[o+5,i-5]),s.restore())})),s.line([u+h,0],[u+h,i]),s.line([0,i],[u+h,i])),s.restore()}function lt(e,t){const{draw:r}=this;r.save(),r.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,e,t),r.restore()}function ut({sri:e,sci:t,eri:r,eci:n,w:i,h:o},a,s,c,l){const{draw:u,data:f}=this,{settings:h}=f;u.save(),u.attr(rt).translate(a+c,s+l),h.showGrid?(f.rowEach(e,r,((t,n,o)=>{t!==e&&u.line([0,n],[i,n]),t===r&&u.line([0,n+o],[i,n+o])})),f.colEach(t,n,((e,r,i)=>{e!==t&&u.line([r,0],[r,o]),e===n&&u.line([r+i,0],[r+i,o])})),u.restore()):u.restore()}function ft(e,t,r,n){const{draw:i,data:o}=this,a=o.viewWidth()-e,s=o.viewHeight()-t;i.save().translate(e,t).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),i.line([0,n],[a,n]),i.line([r,0],[r,s]),i.restore()}class ht{constructor(e,t){this.el=e,this.draw=new Ue(e,t.viewWidth(),t.viewHeight()),this.data=t}resetData(e){this.data=e,this.render()}render(){const{data:e}=this,{rows:t,cols:r}=e,n=r.indexWidth,i=t.height;this.draw.resize(e.viewWidth(),e.viewHeight()),this.clear();const o=e.viewRange(),a=e.freezeTotalWidth(),s=e.freezeTotalHeight(),{x:c,y:l}=e.scroll;ut.call(this,o,n,i,a,s),at.call(this,o,n,i,-c,-l),ct.call(this,"all",o,n,i,a,s),lt.call(this,n,i);const[u,f]=e.freeze;if(u>0||f>0){if(u>0){const e=o.clone();e.sri=0,e.eri=u-1,e.h=s,ut.call(this,e,n,i,a,0),at.call(this,e,n,i,-c,0),ct.call(this,"top",e,n,i,a,0)}if(f>0){const e=o.clone();e.sci=0,e.eci=f-1,e.w=a,ut.call(this,e,n,i,0,s),ct.call(this,"left",e,n,i,0,s),at.call(this,e,n,i,0,-l)}const t=e.freezeViewRange();ut.call(this,t,n,i,0,0),ct.call(this,"all",t,n,i,0,0),at.call(this,t,n,i,0,0),ft.call(this,n,i,a,s)}}clear(){this.draw.clear()}}const dt=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],pt=["landscape","portrait"];function mt(e){return parseInt(96*e,10)}function bt(e){"cancel"===e?this.el.hide():this.toPrint()}function yt(e){const{paper:t}=this,{value:r}=e.target,n=dt[r];t.w=mt(n[1]),t.h=mt(n[2]),this.preview()}function vt(e){const{paper:t}=this,{value:r}=e.target,n=pt[r];t.orientation=n,this.preview()}const gt=[{key:"copy",title:E("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:E("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:E("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:E("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:E("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:E("contextmenu.insertRow")},{key:"insert-column",title:E("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:E("contextmenu.deleteRow")},{key:"delete-column",title:E("contextmenu.deleteColumn")},{key:"delete-cell-text",title:E("contextmenu.deleteCellText")},{key:"hide",title:E("contextmenu.hide")},{key:"divider"},{key:"validation",title:E("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:E("contextmenu.cellprintable")},{key:"cell-non-printable",title:E("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:E("contextmenu.celleditable")},{key:"cell-non-editable",title:E("contextmenu.cellnoneditable")}];function wt(e){return"divider"===e.key?t("div",`${K}-item divider`):t("div",`${K}-item`).on("click",(()=>{this.itemClick(e.key),this.hide()})).children(e.title(),t("div","label").child(e.label||""))}function _t(){return gt.map((e=>wt.call(this,e)))}class xt{constructor(e,t,r){this.tip=T(`toolbar.${e.replace(/-[a-z]/g,(e=>e[1].toUpperCase()))}`),t&&(this.tip+=` (${t})`),this.tag=e,this.shortcut=t,this.value=r,this.el=this.element(),this.change=()=>{}}element(){const{tip:e}=this;return t("div",`${K}-toolbar-btn`).on("mouseenter",(r=>{!function(e,r){if(r.classList.contains("active"))return;const{left:n,top:i,width:o,height:a}=r.getBoundingClientRect(),s=t("div",`${K}-tooltip`).html(e).show();document.body.appendChild(s.el);const c=s.box();s.css("left",n+o/2-c.width/2+"px").css("top",`${i+a+2}px`),W(r,"mouseleave",(()=>{document.body.contains(s.el)&&document.body.removeChild(s.el)})),W(r,"click",(()=>{document.body.contains(s.el)&&document.body.removeChild(s.el)}))}(e,r.target)})).attr("data-tooltip",e)}setState(){}}class kt extends xt{dropdown(){}getValue(e){return e}element(){const{tag:e}=this;return this.dd=this.dropdown(),this.dd.change=t=>this.change(e,this.getValue(t)),super.element().child(this.dd)}setState(e){e&&(this.value=e,this.dd.setTitle(e))}}class St extends e{constructor(e,r,n,i,...o){super("div",`${K}-dropdown ${i}`),this.title=e,this.change=()=>{},this.headerClick=()=>{},"string"==typeof e?this.title=t("div",`${K}-dropdown-title`).child(e):n&&this.title.addClass("arrow-left"),this.contentEl=t("div",`${K}-dropdown-content`).css("width",r).hide(),this.setContentChildren(...o),this.headerEl=t("div",`${K}-dropdown-header`),this.headerEl.on("click",(()=>{"block"!==this.contentEl.css("display")?this.show():this.hide()})).children(this.title,n?t("div",`${K}-icon arrow-right`).child(t("div",`${K}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...e){this.contentEl.html(""),e.length>0&&this.contentEl.children(...e)}setTitle(e){this.title.html(e),this.hide()}show(){const{contentEl:e}=this;e.show(),this.parent().active(),X(this.parent(),(()=>{this.hide()}))}hide(){this.parent().active(!1),this.contentEl.hide(),q(this.parent())}}class Tt extends St{constructor(e,r){super(new we(`align-${r}`),"auto",!0,"bottom-left",...e.map((e=>{return(r=`align-${e}`,t("div",`${K}-item`).child(new we(r))).on("click",(()=>{this.setTitle(e),this.change(e)}));var r})))}setTitle(e){this.title.setName(`align-${e}`),this.hide()}}class Et extends kt{constructor(e){super("align","",e)}dropdown(){const{value:e}=this;return new Tt(["left","center","right"],e)}}class Ot extends kt{constructor(e){super("valign","",e)}dropdown(){const{value:e}=this;return new Tt(["top","middle","bottom"],e)}}class Ct extends xt{element(){const{tag:e}=this;return super.element().child(new we(e)).on("click",(()=>this.click()))}click(){this.change(this.tag,this.toggle())}setState(e){this.el.active(e)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class Rt extends Ct{constructor(){super("autofilter")}setState(){}}class At extends Ct{constructor(){super("font-bold","Ctrl+B")}}class Mt extends Ct{constructor(){super("font-italic","Ctrl+I")}}class Pt extends Ct{constructor(){super("strike","Ctrl+U")}}class jt extends Ct{constructor(){super("underline","Ctrl+U")}}const It=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],Dt=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],Nt=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function Ft(e){return t("td","").child(t("div",`${K}-color-palette-cell`).on("click.stop",(()=>this.change(e))).css("background-color",e))}class Lt{constructor(){this.el=t("div",`${K}-color-palette`),this.change=()=>{};const e=t("table","").children(t("tbody","").children(t("tr",`${K}-theme-color-placeholders`).children(...It.map((e=>Ft.call(this,e)))),...Dt.map((e=>t("tr",`${K}-theme-colors`).children(...e.map((e=>Ft.call(this,e)))))),t("tr",`${K}-standard-colors`).children(...Nt.map((e=>Ft.call(this,e))))));this.el.child(e)}}class Bt extends St{constructor(e,t){const r=new we(e).css("height","16px").css("border-bottom",`3px solid ${t}`),n=new Lt;n.change=e=>{this.setTitle(e),this.change(e)},super(r,"auto",!1,"bottom-left",n.el)}setTitle(e){this.title.css("border-color",e),this.hide()}}const zt=[["thin",''],["medium",''],["thick",''],["dashed",''],["dotted",'']];class Ut extends St{constructor(e){const r=new we("line-type");let n=0;const i=zt.map(((r,o)=>t("div",`${K}-item state ${e===r[0]?"checked":""}`).on("click",(()=>{i[n].toggle("checked"),i[o].toggle("checked"),n=o,this.hide(),this.change(r)})).child(t("div",`${K}-line-type`).html(r[1]))));super(r,"auto",!1,"bottom-left",...i)}}function Ht(...e){return t("table","").child(t("tbody","").children(...e))}function Wt(e){return t("td","").child(t("div",`${K}-border-palette-cell`).child(new we(`border-${e}`)).on("click",(()=>{this.mode=e;const{mode:t,style:r,color:n}=this;this.change({mode:t,style:r,color:n})})))}class $t{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new Bt("line-color",this.color),this.ddColor.change=e=>{this.color=e},this.ddType=new Ut(this.style),this.ddType.change=([e])=>{this.style=e},this.el=t("div",`${K}-border-palette`);const e=Ht(t("tr","").children(t("td",`${K}-border-palette-left`).child(Ht(t("tr","").children(...["all","inside","horizontal","vertical","outside"].map((e=>Wt.call(this,e)))),t("tr","").children(...["left","top","right","bottom","none"].map((e=>Wt.call(this,e)))))),t("td",`${K}-border-palette-right`).children(t("div",`${K}-toolbar-btn`).child(this.ddColor.el),t("div",`${K}-toolbar-btn`).child(this.ddType.el))));this.el.child(e)}}class Vt extends St{constructor(){const e=new we("border-all"),t=new $t;t.change=e=>{this.change(e),this.hide()},super(e,"auto",!1,"bottom-left",t.el)}}class qt extends kt{constructor(){super("border")}dropdown(){return new Vt}}class Xt extends xt{element(){return super.element().child(new we(this.tag)).on("click",(()=>this.change(this.tag)))}setState(e){this.el.disabled(e)}}class Gt extends Xt{constructor(){super("clearformat")}}class Yt extends Ct{constructor(){super("paintformat")}setState(){}}class Kt extends kt{constructor(e){super("color",void 0,e)}dropdown(){const{tag:e,value:t}=this;return new Bt(e,t)}}class Zt extends kt{constructor(e){super("bgcolor",void 0,e)}dropdown(){const{tag:e,value:t}=this;return new Bt(e,t)}}class Jt extends St{constructor(){super("10","60px",!0,"bottom-left",...We.map((e=>t("div",`${K}-item`).on("click",(()=>{this.setTitle(`${e.pt}`),this.change(e)})).child(`${e.pt}`))))}}let Qt=class extends kt{constructor(){super("font-size")}getValue(e){return e.pt}dropdown(){return new Jt}};class er extends St{constructor(){const e=He.map((e=>t("div",`${K}-item`).on("click",(()=>{this.setTitle(e.title),this.change(e)})).child(e.title)));super(He[0].title,"160px",!0,"bottom-left",...e)}}class tr extends kt{constructor(){super("font-name")}getValue(e){return e.key}dropdown(){return new er}}class rr extends St{constructor(){let e=Je.slice(0);e.splice(2,0,{key:"divider"}),e.splice(8,0,{key:"divider"}),e=e.map((e=>{const r=t("div",`${K}-item`);return"divider"===e.key?r.addClass("divider"):(r.child(e.title()).on("click",(()=>{this.setTitle(e.title()),this.change(e)})),e.label&&r.child(t("div","label").html(e.label))),r})),super("Normal","220px",!0,"bottom-left",...e)}setTitle(e){for(let t=0;tt("div",`${K}-item`).on("click",(()=>{this.hide(),this.change(e)})).child(e.key)));super(new we("formula"),"180px",!0,"bottom-left",...e)}}class or extends kt{constructor(){super("formula")}getValue(e){return e.key}dropdown(){return new ir}}class ar extends Ct{constructor(){super("freeze")}}class sr extends Ct{constructor(){super("merge")}setState(e,t){this.el.active(e).disabled(t)}}class cr extends Xt{constructor(){super("redo","Ctrl+Y")}}class lr extends Xt{constructor(){super("undo","Ctrl+Z")}}class ur extends Xt{constructor(){super("print","Ctrl+P")}}class fr extends Ct{constructor(){super("textwrap")}}let hr=class extends St{constructor(){const e=new we("ellipsis"),r=t("div",`${K}-toolbar-more`);super(e,"auto",!1,"bottom-right",r),this.moreBtns=r,this.contentEl.css("max-width","420px")}};class dr extends kt{constructor(){super("more"),this.el.hide()}dropdown(){return new hr}show(){this.el.show()}hide(){this.el.hide()}}function pr(){return t("div",`${K}-toolbar-divider`)}function mr(){this.btns2=[],this.items.forEach((e=>{if(Array.isArray(e))e.forEach((({el:e})=>{const t=e.box(),{marginLeft:r,marginRight:n}=e.computedStyle();this.btns2.push([e,t.width+parseInt(r,10)+parseInt(n,10)])}));else{const t=e.box(),{marginLeft:r,marginRight:n}=e.computedStyle();this.btns2.push([e,t.width+parseInt(r,10)+parseInt(n,10)])}}))}function br(){const{el:e,btns:t,moreEl:r,btns2:n}=this,{moreBtns:i,contentEl:o}=r.dd;e.css("width",this.widthFn()-60+"px");const a=e.box();let s=160,c=12;const l=[],u=[];n.forEach((([e,t],r)=>{s+=t,r===n.length-1||s0?r.show():r.hide()}class yr{constructor(e,r,n=!1){this.data=e,this.change=()=>{},this.widthFn=r,this.isHide=n;const i=e.defaultStyle();this.items=[[this.undoEl=new lr,this.redoEl=new cr,new ur,this.paintformatEl=new Yt,this.clearformatEl=new Gt],pr(),[this.formatEl=new nr],pr(),[this.fontEl=new tr,this.fontSizeEl=new Qt],pr(),[this.boldEl=new At,this.italicEl=new Mt,this.underlineEl=new jt,this.strikeEl=new Pt,this.textColorEl=new Kt(i.color)],pr(),[this.fillColorEl=new Zt(i.bgcolor),this.borderEl=new qt,this.mergeEl=new sr],pr(),[this.alignEl=new Et(i.align),this.valignEl=new Ot(i.valign),this.textwrapEl=new fr],pr(),[this.freezeEl=new ar,this.autofilterEl=new Rt,this.formulaEl=new or,this.moreEl=new dr]],this.el=t("div",`${K}-toolbar`),this.btns=t("div",`${K}-toolbar-btns`),this.items.forEach((e=>{Array.isArray(e)?e.forEach((e=>{this.btns.child(e.el),e.change=(...e)=>{this.change(...e)}})):this.btns.child(e.el)})),this.el.child(this.btns),n?this.el.hide():(this.reset(),setTimeout((()=>{mr.call(this),br.call(this)}),0),W(window,"resize",(()=>{br.call(this)})))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(e){this[`${e}El`].click()}resetData(e){this.data=e,this.reset()}reset(){if(this.isHide)return;const{data:e}=this,t=e.getSelectedCellStyle();this.undoEl.setState(!e.canUndo()),this.redoEl.setState(!e.canRedo()),this.mergeEl.setState(e.canUnmerge(),!e.selector.multiple()),this.autofilterEl.setState(!e.canAutofilter());const{font:r,format:n}=t;this.formatEl.setState(n),this.fontEl.setState(r.name),this.fontSizeEl.setState(r.size),this.boldEl.setState(r.bold),this.italicEl.setState(r.italic),this.underlineEl.setState(t.underline),this.strikeEl.setState(t.strike),this.textColorEl.setState(t.color),this.fillColorEl.setState(t.bgcolor),this.alignEl.setState(t.align),this.valignEl.setState(t.valign),this.textwrapEl.setState(t.textwrap),this.freezeEl.setState(e.freezeIsActive())}}class vr{constructor(e,r,n="600px"){this.title=e,this.el=t("div",`${K}-modal`).css("width",n).children(t("div",`${K}-modal-header`).children(new we("close").on("click.stop",(()=>this.hide())),this.title),t("div",`${K}-modal-content`).children(...r)).hide()}show(){this.dimmer=t("div",`${K}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:e,height:r}=this.el.show().box(),{clientHeight:n,clientWidth:i}=document.documentElement;this.el.offset({left:(i-e)/2,top:(n-r)/3}),window.xkeydownEsc=e=>{27===e.keyCode&&this.hide()},W(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),V(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class gr{constructor(e,r){this.vchange=()=>{},this.el=t("div",`${K}-form-input`),this.input=t("input","").css("width",e).on("input",(e=>this.vchange(e))).attr("placeholder",r),this.el.child(this.input)}focus(){setTimeout((()=>{this.input.el.focus()}),10)}hint(e){this.input.attr("placeholder",e)}val(e){return this.input.val(e)}}class wr{constructor(e,r,n,i=(e=>e),o=(()=>{})){this.key=e,this.getTitle=i,this.vchange=()=>{},this.el=t("div",`${K}-form-select`),this.suggest=new ge(r.map((e=>({key:e,title:this.getTitle(e)}))),(e=>{this.itemClick(e.key),o(e.key),this.vchange(e.key)}),n,this.el),this.el.children(this.itemEl=t("div","input-text").html(this.getTitle(e)),this.suggest.el).on("click",(()=>this.show()))}show(){this.suggest.search("")}itemClick(e){this.key=e,this.itemEl.html(this.getTitle(e))}val(e){return void 0!==e?(this.key=e,this.itemEl.html(this.getTitle(e)),this):this.key}}const _r={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class xr{constructor(e,r,n,i){this.label="",this.rule=r,n&&(this.label=t("label","label").css("width",`${i}px`).html(n)),this.tip=t("div","tip").child("tip").hide(),this.input=e,this.input.vchange=()=>this.validate(),this.el=t("div",`${K}-form-field`).children(this.label,e.el,this.tip)}isShow(){return"none"!==this.el.css("display")}show(){this.el.show()}hide(){return this.el.hide(),this}val(e){return this.input.val(e)}hint(e){this.input.hint(e)}validate(){const{input:e,rule:t,tip:r,el:n}=this,i=e.val();if(t.required&&/^\s*$/.test(i))return r.html(T("validation.required")),n.addClass("error"),!1;if(t.type||t.pattern){if(!(t.pattern||_r[t.type]).test(i))return r.html(T("validation.notMatch")),n.addClass("error"),!1}return n.removeClass("error"),!0}}class kr extends vr{constructor(){const e=new xr(new wr("cell",["cell"],"100%",(e=>T(`dataValidation.modeType.${e}`))),{required:!0},`${T("dataValidation.range")}:`,100),r=new xr(new gr("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),n=new xr(new wr("list",["list","number","date","phone","email"],"100%",(e=>T(`dataValidation.type.${e}`)),(e=>this.criteriaSelected(e))),{required:!0},`${T("dataValidation.criteria")}:`,100),i=new xr(new wr("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",(e=>T(`dataValidation.operator.${e}`)),(e=>this.criteriaOperatorSelected(e))),{required:!0}).hide(),o=new xr(new gr("70px","10"),{required:!0}).hide(),a=new xr(new gr("70px","100"),{required:!0,type:"number"}).hide(),s=new xr(new gr("120px","a,b,c"),{required:!0}),c=new xr(new gr("70px","10"),{required:!0,type:"number"}).hide();super(T("contextmenu.validation"),[t("div",`${K}-form-fields`).children(e.el,r.el),t("div",`${K}-form-fields`).children(n.el,i.el,o.el,a.el,c.el,s.el),t("div",`${K}-buttons`).children(new Ie("cancel").on("click",(()=>this.btnClick("cancel"))),new Ie("remove").on("click",(()=>this.btnClick("remove"))),new Ie("save","primary").on("click",(()=>this.btnClick("save"))))]),this.mf=e,this.rf=r,this.cf=n,this.of=i,this.minvf=o,this.maxvf=a,this.vf=c,this.svf=s,this.change=()=>{}}showVf(e){const t="date"===e?"2018-11-12":"10",{vf:r}=this;r.input.hint(t),r.show()}criteriaSelected(e){const{of:t,minvf:r,maxvf:n,vf:i,svf:o}=this;"date"===e||"number"===e?(t.show(),r.rule.type=e,n.rule.type=e,"date"===e?(r.hint("2018-11-12"),n.hint("2019-11-12")):(r.hint("10"),n.hint("100")),r.show(),n.show(),i.hide(),o.hide()):("list"===e?o.show():o.hide(),i.hide(),t.hide(),r.hide(),n.hide())}criteriaOperatorSelected(e){if(!e)return;const{minvf:t,maxvf:r,vf:n}=this;if("be"===e||"nbe"===e)t.show(),r.show(),n.hide();else{const e=this.cf.val();n.rule.type=e,"date"===e?n.hint("2018-11-12"):n.hint("10"),n.show(),t.hide(),r.hide()}}btnClick(e){if("cancel"===e)this.hide();else if("remove"===e)this.change("remove"),this.hide();else if("save"===e){const e=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let t=0;tthis.itemClick(e)))}function Er(e){const{filterbEl:r,filterValues:n}=this;r.html("");Object.keys(e).forEach(((i,o)=>{const a=e[i],s=n.includes(i)?"checked":"";r.child(t("div",`${K}-item state ${s}`).on("click.stop",(()=>this.filterClick(o,i))).children(""===i?T("filter.empty"):i,t("div","label").html(`(${a})`)))}))}function Or(){const{filterhEl:e,filterValues:t,values:r}=this;e.html(`${t.length} / ${r.length}`),e.checked(t.length===r.length)}class Cr{constructor(){this.filterbEl=t("div",`${K}-body`),this.filterhEl=t("div",`${K}-header state`).on("click.stop",(()=>this.filterClick(0,"all"))),this.el=t("div",`${K}-sort-filter`).children(this.sortAscEl=Tr.call(this,"asc"),this.sortDescEl=Tr.call(this,"desc"),Sr("divider"),t("div",`${K}-filter`).children(this.filterhEl,this.filterbEl),t("div",`${K}-buttons`).children(new Ie("cancel").on("click",(()=>this.btnClick("cancel"))),new Ie("ok","primary").on("click",(()=>this.btnClick("ok"))))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(e){if("ok"===e){const{ci:e,sort:t,filterValues:r}=this;this.ok&&this.ok(e,t,"in",r)}this.hide()}itemClick(e){this.sort=e;const{sortAscEl:t,sortDescEl:r}=this;t.checked("asc"===e),r.checked("desc"===e)}filterClick(e,r){const{filterbEl:n,filterValues:i,values:o}=this,a=n.children();if("all"===r)a.length===i.length?(this.filterValues=[],a.forEach((e=>t(e).checked(!1)))):(this.filterValues=Array.from(o),a.forEach((e=>t(e).checked(!0))));else{t(a[e]).toggle("checked")?i.push(r):i.splice(i.findIndex((e=>e===r)),1)}Or.call(this)}set(e,t,r,n){this.ci=e;const{sortAscEl:i,sortDescEl:o}=this;null!==n?(this.sort=n.order,i.checked(n.asc()),o.checked(n.desc())):(this.sortDesc=null,i.checked(!1),o.checked(!1)),this.values=Object.keys(t),this.filterValues=r?Array.from(r.value):Object.keys(t),Er.call(this,t,r),Or.call(this)}setOffset(e){this.el.offset(e).show();let t=1;X(this.el,(()=>{t<=0&&this.hide(),t-=1}))}show(){this.el.show()}hide(){this.el.hide(),q(this.el)}}function Rr(e,r){const n=t("div",`${K}-toast`),i=t("div",`${K}-dimmer active`);n.children(t("div",`${K}-toast-header`).children(new we("close").on("click.stop",(()=>(document.body.removeChild(n.el),void document.body.removeChild(i.el)))),e),t("div",`${K}-toast-content`).html(r)),document.body.appendChild(n.el),document.body.appendChild(i.el);const{width:o,height:a}=n.box(),{clientHeight:s,clientWidth:c}=document.documentElement;n.offset({left:(c-o)/2,top:(s-a)/3})}function Ar(e,t){let r;return(...n)=>{const i=this,o=n;r||(r=setTimeout((()=>{r=null,e.apply(i,o)}),t))}}function Mr(){const{data:e,verticalScrollbar:t,horizontalScrollbar:r}=this,{l:n,t:i,left:o,top:a,width:s,height:c}=e.getSelectedRect(),l=this.getTableOffset();if(Math.abs(o)+s>l.width)r.move({left:n+s-l.width});else{const t=e.freezeTotalWidth();ol.height)t.move({top:i+c-l.height-1});else{const r=e.freezeTotalHeight();a0&&(s-=1):"right"===t?(l!==s&&(s=l),s0&&(a-=1):"down"===t?(c!==a&&(a=c),ac.indexWidth&&r>s.height)return n.hide(),void i.hide();const l=o.box(),u=a.getCellRectByXY(e.offsetX,e.offsetY);u.ri>=0&&-1===u.ci?(u.width=c.indexWidth,n.show(u,{width:l.width}),s.isHide(u.ri-1)?n.showUnhide(u.ri):n.hideUnhide()):n.hide(),-1===u.ri&&u.ci>=0?(u.height=s.height,i.show(u,{height:l.height}),c.isHide(u.ci-1)?i.showUnhide(u.ci):i.hideUnhide()):i.hide()}function Dr(e){const{verticalScrollbar:t,horizontalScrollbar:r,data:n}=this,{top:i}=t.scroll(),{left:o}=r.scroll(),{rows:a,cols:s}=n,{deltaY:c,deltaX:l}=e,u=(e,t)=>{let r=e,n=0;do{n=t(r),r+=1}while(n<=0);return n},f=e=>{if(e>0){const e=n.scroll.ri+1;if(ea.getHeight(e)));t.move({top:i+r-1})}}else{const e=n.scroll.ri-1;if(e>=0){const r=u(e,(e=>a.getHeight(e)));t.move({top:0===e?0:i-r})}}},h=Math.abs(c),d=Math.abs(l),p=Math.max(h,d);/Firefox/i.test(window.navigator.userAgent)&&Ar(f(e.detail),50),p===d&&Ar((e=>{if(e>0){const e=n.scroll.ci+1;if(es.getWidth(e)));r.move({left:o+t-1})}}else{const e=n.scroll.ci-1;if(e>=0){const t=u(e,(e=>s.getWidth(e)));r.move({left:0===e?0:o-t})}}})(l),50),p===h&&Ar(f(c),50)}function Nr(e,t){const{verticalScrollbar:r,horizontalScrollbar:n}=this,{top:i}=r.scroll(),{left:o}=n.scroll();"left"===e||"right"===e?n.move({left:o-t}):"up"!==e&&"down"!==e||r.move({top:i-t})}function Fr(){const{data:e,verticalScrollbar:t}=this,{height:r}=this.getTableOffset(),n=e.exceptRowTotalHeight(0,-1);t.set(r,e.rows.totalHeight()-n)}function Lr(){const{data:e,horizontalScrollbar:t}=this,{width:r}=this.getTableOffset();e&&t.set(r,e.cols.totalWidth())}function Br(){const{selector:e,data:t,editor:r}=this,[n,i]=t.freeze;if(n>0||i>0){const e=t.freezeTotalWidth(),n=t.freezeTotalHeight();r.setFreezeLengths(e,n)}e.resetAreaOffset()}function zr(){const{tableEl:e,overlayerEl:t,overlayerCEl:r,table:n,toolbar:i,selector:o,el:a}=this,s=this.getTableOffset(),c=this.getRect();e.attr(c),t.offset(c),r.offset(s),a.css("width",`${c.width}px`),Fr.call(this),Lr.call(this),Br.call(this),n.render(),i.reset(),o.reset()}function Ur(){const{data:e,selector:t}=this;e.clearClipboard(),t.hideClipboard()}function Hr(){const{data:e,selector:t}=this;e.copy(),e.copyToSystemClipboard(),t.showClipboard()}function Wr(){const{data:e,selector:t}=this;e.cut(),t.showClipboard()}function $r(e,t){const{data:r}=this;if("read"!==r.settings.mode)if(r.paste(e,(e=>Rr("Tip",e))))zr.call(this);else if(t){const e=t.clipboardData.getData("text/plain");this.data.pasteFromText(e),zr.call(this)}}function Vr(){this.data.hideRowsOrCols(),zr.call(this)}function qr(e,t){this.data.unhideRowsOrCols(e,t),zr.call(this)}function Xr(){const{data:e}=this;e.autofilter(),zr.call(this)}function Gr(){const{toolbar:e}=this;e.paintformatActive()&&($r.call(this,"format"),Ur.call(this),e.paintformatToggle())}function Yr(e){const{selector:t,data:r,table:n,sortFilter:i}=this,{offsetX:o,offsetY:a}=e,s=e.target.className===`${K}-selector-corner`,c=r.getCellRectByXY(o,a),{left:l,top:u,width:f,height:h}=c;let{ri:d,ci:p}=c;const{autoFilter:m}=r;if(m.includes(d,p)&&l+f-20r.rows.getCell(e,t)));return i.hide(),i.set(p,e,m.getFilter(p),m.getSort(p)),void i.setOffset({left:l,top:u+h+2})}e.shiftKey||(s?t.showAutofill(d,p):Pr.call(this,!1,d,p),G(window,(e=>{({ri:d,ci:p}=r.getCellRectByXY(e.offsetX,e.offsetY)),s?t.showAutofill(d,p):1!==e.buttons||e.shiftKey||Pr.call(this,!0,d,p,!0,!0)}),(()=>{s&&t.arange&&"read"!==r.settings.mode&&r.autofill(t.arange,"all",(e=>Rr("Tip",e)))&&n.render(),t.hideAutofill(),Gr.call(this)}))),s||1!==e.buttons||e.shiftKey&&Pr.call(this,!0,d,p)}function Kr(){const{editor:e,data:t}=this,r=t.getSelectedRect(),n=this.getTableOffset();let i="top";r.top>n.height/2&&(i="bottom"),e.setOffset(r,i)}function Zr(){const{editor:e,data:t}=this;"read"!==t.settings.mode&&(Kr.call(this),e.setCell(t.getSelectedCell(),t.getSelectedValidator()),Ur.call(this))}function Jr(e){const{data:t,table:r,selector:n}=this;t.scrolly(e,(()=>{n.resetBRLAreaOffset(),Kr.call(this),r.render()}))}function Qr(e){const{data:t,table:r,selector:n}=this;t.scrollx(e,(()=>{n.resetBRTAreaOffset(),Kr.call(this),r.render()}))}function en(e,t){const{ri:r}=e,{table:n,selector:i,data:o}=this;o.rows.setHeight(r,t),n.render(),i.resetAreaOffset(),Fr.call(this),Kr.call(this)}function tn(e,t){const{ci:r}=e,{table:n,selector:i,data:o}=this;o.cols.setWidth(r,t),n.render(),i.resetAreaOffset(),Lr.call(this),Kr.call(this)}function rn(e,t="finished"){const{data:r,table:n}=this;if("read"===r.settings.mode)return;r.setSelectedCellText(e,t);const{ri:i,ci:o}=r.selector;"finished"===t?n.render():this.trigger("cell-edited",e,i,o)}function nn(e){const{data:t}=this;"read"!==t.settings.mode&&("insert-row"===e?t.insert("row"):"delete-row"===e?t.delete("row"):"insert-column"===e?t.insert("column"):"delete-column"===e?t.delete("column"):"delete-cell"===e?t.deleteCell():"delete-cell-format"===e?t.deleteCell("format"):"delete-cell-text"===e?t.deleteCell("text"):"cell-printable"===e?t.setSelectedCellAttr("printable",!0):"cell-non-printable"===e?t.setSelectedCellAttr("printable",!1):"cell-editable"===e?t.setSelectedCellAttr("editable",!0):"cell-non-editable"===e&&t.setSelectedCellAttr("editable",!1),Ur.call(this),zr.call(this))}function on(e,t){const{data:r}=this;if("undo"===e)this.undo();else if("redo"===e)this.redo();else if("print"===e)this.print.preview();else if("paintformat"===e)!0===t?Hr.call(this):Ur.call(this);else if("clearformat"===e)nn.call(this,"delete-cell-format");else if("link"===e);else if("chart"===e);else if("autofilter"===e)Xr.call(this);else if("freeze"===e)if(t){const{ri:e,ci:t}=r.selector;this.freeze(e,t)}else this.freeze(0,0);else r.setSelectedCellAttr(e,t),"formula"!==e||r.selector.multiple()||Zr.call(this),zr.call(this)}function an(e,t,r,n){this.data.setAutoFilter(e,t,r,n),zr.call(this)}function sn(){const{selector:e,overlayerEl:t,rowResizer:r,colResizer:n,verticalScrollbar:i,horizontalScrollbar:o,editor:a,contextMenu:s,toolbar:c,modalValidation:l,sortFilter:u}=this;t.on("mousemove",(e=>{Ir.call(this,e)})).on("mousedown",(e=>{a.clear(),s.hide(),2===e.buttons?(this.data.xyInSelectedRect(e.offsetX,e.offsetY)||Yr.call(this,e),s.setPosition(e.offsetX,e.offsetY),e.stopPropagation()):2===e.detail?Zr.call(this):Yr.call(this,e)})).on("mousewheel.stop",(e=>{Dr.call(this,e)})).on("mouseout",(e=>{const{offsetX:t,offsetY:i}=e;i<=0&&n.hide(),t<=0&&r.hide()})),e.inputChange=e=>{rn.call(this,e,"input"),Zr.call(this)},function(e,{move:t,end:r}){let n=0,i=0;W(e,"touchstart",(e=>{const{pageX:t,pageY:r}=e.touches[0];n=t,i=r})),W(e,"touchmove",(e=>{if(!t)return;const{pageX:r,pageY:o}=e.changedTouches[0],a=r-n,s=o-i;(Math.abs(a)>10||Math.abs(s)>10)&&(Y(a,s,e,t),n=r,i=o),e.preventDefault()})),W(e,"touchend",(e=>{if(!r)return;const{pageX:t,pageY:o}=e.changedTouches[0];Y(t-n,o-i,e,r)}))}(t.el,{move:(e,t)=>{Nr.call(this,e,t)}}),c.change=(e,t)=>on.call(this,e,t),u.ok=(e,t,r,n)=>an.call(this,e,t,r,n),r.finishedFn=(e,t)=>{en.call(this,e,t)},n.finishedFn=(e,t)=>{tn.call(this,e,t)},r.unhideFn=e=>{qr.call(this,"row",e)},n.unhideFn=e=>{qr.call(this,"col",e)},i.moveFn=(e,t)=>{Jr.call(this,e,t)},o.moveFn=(e,t)=>{Qr.call(this,e,t)},a.change=(e,t)=>{rn.call(this,t,e)},l.change=(e,...t)=>{"save"===e?this.data.addValidation(...t):this.data.removeValidation()},s.itemClick=e=>{"validation"===e?l.setValue(this.data.getSelectedValidation()):"copy"===e?Hr.call(this):"cut"===e?Wr.call(this):"paste"===e?$r.call(this,"all"):"paste-value"===e?$r.call(this,"text"):"paste-format"===e?$r.call(this,"format"):"hide"===e?Vr.call(this):nn.call(this,e)},W(window,"resize",(()=>{this.reload()})),W(window,"click",(e=>{this.focusing=t.contains(e.target)})),W(window,"paste",(e=>{this.focusing&&($r.call(this,"all",e),e.preventDefault())})),W(window,"keydown",(e=>{if(!this.focusing)return;const t=e.keyCode||e.which,{key:r,ctrlKey:n,shiftKey:i,metaKey:o}=e;if(n||o)switch(t){case 90:this.undo(),e.preventDefault();break;case 89:this.redo(),e.preventDefault();break;case 67:Hr.call(this),e.preventDefault();break;case 88:Wr.call(this),e.preventDefault();break;case 85:c.trigger("underline"),e.preventDefault();break;case 86:break;case 37:jr.call(this,i,"row-first"),e.preventDefault();break;case 38:jr.call(this,i,"col-first"),e.preventDefault();break;case 39:jr.call(this,i,"row-last"),e.preventDefault();break;case 40:jr.call(this,i,"col-last"),e.preventDefault();break;case 32:Pr.call(this,!1,-1,this.data.selector.ci,!1),e.preventDefault();break;case 66:c.trigger("bold");break;case 73:c.trigger("italic")}else{switch(t){case 32:i&&Pr.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:s.hide(),Ur.call(this);break;case 37:jr.call(this,i,"left"),e.preventDefault();break;case 38:jr.call(this,i,"up"),e.preventDefault();break;case 39:jr.call(this,i,"right"),e.preventDefault();break;case 40:jr.call(this,i,"down"),e.preventDefault();break;case 9:a.clear(),jr.call(this,!1,i?"left":"right"),e.preventDefault();break;case 13:a.clear(),jr.call(this,!1,i?"up":"down"),e.preventDefault();break;case 8:nn.call(this,"delete-cell-text"),e.preventDefault()}"Delete"===r?(nn.call(this,"delete-cell-text"),e.preventDefault()):t>=65&&t<=90||t>=48&&t<=57||t>=96&&t<=105||"="===e.key?(rn.call(this,e.key,"input"),Zr.call(this)):113===t&&Zr.call(this)}}))}class cn{constructor(e,r){this.eventMap=function(){const e=new Map;function t(t,r){return e.has(t)&&(()=>{const n=e.get(t);return Array.isArray(n)&&n.push(r)||!1})()||e.set(t,[].concat(r))}function r(t,r){return e.has(t)&&(()=>{const n=e.get(t),i=n.indexOf(r);return i>=0&&n.splice(i,1)&&0===e.get(t).length&&e.delete(t)})()}return{get current(){return e},on:t,once:function(e,n){const i=(...t)=>{n.call(null,...t),r(e,i)};return t(e,i)},fire:function(t,r){return e.has(t)&&(()=>{const n=e.get(t);for(const e of n)e.call(null,...r)})()},removeListener:r,removeAllListeners:function(){e.clear()}}}();const{view:n,showToolbar:i,showContextmenu:o}=r.settings;this.el=t("div",`${K}-sheet`),this.toolbar=new yr(r,n.width,!i),this.print=new class{constructor(e){this.paper={w:mt(dt[0][1]),h:mt(dt[0][2]),padding:50,orientation:pt[0],get width(){return"landscape"===this.orientation?this.h:this.w},get height(){return"landscape"===this.orientation?this.w:this.h}},this.data=e,this.el=t("div",`${K}-print`).children(t("div",`${K}-print-bar`).children(t("div","-title").child("Print settings"),t("div","-right").children(t("div",`${K}-buttons`).children(new Ie("cancel").on("click",bt.bind(this,"cancel")),new Ie("next","primary").on("click",bt.bind(this,"next"))))),t("div",`${K}-print-content`).children(this.contentEl=t("div","-content"),t("div","-sider").child(t("form","").children(t("fieldset","").children(t("label","").child(`${T("print.size")}`),t("select","").children(...dt.map(((e,r)=>t("option","").attr("value",r).child(`${e[0]} ( ${e[1]}''x${e[2]}'' )`)))).on("change",yt.bind(this))),t("fieldset","").children(t("label","").child(`${T("print.orientation")}`),t("select","").children(...pt.map(((e,r)=>t("option","").attr("value",r).child(`${T("print.orientations")[r]}`)))).on("change",vt.bind(this))))))).hide()}resetData(e){this.data=e}preview(){const{data:e,paper:r}=this,{width:n,height:i,padding:o}=r,a=n-2*o,s=i-2*o,c=e.contentRange(),l=parseInt(c.h/s,10)+1,u=a/c.w;let f=o;const h=o;u>1&&(f+=(a-c.w)/2);let d=0,p=0;this.contentEl.html(""),this.canvases=[];const m={sri:0,sci:0,eri:0,eci:0};for(let r=0;r{it(b,e,t,r,y)})),b.restore(),m.sri=m.eri,m.sci=m.eci,p+=o,this.contentEl.child(t("div",`${K}-canvas-card-wraper`).child(a.child(l)))}this.el.show()}toPrint(){this.el.hide();const{paper:e}=this,r=t("iframe","").hide(),{el:n}=r;window.document.body.appendChild(n);const{contentWindow:i}=n,o=i.document,a=document.createElement("style");a.innerHTML=`\n @page { size: ${e.width}px ${e.height}px; };\n canvas {\n page-break-before: auto; \n page-break-after: always;\n image-rendering: pixelated;\n };\n `,o.head.appendChild(a),this.canvases.forEach((e=>{const t=e.cloneNode(!1);t.getContext("2d").drawImage(e,0,0),o.body.appendChild(t)})),i.print()}}(r),e.children(this.toolbar.el,this.el,this.print.el),this.data=r,this.tableEl=t("canvas",`${K}-table`),this.rowResizer=new Z(!1,r.rows.height),this.colResizer=new Z(!0,r.cols.minWidth),this.verticalScrollbar=new J(!0),this.horizontalScrollbar=new J(!1),this.editor=new je(Ge,(()=>this.getTableOffset()),r.rows.height),this.modalValidation=new kr,this.contextMenu=new class{constructor(e,r=!1){this.menuItems=_t.call(this),this.el=t("div",`${K}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=e,this.itemClick=()=>{},this.isHide=r,this.setMode("range")}setMode(e){const t=this.menuItems[12];"row-col"===e?t.show():t.hide()}hide(){const{el:e}=this;e.hide(),q(e)}setPosition(e,t){if(this.isHide)return;const{el:r}=this,{width:n}=r.show().offset(),i=this.viewFn(),o=i.height/2;let a=e;i.width-e<=n&&(a-=n),r.css("left",`${a}px`),t>o?r.css("bottom",i.height-t+"px").css("max-height",`${t}px`).css("top","auto"):r.css("top",`${t}px`).css("max-height",i.height-t+"px").css("bottom","auto"),X(r)}}((()=>this.getRect()),!o),this.selector=new pe(r),this.overlayerCEl=t("div",`${K}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=t("div",`${K}-overlayer`).child(this.overlayerCEl),this.sortFilter=new Cr,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new ht(this.tableEl.el,r),sn.call(this),zr.call(this),Pr.call(this,!1,0,0)}on(e,t){return this.eventMap.on(e,t),this}trigger(e,...t){const{eventMap:r}=this;r.fire(e,t)}resetData(e){this.editor.clear(),this.data=e,Fr.call(this),Lr.call(this),this.toolbar.resetData(e),this.print.resetData(e),this.selector.resetData(e),this.table.resetData(e)}loadData(e){return this.data.setData(e),zr.call(this),this}freeze(e,t){const{data:r}=this;return r.setFreeze(e,t),zr.call(this),this}undo(){this.data.undo(),zr.call(this)}redo(){this.data.redo(),zr.call(this)}reload(){return zr.call(this),this}getRect(){const{data:e}=this;return{width:e.viewWidth(),height:e.viewHeight()}}getTableOffset(){const{rows:e,cols:t}=this.data,{width:r,height:n}=this.getRect();return{width:r-t.indexWidth,height:n-e.height,left:t.indexWidth,top:e.height}}}class ln extends St{constructor(e){super(new we("ellipsis"),"auto",!1,"top-left"),this.contentClick=e}reset(e){const r=e.map(((e,r)=>t("div",`${K}-item`).css("width","150px").css("font-weight","normal").on("click",(()=>{this.contentClick(r),this.hide()})).child(e)));this.setContentChildren(...r)}setTitle(){}}const un=[{key:"delete",title:E("contextmenu.deleteSheet")}];function fn(e){return t("div",`${K}-item`).child(e.title()).on("click",(()=>{this.itemClick(e.key),this.hide()}))}function hn(){return un.map((e=>fn.call(this,e)))}class dn{constructor(){this.el=t("div",`${K}-contextmenu`).css("width","160px").children(...hn.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:e}=this;e.hide(),q(e)}setOffset(e){const{el:t}=this;t.offset(e),t.show(),X(t)}}class pn{constructor(e=(()=>{}),r=(()=>{}),n=(()=>{}),i=(()=>{})){this.swapFunc=r,this.updateFunc=i,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new ln((e=>{this.clickSwap2(this.items[e])})),this.contextMenu=new dn,this.contextMenu.itemClick=n,this.el=t("div",`${K}-bottombar`).children(this.contextMenu.el,this.menuEl=t("ul",`${K}-menu`).child(t("li","").children(new we("add").on("click",(()=>{e()})),t("span","").child(this.moreEl))))}addItem(e,r){this.dataNames.push(e);const n=t("li",r?"active":"").child(e);n.on("click",(()=>{this.clickSwap2(n)})).on("contextmenu",(e=>{const{offsetLeft:t,offsetHeight:r}=e.target;this.contextMenu.setOffset({left:t,bottom:r+1}),this.deleteEl=n})).on("dblclick",(()=>{const e=n.html(),t=new gr("auto","");t.val(e),t.input.on("blur",(({target:t})=>{const{value:r}=t,n=this.dataNames.findIndex((t=>t===e));this.renameItem(n,r)})),n.html("").child(t.el),t.focus()})),r&&this.clickSwap(n),this.items.push(n),this.menuEl.child(n),this.moreEl.reset(this.dataNames)}renameItem(e,t){this.dataNames.splice(e,1,t),this.moreEl.reset(this.dataNames),this.items[e].html("").child(t),this.updateFunc(e,t)}clear(){this.items.forEach((e=>{this.menuEl.removeChild(e.el)})),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:e,deleteEl:t}=this;if(this.items.length>1){const r=this.items.findIndex((e=>e===t));if(this.items.splice(r,1),this.dataNames.splice(r,1),this.menuEl.removeChild(t.el),this.moreEl.reset(this.dataNames),e===t){const[e]=this.items;return this.activeEl=e,this.activeEl.toggle(),[r,0]}return[r,-1]}return[-1]}clickSwap2(e){const t=this.items.findIndex((t=>t===e));this.clickSwap(e),this.activeEl.toggle(),this.swapFunc(t)}clickSwap(e){null!==this.activeEl&&this.activeEl.toggle(),this.activeEl=e}}!function(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&"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=e:i.appendChild(document.createTextNode(e))}}("body {\n margin: 0;\n}\n.x-spreadsheet {\n font-size: 13px;\n line-height: normal;\n user-select: none;\n -moz-user-select: none;\n font-family: 'Lato', 'Source Sans Pro', Roboto, Helvetica, Arial, sans-serif;\n box-sizing: content-box;\n background: #fff;\n -webkit-font-smoothing: antialiased;\n}\n.x-spreadsheet textarea {\n font: 400 13px Arial, 'Lato', 'Source Sans Pro', Roboto, Helvetica, sans-serif;\n}\n.x-spreadsheet-sheet {\n position: relative;\n overflow: hidden;\n}\n.x-spreadsheet-table {\n vertical-align: bottom;\n}\n.x-spreadsheet-tooltip {\n font-family: inherit;\n position: absolute;\n padding: 5px 10px;\n color: #fff;\n border-radius: 1px;\n background: #000000;\n font-size: 12px;\n z-index: 201;\n}\n.x-spreadsheet-tooltip:before {\n pointer-events: none;\n position: absolute;\n left: calc(50% - 4px);\n top: -4px;\n content: \"\";\n width: 8px;\n height: 8px;\n background: inherit;\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n z-index: 1;\n box-shadow: 1px 1px 3px -1px rgba(0, 0, 0, 0.3);\n}\n.x-spreadsheet-color-palette {\n padding: 5px;\n}\n.x-spreadsheet-color-palette table {\n margin: 0;\n padding: 0;\n border-collapse: separate;\n border-spacing: 2;\n background: #fff;\n}\n.x-spreadsheet-color-palette table td {\n margin: 0;\n cursor: pointer;\n border: 1px solid transparent;\n}\n.x-spreadsheet-color-palette table td:hover {\n border-color: #ddd;\n}\n.x-spreadsheet-color-palette table td .x-spreadsheet-color-palette-cell {\n width: 16px;\n height: 16px;\n}\n.x-spreadsheet-border-palette {\n padding: 6px;\n}\n.x-spreadsheet-border-palette table {\n margin: 0;\n padding: 0;\n border-collapse: separate;\n border-spacing: 0;\n background: #fff;\n table-layout: fixed;\n}\n.x-spreadsheet-border-palette table td {\n margin: 0;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left {\n border-right: 1px solid #eee;\n padding-right: 6px;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell {\n width: 30px;\n height: 30px;\n cursor: pointer;\n text-align: center;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell .x-spreadsheet-icon-img {\n opacity: 0.8;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell:hover {\n background-color: #eee;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right {\n padding-left: 6px;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-toolbar-btn {\n margin-top: 0;\n margin-bottom: 3px;\n}\n.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-line-type {\n position: relative;\n left: 0;\n top: -3px;\n}\n.x-spreadsheet-dropdown {\n position: relative;\n}\n.x-spreadsheet-dropdown .x-spreadsheet-dropdown-content {\n position: absolute;\n z-index: 200;\n background: #fff;\n box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);\n}\n.x-spreadsheet-dropdown.bottom-left .x-spreadsheet-dropdown-content {\n top: calc(100% + 5px);\n left: 0;\n}\n.x-spreadsheet-dropdown.bottom-right .x-spreadsheet-dropdown-content {\n top: calc(100% + 5px);\n right: 0;\n}\n.x-spreadsheet-dropdown.top-left .x-spreadsheet-dropdown-content {\n bottom: calc(100% + 5px);\n left: 0;\n}\n.x-spreadsheet-dropdown.top-right .x-spreadsheet-dropdown-content {\n bottom: calc(100% + 5px);\n right: 0;\n}\n.x-spreadsheet-dropdown .x-spreadsheet-dropdown-title {\n padding: 0 5px;\n display: inline-block;\n}\n.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-left {\n margin-left: 4px;\n}\n.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-right {\n width: 10px;\n margin-right: 4px;\n}\n.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-right .arrow-down {\n left: -130px;\n}\n/* resizer **/\n.x-spreadsheet-resizer {\n position: absolute;\n z-index: 11;\n}\n.x-spreadsheet-resizer .x-spreadsheet-resizer-hover {\n background-color: rgba(75, 137, 255, 0.25);\n}\n.x-spreadsheet-resizer .x-spreadsheet-resizer-line {\n position: absolute;\n}\n.x-spreadsheet-resizer.horizontal {\n cursor: row-resize;\n}\n.x-spreadsheet-resizer.horizontal .x-spreadsheet-resizer-line {\n border-bottom: 2px dashed #4b89ff;\n left: 0;\n bottom: 0;\n}\n.x-spreadsheet-resizer.vertical {\n cursor: col-resize;\n}\n.x-spreadsheet-resizer.vertical .x-spreadsheet-resizer-line {\n border-right: 2px dashed #4b89ff;\n top: 0;\n right: 0;\n}\n/* scrollbar */\n.x-spreadsheet-scrollbar {\n position: absolute;\n bottom: 0;\n right: 0;\n background-color: #f4f5f8;\n opacity: 0.9;\n z-index: 12;\n}\n.x-spreadsheet-scrollbar.horizontal {\n right: 15px;\n overflow-x: scroll;\n overflow-y: hidden;\n}\n.x-spreadsheet-scrollbar.horizontal > div {\n height: 1px;\n background: #ddd;\n}\n.x-spreadsheet-scrollbar.vertical {\n bottom: 15px;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.x-spreadsheet-scrollbar.vertical > div {\n width: 1px;\n background: #ddd;\n}\n/* @{css-prefix}-overlayer */\n.x-spreadsheet-overlayer {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 10;\n}\n.x-spreadsheet-overlayer .x-spreadsheet-overlayer-content {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n width: 100%;\n height: 100%;\n}\n.x-spreadsheet-editor,\n.x-spreadsheet-selector {\n box-sizing: content-box;\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n/* @{css-prefix}-selector */\n.x-spreadsheet-selector .hide-input {\n position: absolute;\n z-index: 0;\n}\n.x-spreadsheet-selector .hide-input input {\n padding: 0;\n width: 0;\n border: none!important;\n}\n.x-spreadsheet-selector .x-spreadsheet-selector-area {\n position: absolute;\n border: 2px solid #4b89ff;\n background: rgba(75, 137, 255, 0.1);\n z-index: 5;\n}\n.x-spreadsheet-selector .x-spreadsheet-selector-clipboard,\n.x-spreadsheet-selector .x-spreadsheet-selector-autofill {\n position: absolute;\n background: transparent;\n z-index: 100;\n}\n.x-spreadsheet-selector .x-spreadsheet-selector-clipboard {\n border: 2px dashed #4b89ff;\n}\n.x-spreadsheet-selector .x-spreadsheet-selector-autofill {\n border: 1px dashed rgba(0, 0, 0, 0.45);\n}\n.x-spreadsheet-selector .x-spreadsheet-selector-corner {\n pointer-events: auto;\n position: absolute;\n cursor: crosshair;\n font-size: 0;\n height: 5px;\n width: 5px;\n right: -5px;\n bottom: -5px;\n border: 2px solid #ffffff;\n background: #4b89ff;\n}\n.x-spreadsheet-editor {\n z-index: 20;\n}\n.x-spreadsheet-editor .x-spreadsheet-editor-area {\n position: absolute;\n text-align: left;\n border: 2px solid #4b89ff;\n line-height: 0;\n z-index: 100;\n pointer-events: auto;\n}\n.x-spreadsheet-editor .x-spreadsheet-editor-area textarea {\n box-sizing: content-box;\n border: none;\n padding: 0 3px;\n outline: none;\n resize: none;\n text-align: start;\n overflow-y: hidden;\n font: 400 13px Arial, 'Lato', 'Source Sans Pro', Roboto, Helvetica, sans-serif;\n color: inherit;\n white-space: normal;\n word-wrap: break-word;\n line-height: 22px;\n margin: 0;\n}\n.x-spreadsheet-editor .x-spreadsheet-editor-area .textline {\n overflow: hidden;\n visibility: hidden;\n position: fixed;\n top: 0;\n left: 0;\n}\n.x-spreadsheet-item {\n user-select: none;\n background: 0;\n border: 1px solid transparent;\n outline: none;\n height: 26px;\n color: rgba(0, 0, 0, 0.9);\n line-height: 26px;\n list-style: none;\n padding: 2px 10px;\n cursor: default;\n text-align: left;\n overflow: hidden;\n}\n.x-spreadsheet-item.disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n.x-spreadsheet-item:hover,\n.x-spreadsheet-item.active {\n background: rgba(0, 0, 0, 0.05);\n}\n.x-spreadsheet-item.divider {\n height: 0;\n padding: 0;\n margin: 5px 0;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n.x-spreadsheet-item .label {\n float: right;\n opacity: 0.65;\n font-size: 1em;\n}\n.x-spreadsheet-item.state,\n.x-spreadsheet-header.state {\n padding-left: 35px!important;\n position: relative;\n}\n.x-spreadsheet-item.state:before,\n.x-spreadsheet-header.state:before {\n content: '';\n position: absolute;\n width: 10px;\n height: 10px;\n left: 12px;\n top: calc(50% - 5px);\n background: rgba(0, 0, 0, 0.08);\n border-radius: 2px;\n}\n.x-spreadsheet-item.state.checked:before,\n.x-spreadsheet-header.state.checked:before {\n background: #4b89ff;\n}\n.x-spreadsheet-checkbox {\n position: relative;\n display: inline-block;\n backface-visibility: hidden;\n outline: 0;\n vertical-align: baseline;\n font-style: normal;\n font-size: 1rem;\n line-height: 1em;\n}\n.x-spreadsheet-checkbox > input {\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0!important;\n outline: 0;\n z-index: -1;\n}\n.x-spreadsheet-suggest,\n.x-spreadsheet-contextmenu,\n.x-spreadsheet-sort-filter {\n position: absolute;\n box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);\n background: #fff;\n z-index: 100;\n width: 260px;\n pointer-events: auto;\n overflow: auto;\n}\n.x-spreadsheet-suggest {\n width: 200px;\n}\n.x-spreadsheet-filter {\n border: 1px solid #e9e9e9;\n font-size: 12px;\n margin: 10px;\n}\n.x-spreadsheet-filter .x-spreadsheet-header {\n padding: 0.5em 0.75em;\n background: #f8f8f9;\n border-bottom: 1px solid #e9e9e9;\n border-left: 1px solid transparent;\n}\n.x-spreadsheet-filter .x-spreadsheet-body {\n height: 200px;\n overflow-y: auto;\n}\n.x-spreadsheet-filter .x-spreadsheet-body .x-spreadsheet-item {\n height: 20px;\n line-height: 20px;\n}\n.x-spreadsheet-sort-filter .x-spreadsheet-buttons {\n margin: 10px;\n}\n.x-spreadsheet-toolbar,\n.x-spreadsheet-bottombar {\n height: 40px;\n padding: 0 30px;\n text-align: left;\n background: #f5f6f7;\n display: flex;\n}\n.x-spreadsheet-bottombar {\n position: relative;\n border-top: 1px solid #e0e2e4;\n}\n.x-spreadsheet-bottombar .x-spreadsheet-menu > li {\n line-height: 40px;\n height: 40px;\n padding-top: 0;\n padding-bottom: 0;\n vertical-align: middle;\n border-right: 1px solid #e8eaed;\n}\n.x-spreadsheet-menu {\n list-style: none;\n margin: 0;\n padding: 0;\n user-select: none;\n}\n.x-spreadsheet-menu > li {\n float: left;\n line-height: 1.25em;\n padding: 0.785em 1em;\n margin: 0;\n vertical-align: middle;\n text-align: left;\n font-weight: 400;\n color: #80868b;\n white-space: nowrap;\n cursor: pointer;\n transition: all 0.3s;\n font-weight: bold;\n}\n.x-spreadsheet-menu > li.active {\n background-color: #fff;\n color: rgba(0, 0, 0, 0.65);\n}\n.x-spreadsheet-menu > li .x-spreadsheet-icon {\n margin: 0 6px;\n}\n.x-spreadsheet-menu > li .x-spreadsheet-icon .x-spreadsheet-icon-img:hover {\n opacity: 0.85;\n}\n.x-spreadsheet-menu > li .x-spreadsheet-dropdown {\n display: inline-block;\n}\n.x-spreadsheet-toolbar {\n border-bottom: 1px solid #e0e2e4;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btns {\n display: inline-flex;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-more {\n padding: 0 6px 6px;\n text-align: left;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-more .x-spreadsheet-toolbar-divider {\n margin-top: 0;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn {\n flex: 0 0 auto;\n display: inline-block;\n border: 1px solid transparent;\n height: 26px;\n line-height: 26px;\n min-width: 26px;\n margin: 6px 1px 0;\n padding: 0;\n text-align: center;\n border-radius: 2px;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn.disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn:hover,\n.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn.active {\n background: rgba(0, 0, 0, 0.08);\n}\n.x-spreadsheet-toolbar-divider {\n display: inline-block;\n border-right: 1px solid #e0e2e4;\n width: 0;\n vertical-align: middle;\n height: 18px;\n margin: 12px 3px 0;\n}\n.x-spreadsheet-print {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 100;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.x-spreadsheet-print-bar {\n background: #424242;\n height: 60px;\n line-height: 60px;\n padding: 0 30px;\n}\n.x-spreadsheet-print-bar .-title {\n color: #fff;\n font-weight: bold;\n font-size: 1.2em;\n float: left;\n}\n.x-spreadsheet-print-bar .-right {\n float: right;\n margin-top: 12px;\n}\n.x-spreadsheet-print-content {\n display: flex;\n flex: auto;\n flex-direction: row;\n background: #d0d0d0;\n height: calc(100% - 60px);\n}\n.x-spreadsheet-print-content .-sider {\n flex: 0 0 300px;\n width: 300px;\n border-left: 2px solid #ccc;\n background: #fff;\n}\n.x-spreadsheet-print-content .-content {\n flex: auto;\n overflow-x: auto;\n overflow-y: scroll;\n height: 100%;\n}\n.x-spreadsheet-canvas-card-wraper {\n margin: 40px 20px;\n}\n.x-spreadsheet-canvas-card {\n background: #fff;\n margin: auto;\n page-break-before: auto;\n page-break-after: always;\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 3px rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.2);\n}\n.x-spreadsheet-calendar {\n color: rgba(0, 0, 0, 0.65);\n background: #ffffff;\n user-select: none;\n}\n.x-spreadsheet-calendar .calendar-header {\n font-weight: 700;\n line-height: 30px;\n text-align: center;\n width: 100%;\n float: left;\n background: #f9fafb;\n}\n.x-spreadsheet-calendar .calendar-header .calendar-header-left {\n padding-left: 5px;\n float: left;\n}\n.x-spreadsheet-calendar .calendar-header .calendar-header-right {\n float: right;\n}\n.x-spreadsheet-calendar .calendar-header .calendar-header-right a {\n padding: 3px 0;\n margin-right: 2px;\n border-radius: 2px;\n}\n.x-spreadsheet-calendar .calendar-header .calendar-header-right a:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n.x-spreadsheet-calendar .calendar-body {\n border-collapse: collapse;\n border-spacing: 0;\n}\n.x-spreadsheet-calendar .calendar-body th,\n.x-spreadsheet-calendar .calendar-body td {\n width: 100%/7;\n min-width: 32px;\n text-align: center;\n font-weight: 700;\n line-height: 30px;\n padding: 0;\n}\n.x-spreadsheet-calendar .calendar-body td > .cell:hover {\n background: #ecf6fd;\n}\n.x-spreadsheet-calendar .calendar-body td > .cell.active,\n.x-spreadsheet-calendar .calendar-body td > .cell.active:hover {\n background: #ecf6fd;\n color: #2185D0;\n}\n.x-spreadsheet-calendar .calendar-body td > .cell.disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n.x-spreadsheet-datepicker {\n box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);\n position: absolute;\n left: 0;\n top: calc(100% + 5px);\n z-index: 10;\n width: auto;\n}\n.x-spreadsheet-buttons {\n display: flex;\n justify-content: flex-end;\n}\n.x-spreadsheet-buttons .x-spreadsheet-button {\n margin-left: 8px;\n}\n.x-spreadsheet-button {\n display: inline-block;\n border-radius: 3px;\n line-height: 1em;\n min-height: 1em;\n white-space: nowrap;\n text-align: center;\n cursor: pointer;\n font-size: 1em;\n font-weight: 700;\n padding: 0.75em 1em;\n color: rgba(0, 0, 0, 0.6);\n background: #E0E1E2;\n text-decoration: none;\n font-family: \"Lato\", \"proxima-nova\", \"Helvetica Neue\", Arial, sans-serif;\n outline: none;\n vertical-align: baseline;\n zoom: 1;\n user-select: none;\n transition: all 0.1s linear;\n}\n.x-spreadsheet-button.active,\n.x-spreadsheet-button:hover {\n background-color: #C0C1C2;\n color: rgba(0, 0, 0, 0.8);\n}\n.x-spreadsheet-button.primary {\n color: #fff;\n background-color: #2185D0;\n}\n.x-spreadsheet-button.primary:hover,\n.x-spreadsheet-button.primary.active {\n color: #fff;\n background-color: #1678c2;\n}\n.x-spreadsheet-form-input {\n font-size: 1em;\n position: relative;\n font-weight: 400;\n display: inline-flex;\n color: rgba(0, 0, 0, 0.87);\n}\n.x-spreadsheet-form-input input {\n z-index: 1;\n margin: 0;\n max-width: 100%;\n flex: 1 0 auto;\n outline: 0;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-align: left;\n line-height: 30px;\n height: 30px;\n padding: 0 8px;\n background: #fff;\n border: 1px solid #e9e9e9;\n border-radius: 3px;\n transition: box-shadow 0.1s ease, border-color 0.1s ease;\n box-shadow: inset 0 1px 2px hsla(0, 0%, 4%, 0.06);\n}\n.x-spreadsheet-form-input input:focus {\n border-color: #4b89ff;\n box-shadow: inset 0 1px 2px rgba(75, 137, 255, 0.2);\n}\n.x-spreadsheet-form-select {\n position: relative;\n display: inline-block;\n background: #fff;\n border: 1px solid #e9e9e9;\n border-radius: 2px;\n cursor: pointer;\n color: rgba(0, 0, 0, 0.87);\n user-select: none;\n box-shadow: inset 0 1px 2px hsla(0, 0%, 4%, 0.06);\n}\n.x-spreadsheet-form-select .input-text {\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 60px;\n width: auto;\n height: 30px;\n line-height: 30px;\n padding: 0 8px;\n}\n.x-spreadsheet-form-fields {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n.x-spreadsheet-form-fields .x-spreadsheet-form-field {\n flex: 0 1 auto;\n}\n.x-spreadsheet-form-fields .x-spreadsheet-form-field .label {\n display: inline-block;\n margin: 0 10px 0 0;\n}\n.x-spreadsheet-form-field {\n display: block;\n vertical-align: middle;\n margin-left: 10px;\n margin-bottom: 10px;\n}\n.x-spreadsheet-form-field:first-child {\n margin-left: 0;\n}\n.x-spreadsheet-form-field.error .x-spreadsheet-form-select,\n.x-spreadsheet-form-field.error input {\n border-color: #f04134;\n}\n.x-spreadsheet-form-field .tip {\n color: #f04134;\n font-size: 0.9em;\n}\n.x-spreadsheet-dimmer {\n display: none;\n position: absolute;\n top: 0 !important;\n left: 0 !important;\n width: 100%;\n height: 100%;\n text-align: center;\n vertical-align: middle;\n background-color: rgba(0, 0, 0, 0.6);\n opacity: 0;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-duration: 0.5s;\n animation-duration: 0.5s;\n transition: background-color 0.5s linear;\n user-select: none;\n z-index: 1000;\n}\n.x-spreadsheet-dimmer.active {\n display: block;\n opacity: 1;\n}\nform fieldset {\n border: none;\n}\nform fieldset label {\n display: block;\n margin-bottom: 0.5em;\n font-size: 1em;\n color: #666;\n}\nform fieldset select {\n font-size: 1.1em;\n width: 100%;\n background-color: #fff;\n border: none;\n border-bottom: 2px solid #ddd;\n padding: 0.5em 0.85em;\n border-radius: 2px;\n}\n.x-spreadsheet-modal,\n.x-spreadsheet-toast {\n font-size: 13px;\n position: fixed;\n z-index: 1001;\n text-align: left;\n line-height: 1.25em;\n min-width: 360px;\n color: rgba(0, 0, 0, 0.87);\n font-family: 'Lato', 'Source Sans Pro', Roboto, Helvetica, Arial, sans-serif;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background-color: #fff;\n background-clip: padding-box;\n box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 8px;\n}\n.x-spreadsheet-toast {\n background-color: rgba(255, 255, 255, 0.85);\n}\n.x-spreadsheet-modal-header,\n.x-spreadsheet-toast-header {\n font-weight: 600;\n background-clip: padding-box;\n background-color: rgba(255, 255, 255, 0.85);\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-radius: 4px 4px 0 0;\n}\n.x-spreadsheet-modal-header .x-spreadsheet-icon,\n.x-spreadsheet-toast-header .x-spreadsheet-icon {\n position: absolute;\n right: 0.8em;\n top: 0.65em;\n border-radius: 18px;\n}\n.x-spreadsheet-modal-header .x-spreadsheet-icon:hover,\n.x-spreadsheet-toast-header .x-spreadsheet-icon:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.08);\n}\n.x-spreadsheet-toast-header {\n color: #F2711C;\n}\n.x-spreadsheet-modal-header {\n border-bottom: 1px solid #e0e2e4;\n background: rgba(0, 0, 0, 0.08);\n font-size: 1.0785em;\n}\n.x-spreadsheet-modal-header,\n.x-spreadsheet-modal-content,\n.x-spreadsheet-toast-header,\n.x-spreadsheet-toast-content {\n padding: 0.75em 1em;\n}\n@media screen and (min-width: 320px) and (max-width: 480px) {\n .x-spreadsheet-toolbar {\n display: none;\n }\n}\n.x-spreadsheet-icon {\n width: 18px;\n height: 18px;\n margin: 1px 1px 2px 1px;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n overflow: hidden;\n position: relative;\n display: inline-block;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img {\n background-image: url('../assets/sprite.svg');\n position: absolute;\n width: 262px;\n height: 444px;\n opacity: 0.56;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.undo {\n left: 0;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.redo {\n left: -18px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.print {\n left: -36px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.paintformat {\n left: -54px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.clearformat {\n left: -72px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.font-bold {\n left: -90px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.font-italic {\n left: -108px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.underline {\n left: -126px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.strike {\n left: -144px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.color {\n left: -162px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.bgcolor {\n left: -180px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.merge {\n left: -198px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-left {\n left: -216px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-center {\n left: -234px;\n top: 0;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-right {\n left: 0;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-top {\n left: -18px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-middle {\n left: -36px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.align-bottom {\n left: -54px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.textwrap {\n left: -72px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.autofilter {\n left: -90px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.formula {\n left: -108px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.arrow-down {\n left: -126px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.arrow-right {\n left: -144px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.link {\n left: -162px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.chart {\n left: -180px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.freeze {\n left: -198px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.ellipsis {\n left: -216px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.add {\n left: -234px;\n top: -18px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-all {\n left: 0;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-inside {\n left: -18px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-horizontal {\n left: -36px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-vertical {\n left: -54px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-outside {\n left: -72px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-left {\n left: -90px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-top {\n left: -108px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-right {\n left: -126px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-bottom {\n left: -144px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.border-none {\n left: -162px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.line-color {\n left: -180px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.line-type {\n left: -198px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.close {\n left: -234px;\n top: -36px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-down {\n left: 0;\n top: -54px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-up {\n left: -18px;\n top: -54px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-left {\n left: -36px;\n top: -54px;\n}\n.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-right {\n left: -54px;\n top: -54px;\n}\n");class mn{constructor(e,r={}){let n=e;this.options={showBottomBar:!0,...r},this.sheetIndex=1,this.datas=[],"string"==typeof e&&(n=document.querySelector(e)),this.bottombar=this.options.showBottomBar?new pn((()=>{const e=this.addSheet();this.sheet.resetData(e)}),(e=>{const t=this.datas[e];this.sheet.resetData(t)}),(()=>{this.deleteSheet()}),((e,t)=>{this.datas[e].name=t})):null,this.data=this.addSheet();const i=t("div",`${K}`).on("contextmenu",(e=>e.preventDefault()));n.appendChild(i.el),this.sheet=new cn(i,this.data),null!==this.bottombar&&i.child(this.bottombar.el)}addSheet(e,t=!0){const r=e||`sheet${this.sheetIndex}`,n=new H(r,this.options);return n.change=(...e)=>{this.sheet.trigger("change",...e)},this.datas.push(n),null!==this.bottombar&&this.bottombar.addItem(r,t),this.sheetIndex+=1,n}deleteSheet(){if(null===this.bottombar)return;const[e,t]=this.bottombar.deleteItem();e>=0&&(this.datas.splice(e,1),t>=0&&this.sheet.resetData(this.datas[t]))}loadData(e){const t=Array.isArray(e)?e:[e];if(null!==this.bottombar&&this.bottombar.clear(),this.datas=[],t.length>0)for(let e=0;ee.getData()))}cellText(e,t,r,n=0){return this.datas[n].setCellText(e,t,r,"finished"),this}cell(e,t,r=0){return this.datas[r].getCell(e,t)}cellStyle(e,t,r=0){return this.datas[r].getCellStyle(e,t)}reRender(){return this.sheet.table.render(),this}on(e,t){return this.sheet.on(e,t),this}validate(){const{validations:e}=this.data;return e.errors.size<=0}change(e){return this.sheet.on("change",e),this}static locale(e,t){O(e,t)}}const bn=(e,t={})=>new mn(e,t);window&&(window.x_spreadsheet=bn,window.x_spreadsheet.locale=(e,t)=>O(e,t));var yn="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function vn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function gn(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var wn={exports:{}};!function(e,t){e.exports=function(){function e(t,r,n){function i(a,s){if(!r[a]){if(!t[a]){if(!s&&gn)return gn(a);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};t[a][0].call(l.exports,(function(e){return i(t[a][1][e]||e)}),l,l.exports,e,t,r,n)}return r[a].exports}for(var o=gn,a=0;a2&&void 0!==arguments[2]?arguments[2]:0;if(n(this,e),r)if("string"==typeof r){var o=a.decodeAddress(r);this.nativeCol=o.col+i,this.nativeColOff=0,this.nativeRow=o.row+i,this.nativeRowOff=0}else void 0!==r.nativeCol?(this.nativeCol=r.nativeCol||0,this.nativeColOff=r.nativeColOff||0,this.nativeRow=r.nativeRow||0,this.nativeRowOff=r.nativeRowOff||0):void 0!==r.col?(this.col=r.col+i,this.row=r.row+i):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;this.worksheet=t}return o(e,[{key:"col",get:function(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth},set:function(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}},{key:"row",get:function(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight},set:function(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}},{key:"colWidth",get:function(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}},{key:"rowHeight",get:function(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}},{key:"model",get:function(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}},set:function(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}],[{key:"asInstance",value:function(t){return t instanceof e||null==t?t:new e(t)}}]),e}();t.exports=s},{"../utils/col-cache":19}],3:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r0||this.type===e.Types.Merge}},{key:"master",get:function(){return this.type===e.Types.Merge?this._value.master:this}},{key:"isHyperlink",get:function(){return this._value.type===e.Types.Hyperlink}},{key:"hyperlink",get:function(){return this._value.hyperlink}},{key:"value",get:function(){return this._value.value},set:function(t){this.type!==e.Types.Merge?(this._value.release(),this._value=S.create(S.getType(t),this,t)):this._value.master.value=t}},{key:"note",get:function(){return this._comment&&this._comment.note},set:function(e){this._comment=new u(e)}},{key:"text",get:function(){return this._value.toString()}},{key:"html",get:function(){return s.escapeHtml(this.text)}},{key:"formula",get:function(){return this._value.formula}},{key:"result",get:function(){return this._value.result}},{key:"formulaType",get:function(){return this._value.formulaType}},{key:"fullAddress",get:function(){return{sheetName:this._row.worksheet.name,address:this.address,row:this.row,col:this.col}}},{key:"name",get:function(){return this.names[0]},set:function(e){this.names=[e]}},{key:"names",get:function(){return this.workbook.definedNames.getNamesEx(this.fullAddress)},set:function(e){var t=this,r=this.workbook.definedNames;r.removeAllNames(this.fullAddress),e.forEach((function(e){r.addEx(t.fullAddress,e)}))}},{key:"_dataValidations",get:function(){return this.worksheet.dataValidations}},{key:"dataValidation",get:function(){return this._dataValidations.find(this.address)},set:function(e){this._dataValidations.add(this.address,e)}},{key:"model",get:function(){var e=this._value.model;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e},set:function(e){this._value.release(),this._value=S.create(e.type,this),this._value.model=e,e.comment&&"note"===e.comment.type&&(this._comment=u.fromModel(e.comment)),e.style?this.style=e.style:this.style={}}}]),e}();f.Types=c.ValueType;var h=function(){function e(t){n(this,e),this.model={address:t.address,type:f.Types.Null}}return o(e,[{key:"toCsvString",value:function(){return""}},{key:"release",value:function(){}},{key:"toString",value:function(){return""}},{key:"value",get:function(){return null},set:function(e){}},{key:"type",get:function(){return f.Types.Null}},{key:"effectiveType",get:function(){return f.Types.Null}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),d=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Number,value:r}}return o(e,[{key:"toCsvString",value:function(){return this.model.value.toString()}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value.toString()}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.Number}},{key:"effectiveType",get:function(){return f.Types.Number}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),p=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.String,value:r}}return o(e,[{key:"toCsvString",value:function(){return'"'.concat(this.model.value.replace(/"/g,'""'),'"')}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.String}},{key:"effectiveType",get:function(){return f.Types.String}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),m=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.String,value:r}}return o(e,[{key:"toString",value:function(){return this.model.value.richText.map((function(e){return e.text})).join("")}},{key:"toCsvString",value:function(){return'"'.concat(this.text.replace(/"/g,'""'),'"')}},{key:"release",value:function(){}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.RichText}},{key:"effectiveType",get:function(){return f.Types.RichText}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),b=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Date,value:r}}return o(e,[{key:"toCsvString",value:function(){return this.model.value.toISOString()}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value.toString()}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.Date}},{key:"effectiveType",get:function(){return f.Types.Date}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),y=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Hyperlink,text:r?r.text:void 0,hyperlink:r?r.hyperlink:void 0},r&&r.tooltip&&(this.model.tooltip=r.tooltip)}return o(e,[{key:"toCsvString",value:function(){return this.model.hyperlink}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.text}},{key:"value",get:function(){var e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e},set:function(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}},{key:"text",get:function(){return this.model.text},set:function(e){this.model.text=e}},{key:"hyperlink",get:function(){return this.model.hyperlink},set:function(e){this.model.hyperlink=e}},{key:"type",get:function(){return f.Types.Hyperlink}},{key:"effectiveType",get:function(){return f.Types.Hyperlink}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),v=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Merge,master:r?r.address:void 0},this._master=r,r&&r.addMergeRef()}return o(e,[{key:"isMergedTo",value:function(e){return e===this._master}},{key:"toCsvString",value:function(){return""}},{key:"release",value:function(){this._master.releaseMergeRef()}},{key:"toString",value:function(){return this.value.toString()}},{key:"value",get:function(){return this._master.value},set:function(e){e instanceof f?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}},{key:"master",get:function(){return this._master}},{key:"type",get:function(){return f.Types.Merge}},{key:"effectiveType",get:function(){return this._master.effectiveType}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),g=function(){function e(t,r){n(this,e),this.cell=t,this.model={address:t.address,type:f.Types.Formula,shareType:r?r.shareType:void 0,ref:r?r.ref:void 0,formula:r?r.formula:void 0,sharedFormula:r?r.sharedFormula:void 0,result:r?r.result:void 0}}return o(e,[{key:"_copyModel",value:function(e){var t={},r=function(r){var n=e[r];n&&(t[r]=n)};return r("formula"),r("result"),r("ref"),r("shareType"),r("sharedFormula"),t}},{key:"validate",value:function(e){switch(S.getType(e)){case f.Types.Null:case f.Types.String:case f.Types.Number:case f.Types.Date:break;case f.Types.Hyperlink:case f.Types.Formula:default:throw new Error("Cannot process that type of result value")}}},{key:"_getTranslatedFormula",value:function(){if(!this._translatedFormula&&this.model.sharedFormula){var e=this.cell.worksheet.findCell(this.model.sharedFormula);this._translatedFormula=e&&l(e.formula,e.address,this.model.address)}return this._translatedFormula}},{key:"toCsvString",value:function(){return"".concat(this.model.result||"")}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.result?this.model.result.toString():""}},{key:"value",get:function(){return this._copyModel(this.model)},set:function(e){this.model=this._copyModel(e)}},{key:"dependencies",get:function(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g)}}},{key:"formula",get:function(){return this.model.formula||this._getTranslatedFormula()},set:function(e){this.model.formula=e}},{key:"formulaType",get:function(){return this.model.formula?c.FormulaType.Master:this.model.sharedFormula?c.FormulaType.Shared:c.FormulaType.None}},{key:"result",get:function(){return this.model.result},set:function(e){this.model.result=e}},{key:"type",get:function(){return f.Types.Formula}},{key:"effectiveType",get:function(){var e=this.model.result;return null==e?c.ValueType.Null:e instanceof String||"string"==typeof e?c.ValueType.String:"number"==typeof e?c.ValueType.Number:e instanceof Date?c.ValueType.Date:e.text&&e.hyperlink?c.ValueType.Hyperlink:e.formula?c.ValueType.Formula:c.ValueType.Null}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),w=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.SharedString,value:r}}return o(e,[{key:"toCsvString",value:function(){return this.model.value.toString()}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value.toString()}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.SharedString}},{key:"effectiveType",get:function(){return f.Types.SharedString}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),_=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Boolean,value:r}}return o(e,[{key:"toCsvString",value:function(){return this.model.value?1:0}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value.toString()}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.Boolean}},{key:"effectiveType",get:function(){return f.Types.Boolean}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),x=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.Error,value:r}}return o(e,[{key:"toCsvString",value:function(){return this.toString()}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value.error.toString()}},{key:"value",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:"type",get:function(){return f.Types.Error}},{key:"effectiveType",get:function(){return f.Types.Error}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),k=function(){function e(t,r){n(this,e),this.model={address:t.address,type:f.Types.String,value:JSON.stringify(r),rawValue:r}}return o(e,[{key:"toCsvString",value:function(){return this.model.value}},{key:"release",value:function(){}},{key:"toString",value:function(){return this.model.value}},{key:"value",get:function(){return this.model.rawValue},set:function(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}},{key:"type",get:function(){return f.Types.String}},{key:"effectiveType",get:function(){return f.Types.String}},{key:"address",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),S={getType:function(e){return null==e?f.Types.Null:e instanceof String||"string"==typeof e?f.Types.String:"number"==typeof e?f.Types.Number:"boolean"==typeof e?f.Types.Boolean:e instanceof Date?f.Types.Date:e.text&&e.hyperlink?f.Types.Hyperlink:e.formula||e.sharedFormula?f.Types.Formula:e.richText?f.Types.RichText:e.sharedString?f.Types.SharedString:e.error?f.Types.Error:f.Types.JSON},types:[{t:f.Types.Null,f:h},{t:f.Types.Number,f:d},{t:f.Types.String,f:p},{t:f.Types.Date,f:b},{t:f.Types.Hyperlink,f:y},{t:f.Types.Formula,f:g},{t:f.Types.Merge,f:v},{t:f.Types.JSON,f:k},{t:f.Types.SharedString,f:w},{t:f.Types.RichText,f:m},{t:f.Types.Boolean,f:_},{t:f.Types.Error,f:x}].reduce((function(e,t){return e[t.t]=t.f,e}),[]),create:function(e,t,r){var n=this.types[e];if(!n)throw new Error("Could not create Value of type ".concat(e));return new n(t,r)}};t.exports=f},{"../utils/col-cache":19,"../utils/shared-formula":22,"../utils/under-dash":25,"./enums":7,"./note":9}],4:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r=this._worksheet.properties.outlineLevelCol)}},{key:"isDefault",get:function(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;var e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}},{key:"headerCount",get:function(){return this.headers.length}},{key:"values",get:function(){var e=[];return this.eachCell((function(t,r){t&&t.type!==s.ValueType.Null&&(e[r]=t.value)})),e},set:function(e){var t=this;if(e){var r=this.number,n=0;e.hasOwnProperty("0")&&(n=1),e.forEach((function(e,i){t._worksheet.getCell(i+n,r).value=e}))}}},{key:"numFmt",get:function(){return this.style.numFmt},set:function(e){this._applyStyle("numFmt",e)}},{key:"font",get:function(){return this.style.font},set:function(e){this._applyStyle("font",e)}},{key:"alignment",get:function(){return this.style.alignment},set:function(e){this._applyStyle("alignment",e)}},{key:"protection",get:function(){return this.style.protection},set:function(e){this._applyStyle("protection",e)}},{key:"border",get:function(){return this.style.border},set:function(e){this._applyStyle("border",e)}},{key:"fill",get:function(){return this.style.fill},set:function(e){this._applyStyle("fill",e)}}],[{key:"toModel",value:function(e){var t=[],r=null;return e&&e.forEach((function(e,n){e.isDefault?r&&(r=null):r&&e.equivalentTo(r)?r.max=n+1:(r={min:n+1,max:n+1,width:void 0!==e.width?e.width:l,style:e.style,isCustomWidth:e.isCustomWidth,hidden:e.hidden,outlineLevel:e.outlineLevel,collapsed:e.collapsed},t.push(r))})),t.length?t:void 0}},{key:"fromModel",value:function(t,r){r=r||[];for(var n=[],i=1,o=0;othis.bottom)&&(this.bottom=r),(!this.model.right||n>this.right)&&(this.right=n)}},{key:"expandRow",value:function(e){if(e){var t=e.dimensions,r=e.number;t&&this.expand(r,t.min,r,t.max)}}},{key:"expandToAddress",value:function(e){var t=a.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}},{key:"toString",value:function(){return this.range}},{key:"intersects",value:function(e){return!(e.sheetName&&this.sheetName&&e.sheetName!==this.sheetName||e.bottomthis.bottom||e.rightthis.right)}},{key:"contains",value:function(e){var t=a.decodeEx(e);return this.containsEx(t)}},{key:"containsEx",value:function(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right}},{key:"forEachAddress",value:function(e){for(var t=this.left;t<=this.right;t++)for(var r=this.top;r<=this.bottom;r++)e(a.encodeAddress(r,t),r,t)}},{key:"top",get:function(){return this.model.top||1},set:function(e){this.model.top=e}},{key:"left",get:function(){return this.model.left||1},set:function(e){this.model.left=e}},{key:"bottom",get:function(){return this.model.bottom||1},set:function(e){this.model.bottom=e}},{key:"right",get:function(){return this.model.right||1},set:function(e){this.model.right=e}},{key:"sheetName",get:function(){return this.model.sheetName},set:function(e){this.model.sheetName=e}},{key:"_serialisedSheetName",get:function(){var e=this.model.sheetName;return e?/^[a-zA-Z0-9]*$/.test(e)?"".concat(e,"!"):"'".concat(e,"'!"):""}},{key:"tl",get:function(){return a.n2l(this.left)+this.top}},{key:"$t$l",get:function(){return"$".concat(a.n2l(this.left),"$").concat(this.top)}},{key:"br",get:function(){return a.n2l(this.right)+this.bottom}},{key:"$b$r",get:function(){return"$".concat(a.n2l(this.right),"$").concat(this.bottom)}},{key:"range",get:function(){return"".concat(this._serialisedSheetName+this.tl,":").concat(this.br)}},{key:"$range",get:function(){return"".concat(this._serialisedSheetName+this.$t$l,":").concat(this.$b$r)}},{key:"shortRange",get:function(){return this.count>1?this.range:this._serialisedSheetName+this.tl}},{key:"$shortRange",get:function(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}},{key:"count",get:function(){return(1+this.bottom-this.top)*(1+this.right-this.left)}}]),e}();t.exports=s},{"../utils/col-cache":19}],11:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r2?n-2:0),o=2;o0)for(a=u;a>=r;a--)(s=this._cells[a-1])?((c=this.getCell(a+l)).value=s.value,c.style=s.style,c._comment=s._comment):this._cells[a+l-1]=void 0;for(a=0;ar.col)&&(e=r.col),t0?{min:e,max:t}:null}},{key:"numFmt",get:function(){return this.style.numFmt},set:function(e){this._applyStyle("numFmt",e)}},{key:"font",get:function(){return this.style.font},set:function(e){this._applyStyle("font",e)}},{key:"alignment",get:function(){return this.style.alignment},set:function(e){this._applyStyle("alignment",e)}},{key:"protection",get:function(){return this.style.protection},set:function(e){this._applyStyle("protection",e)}},{key:"border",get:function(){return this.style.border},set:function(e){this._applyStyle("border",e)}},{key:"fill",get:function(){return this.style.fill},set:function(e){this._applyStyle("fill",e)}},{key:"hidden",get:function(){return!!this._hidden},set:function(e){this._hidden=e}},{key:"outlineLevel",get:function(){return this._outlineLevel||0},set:function(e){this._outlineLevel=e}},{key:"collapsed",get:function(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}},{key:"model",get:function(){var e=[],t=0,r=0;return this._cells.forEach((function(n){if(n){var i=n.model;i&&((!t||t>n.col)&&(t=n.col),r0,"Table must be on valid row"),n(s>0,"Table must be on valid col");var c=this.width,l=this.filterHeight,u=this.tableHeight;t.autoFilterRef=a.encode(o,s,o+l-1,s+c-1),t.tableRef=a.encode(o,s,o+u-1,s+c-1),t.columns.forEach((function(t,i){n(t.name,"Column ".concat(i," must have a name")),0===i?r(t,"totalsRowLabel","Total"):(r(t,"totalsRowFunction","none"),t.totalsRowFormula=e.getFormula(t))}))}},{key:"store",value:function(){var e=this,t=function(e,t){t&&Object.keys(t).forEach((function(r){e[r]=t[r]}))},r=this.worksheet,n=this.table,i=n.tl,o=i.row,a=i.col,s=0;if(n.headerRow){var c=r.getRow(o+s++);n.columns.forEach((function(e,r){var n=e.style,i=e.name,o=c.getCell(a+r);o.value=i,t(o,n)}))}if(n.rows.forEach((function(e){var i=r.getRow(o+s++);e.forEach((function(e,r){var o=i.getCell(a+r);o.value=e,t(o,n.columns[r].style)}))})),n.totalsRow){var l=r.getRow(o+s++);n.columns.forEach((function(r,n){var i=l.getCell(a+n);if(0===n)i.value=r.totalsRowLabel;else{var o=e.getFormula(r);i.value=o?{formula:r.totalsRowFormula,result:r.totalsRowResult}:null}t(i,r.style)}))}}},{key:"load",value:function(e){var t=this,r=this.table,n=r.tl,i=n.row,o=n.col,a=0;if(r.headerRow){var s=e.getRow(i+a++);r.columns.forEach((function(e,t){s.getCell(o+t).value=e.name}))}if(r.rows.forEach((function(t){var r=e.getRow(i+a++);t.forEach((function(e,t){r.getCell(o+t).value=e}))})),r.totalsRow){var c=e.getRow(i+a++);r.columns.forEach((function(e,r){var n=c.getCell(o+r);0===r?n.value=e.totalsRowLabel:t.getFormula(e)&&(n.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}))}}},{key:"cacheState",value:function(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}},{key:"commit",value:function(){if(this._cache){this.validate();var e=a.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}},{key:"getColumn",value:function(e){var t=this.table.columns[e];return new s(this,t,e)}},{key:"addColumn",value:function(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach((function(e,r){e.push(t[r])}))):(this.table.columns.splice(r,0,e),this.table.rows.forEach((function(e,n){e.splice(r,0,t[n])})))}},{key:"removeColumns",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach((function(r){r.splice(e,t)}))}},{key:"_assign",value:function(e,t,r){this.cacheState(),e[t]=r}},{key:"width",get:function(){return this.table.columns.length}},{key:"height",get:function(){return this.table.rows.length}},{key:"filterHeight",get:function(){return this.height+(this.table.headerRow?1:0)}},{key:"tableHeight",get:function(){return this.filterHeight+(this.table.totalsRow?1:0)}},{key:"model",get:function(){return this.table},set:function(e){this.table=e}},{key:"ref",get:function(){return this.table.ref},set:function(e){this._assign(this.table,"ref",e)}},{key:"name",get:function(){return this.table.name},set:function(e){this.table.name=e}},{key:"displayName",get:function(){return this.table.displyName||this.table.name}},{key:"displayNamename",set:function(e){this.table.displayName=e}},{key:"headerRow",get:function(){return this.table.headerRow},set:function(e){this._assign(this.table,"headerRow",e)}},{key:"totalsRow",get:function(){return this.table.totalsRow},set:function(e){this._assign(this.table,"totalsRow",e)}},{key:"theme",get:function(){return this.table.style.name},set:function(e){this.table.style.name=e}},{key:"showFirstColumn",get:function(){return this.table.style.showFirstColumn},set:function(e){this.table.style.showFirstColumn=e}},{key:"showLastColumn",get:function(){return this.table.style.showLastColumn},set:function(e){this.table.style.showLastColumn=e}},{key:"showRowStripes",get:function(){return this.table.style.showRowStripes},set:function(e){this.table.style.showRowStripes=e}},{key:"showColumnStripes",get:function(){return this.table.style.showColumnStripes},set:function(e){this.table.style.showColumnStripes=e}}]),e}();t.exports=c},{"../utils/col-cache":19}],13:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r31&&console.warn("Worksheet name ".concat(e," exceeds 31 chars. This will be truncated")),/[*?:/\\[\]]/.test(e))throw new Error("Worksheet name ".concat(e," cannot include any of the following characters: * ? : \\ / [ ]"));if(/(^')|('$)/.test(e))throw new Error("The first or last character of worksheet name cannot be a single quotation mark: ".concat(e));if(e=(e||"sheet".concat(r)).substring(0,31),this._worksheets.find((function(t){return t&&t.name.toLowerCase()===e.toLowerCase()})))throw new Error("Worksheet name already exists: ".concat(e));t&&("string"==typeof t?(console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'),t={properties:{tabColor:{argb:t}}}):(t.argb||t.theme||t.indexed)&&(console.trace("tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }"),t={properties:{tabColor:t}}));var n=this._worksheets.reduce((function(e,t){return(t&&t.orderNo)>e?t.orderNo:e}),0),i=Object.assign({},t,{id:r,name:e,orderNo:n+1,workbook:this}),o=new a(i);return this._worksheets[r]=o,o}},{key:"removeWorksheetEx",value:function(e){delete this._worksheets[e.id]}},{key:"removeWorksheet",value:function(e){var t=this.getWorksheet(e);t&&t.destroy()}},{key:"getWorksheet",value:function(e){return void 0===e?this._worksheets.find(Boolean):"number"==typeof e?this._worksheets[e]:"string"==typeof e?this._worksheets.find((function(t){return t&&t.name===e})):void 0}},{key:"eachSheet",value:function(e){this.worksheets.forEach((function(t){e(t,t.id)}))}},{key:"clearThemes",value:function(){this._themes=void 0}},{key:"addImage",value:function(e){var t=this.media.length;return this.media.push(Object.assign({},e,{type:"image"})),t}},{key:"getImage",value:function(e){return this.media[e]}},{key:"xlsx",get:function(){return this._xlsx||(this._xlsx=new c(this)),this._xlsx}},{key:"csv",get:function(){return this._csv||(this._csv=new l(this)),this._csv}},{key:"nextId",get:function(){for(var e=1;ee.length)&&(t=e.length);for(var r=0,n=new Array(t);rthis._columns.length)for(var r=this._columns.length+1;r<=e;)this._columns.push(new g(this,r++));return this._columns[e-1]}},{key:"spliceColumns",value:function(e,t){for(var r=this,n=this._rows.length,i=arguments.length,o=new Array(i>2?i-2:0),a=2;a0)for(var s=function(n){var i=[e,t];o.forEach((function(e){i.push(e[n]||null)}));var a=r.getRow(n+1);a.splice.apply(a,i)},c=0;c0)for(var d=f;d>=u;d--)this.getColumn(d+l).defn=this.getColumn(d).defn;for(var p=e;p1&&void 0!==arguments[1]?arguments[1]:"n",r=this._nextRow,n=this.getRow(r);return n.values=e,this._setStyleOption(r,"i"===t[0]?t:"n"),n}},{key:"addRows",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"n",n=[];return e.forEach((function(e){n.push(t.addRow(e,r))})),n}},{key:"insertRow",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";return this.spliceRows(e,0,t),this._setStyleOption(e,r),this.getRow(e)}},{key:"insertRows",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";if(this.spliceRows.apply(this,[e,0].concat(a(t))),"n"!==r)for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"n";"o"===t[0]&&void 0!==this.findRow(e+1)?this._copyStyle(e+1,e,"+"===t[1]):"i"===t[0]&&void 0!==this.findRow(e-1)&&this._copyStyle(e-1,e,"+"===t[1])}},{key:"_copyStyle",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.getRow(e),o=this.getRow(t);o.style=Object.freeze(i({},n.style)),n.eachCell({includeEmpty:r},(function(e,t){o.getCell(t).style=Object.freeze(i({},e.style))})),o.height=n.height}},{key:"duplicateRow",value:function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this._rows[e-1],o=new Array(t).fill(i.values);this.spliceRows.apply(this,[e+1,n?0:t].concat(a(o)));for(var s=function(t){var n=r._rows[e+t];n.style=i.style,n.height=i.height,i.eachCell({includeEmpty:!0},(function(e,t){n.getCell(t).style=e.style}))},c=0;c2?i-2:0),a=2;a0)for(s=f;s>=n;s--)(c=this._rows[s-1])?function(){var e=r.getRow(s+u);e.values=c.values,e.style=c.style,e.height=c.height,c.eachCell({includeEmpty:!0},(function(t,n){if(e.getCell(n).style=t.style,"MergeValue"===t._value.constructor.name){var i=r.getRow(t._row._number+l).getCell(n),o=t._value._master,a=r.getRow(o._row._number+l).getCell(o._column._number);i.merge(a)}}))}():this._rows[s+u-1]=void 0;for(s=0;se.top||i>e.left)&&this.getCell(n,i).merge(r,t);this._merges[r.address]=e}},{key:"_unMergeMaster",value:function(e){var t=this._merges[e.address];if(t){for(var r=t.top;r<=t.bottom;r++)for(var n=t.left;n<=t.right;n++)this.getCell(r,n).unmerge();delete this._merges[e.address]}}},{key:"unMergeCells",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r3&&void 0!==arguments[3]?arguments[3]:"shared",o=b.decode(e),a=o.top,s=o.left,c=o.bottom,l=o.right,u=l-s+1,f=b.encodeAddress(a,s),h="shared"===i;n="function"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?function(e,t){return r[e-a][t-s]}:function(e,t){return r[(e-a)*u+(t-s)]}:function(){};for(var d=!0,p=a;p<=c;p++)for(var m=s;m<=l;m++)d?(this.getCell(p,m).value={shareType:i,formula:t,ref:e,result:n(p,m)},d=!1):this.getCell(p,m).value=h?{sharedFormula:f,result:n(p,m)}:n(p,m)}},{key:"addImage",value:function(e,t){var r={type:"image",imageId:e,range:t};this._media.push(new _(this,r))}},{key:"getImages",value:function(){return this._media.filter((function(e){return"image"===e.type}))}},{key:"addBackgroundImage",value:function(e){var t={type:"background",imageId:e};this._media.push(new _(this,t))}},{key:"getBackgroundImageId",value:function(){var e=this._media.find((function(e){return"background"===e.type}));return e&&e.imageId}},{key:"protect",value:function(e,t){var r=this;return new Promise((function(n){r.sheetProtection={sheet:!0},t&&"spinCount"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(r.sheetProtection.algorithmName="SHA-512",r.sheetProtection.saltValue=S.randomBytes(16).toString("base64"),r.sheetProtection.spinCount=t&&"spinCount"in t?t.spinCount:1e5,r.sheetProtection.hashValue=S.convertPasswordToHash(e,"SHA512",r.sheetProtection.saltValue,r.sheetProtection.spinCount)),t&&(r.sheetProtection=Object.assign(r.sheetProtection,t),!e&&"spinCount"in t&&delete r.sheetProtection.spinCount),n()}))}},{key:"unprotect",value:function(){this.sheetProtection=null}},{key:"addTable",value:function(e){var t=new x(this,e);return this.tables[e.name]=t,t}},{key:"getTable",value:function(e){return this.tables[e]}},{key:"removeTable",value:function(e){delete this.tables[e]}},{key:"getTables",value:function(){return Object.values(this.tables)}},{key:"addConditionalFormatting",value:function(e){this.conditionalFormattings.push(e)}},{key:"removeConditionalFormatting",value:function(e){"number"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}},{key:"_parseRows",value:function(e){var t=this;this._rows=[],e.rows.forEach((function(e){var r=new v(t,e.number);t._rows[r.number-1]=r,r.model=e}))}},{key:"_parseMergeCells",value:function(e){var t=this;m.each(e.mergeCells,(function(e){t.mergeCellsWithoutStyle(e)}))}},{key:"workbook",get:function(){return this._workbook}},{key:"dimensions",get:function(){var e=new y;return this._rows.forEach((function(t){if(t){var r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}})),e}},{key:"columns",get:function(){return this._columns},set:function(e){var t=this;this._headerRowCount=e.reduce((function(e,t){var r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)}),0);var r=1,n=this._columns=[];e.forEach((function(e){var i=new g(t,r++,!1);n.push(i),i.defn=e}))}},{key:"lastColumn",get:function(){return this.getColumn(this.columnCount)}},{key:"columnCount",get:function(){var e=0;return this.eachRow((function(t){e=Math.max(e,t.cellCount)})),e}},{key:"actualColumnCount",get:function(){var e=[],t=0;return this.eachRow((function(r){r.eachCell((function(r){var n=r.col;e[n]||(e[n]=!0,t++)}))})),t}},{key:"_lastRowNumber",get:function(){for(var e=this._rows,t=e.length;t>0&&void 0===e[t-1];)t--;return t}},{key:"_nextRow",get:function(){return this._lastRowNumber+1}},{key:"lastRow",get:function(){if(this._rows.length)return this._rows[this._rows.length-1]}},{key:"rowCount",get:function(){return this._lastRowNumber}},{key:"actualRowCount",get:function(){var e=0;return this.eachRow((function(){e++})),e}},{key:"hasMerges",get:function(){return m.some(this._merges,Boolean)}},{key:"tabColor",get:function(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor},set:function(e){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=e}},{key:"model",get:function(){var e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map((function(e){return e.model})),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map((function(e){return e.model})),conditionalFormattings:this.conditionalFormattings};e.cols=g.toModel(this.columns);var t=e.rows=[],r=e.dimensions=new y;return this._rows.forEach((function(e){var n=e&&e.model;n&&(r.expand(n.number,n.min,n.number,n.max),t.push(n))})),e.merges=[],m.each(this._merges,(function(t){e.merges.push(t.range)})),e},set:function(e){var t=this;this.name=e.name,this._columns=g.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new k(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map((function(e){return new _(t,e)})),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce((function(e,t){var r=new x;return r.model=t,e[t.name]=r,e}),{}),this.conditionalFormattings=e.conditionalFormattings}}]),e}();t.exports=T},{"../utils/col-cache":19,"../utils/encryptor":20,"../utils/under-dash":25,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,t,r){e("core-js/modules/es.promise"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");var n={Workbook:e("./doc/workbook")},i=e("./doc/enums");Object.keys(i).forEach((function(e){n[e]=i[e]})),t.exports=n},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":316,"core-js/modules/es.array.find-index":315,"core-js/modules/es.array.includes":317,"core-js/modules/es.array.iterator":318,"core-js/modules/es.number.is-nan":319,"core-js/modules/es.object.assign":320,"core-js/modules/es.object.keys":321,"core-js/modules/es.object.values":322,"core-js/modules/es.promise":323,"core-js/modules/es.string.from-code-point":324,"core-js/modules/es.string.includes":325,"core-js/modules/es.symbol":327,"core-js/modules/es.symbol.async-iterator":326,"regenerator-runtime/runtime":492}],16:[function(e,t,r){var n="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8");function i(e){return"string"==typeof e?e:n?n.decode(e):e.toString()}r.bufferToString=i},{}],17:[function(e,t,r){var n="undefined"==typeof TextEncoder?null:new TextEncoder("utf-8"),i=e("buffer").Buffer;function o(e){return"string"!=typeof e?e:n?i.from(n.encode(e).buffer):i.from(e)}r.stringToBuffer=o},{buffer:216}],18:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&e>=1){for(;a<=26;)t=this._dictionary[a-1],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=1}if(this._l2nFill<2&&e>=2){for(a=27;a<=702;)n=(r=a-27)%26,i=Math.floor(r/26),t=this._dictionary[i]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=2}if(this._l2nFill<3&&e>=3){for(a=703;a<=16384;)n=(r=a-703)%26,i=Math.floor(r/26)%26,o=Math.floor(r/676),t=this._dictionary[o]+this._dictionary[i]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;this._l2nFill=3}},l2n:function(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error("Out of bounds. Invalid column letter: ".concat(e));return this._l2n[e]},n2l:function(e){if(e<1||e>16384)throw new Error("".concat(e," is out of bounds. Excel supports columns from 1 to 16384"));return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress:function(e){if(!h.test(e))throw new Error("Invalid Address: ".concat(e));return!0},decodeAddress:function(e){var t=e.length<5&&this._hash[e];if(t)return t;for(var r,n=!1,i="",o=0,a=!1,s="",c=0,l=0;l=65&&r<=90)n=!0,i+=e[l],o=26*o+r-64;else if(r>=48&&r<=57)a=!0,s+=e[l],c=10*c+r-48;else if(a&&n&&36!==r)break;if(n){if(o>16384)throw new Error("Out of bounds. Invalid column letter: ".concat(i))}else o=void 0;a||(c=void 0);var u={address:e=i+s,col:o,row:c,$col$row:"$".concat(i,"$").concat(s)};return o<=100&&c<=100&&(this._hash[e]=u,this._hash[u.$col$row]=u),u},getAddress:function(e,t){if(t){var r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode:function(e){var t=e.split(":");if(2===t.length){var r=this.decodeAddress(t[0]),n=this.decodeAddress(t[1]),i={top:Math.min(r.row,n.row),left:Math.min(r.col,n.col),bottom:Math.max(r.row,n.row),right:Math.max(r.col,n.col)};return i.tl=this.n2l(i.left)+i.top,i.br=this.n2l(i.right)+i.bottom,i.dimensions="".concat(i.tl,":").concat(i.br),i}return this.decodeAddress(e)},decodeEx:function(e){var t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],n=t[3],i=n.split(":");if(i.length>1){var o=this.decodeAddress(i[0]),a=this.decodeAddress(i[1]),s=Math.min(o.row,a.row),c=Math.min(o.col,a.col),l=Math.max(o.row,a.row),f=Math.max(o.col,a.col);return o=this.n2l(c)+s,a=this.n2l(f)+l,{top:s,left:c,bottom:l,right:f,sheetName:r,tl:{address:o,col:c,row:s,$col$row:"$".concat(this.n2l(c),"$").concat(s),sheetName:r},br:{address:a,col:f,row:l,$col$row:"$".concat(this.n2l(f),"$").concat(l),sheetName:r},dimensions:"".concat(o,":").concat(a)}}if(n.startsWith("#"))return r?{sheetName:r,error:n}:{error:n};var h=this.decodeAddress(n);return r?u({sheetName:r},h):h},encodeAddress:function(e,t){return d.n2l(t)+e},encode:function(){switch(arguments.length){case 2:return d.encodeAddress(arguments[0],arguments[1]);case 4:return"".concat(d.encodeAddress(arguments[0],arguments[1]),":").concat(d.encodeAddress(arguments[2],arguments[3]));default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange:function(e,t){var r=n(e,5),i=r[0],o=r[1],a=r[3],s=r[4],c=n(t,2),l=c[0],u=c[1];return l>=i&&l<=a&&u>=o&&u<=s}};t.exports=d},{}],20:[function(e,t,r){(function(r){var n=e("crypto"),i={hash:function(e){for(var t=n.createHash(e),i=arguments.length,o=new Array(i>1?i-1:0),a=1;a3||3===f.length&&f>"XFD")return e;var p=n.l2n(f),m=parseInt(d,10);return u||(p+=s.col-a.col),h||(m+=s.row-a.row),(t||"")+(u||"")+n.n2l(p)+(h||"")+m}return e}))}t.exports={slideFormula:a}},{"./col-cache":19}],23:[function(e,t,r){(function(r,n){function i(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,i)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function s(e){i(a,n,o,s,c,"next",e)}function c(e){i(a,n,o,s,c,"throw",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=n.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}},{key:"write",value:function(e,t,r){var n=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+n),this.iWrite+=n,n}},{key:"length",get:function(){return this.iWrite-this.iRead}},{key:"eod",get:function(){return this.iRead===this.iWrite}},{key:"full",get:function(){return this.iWrite===this.size}}]),e}(),b=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};u.inherits(b,l.Duplex,{toBuffer:function(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return n.concat(this.buffers.map((function(e){return e.toBuffer()})))}},_getWritableBuffer:function(){if(this.buffers.length){var e=this.buffers[this.buffers.length-1];if(!e.full)return e}var t=new m(this.bufSize);return this.buffers.push(t),t},_pipe:function(e){var t=this;return o(regeneratorRuntime.mark((function r(){var n;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return n=function(t){return new Promise((function(r){t.write(e.toBuffer(),(function(){r()}))}))},r.next=3,Promise.all(t.pipes.map(n));case 3:case"end":return r.stop()}}),r)})))()},_writeToBuffers:function(e){for(var t=0,r=e.length;t1;)a._pipe(a.buffers.shift());o.next=29;break;case 21:if(a.corked){o.next=27;break}return o.next=24,a._pipe(s);case 24:i(),o.next=29;break;case 27:a._writeToBuffers(s),r.nextTick(i);case 29:o.next=34;break;case 31:a.paused||a.emit("data",s.toBuffer()),a._writeToBuffers(s),a.emit("readable");case 34:return o.abrupt("return",!0);case 35:case"end":return o.stop()}}),o)})))()},cork:function(){this.corked=!0},_flush:function(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork:function(){this.corked=!1,this._flush()},end:function(e,t,r){var n=this,i=function(e){e?r(e):(n._flush(),n.pipes.forEach((function(e){e.end()})),n.emit("finish"))};e?this.write(e,t,i):i()},read:function(e){var t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){var r=this.buffers[0],i=r.read(e);e-=i.length,t.push(i),r.eod&&r.full&&this.buffers.shift()}return n.concat(t)}return t=this.buffers.map((function(e){return e.toBuffer()})).filter(Boolean),this.buffers=[],n.concat(t)},setEncoding:function(e){this.encoding=e},pause:function(){this.paused=!0},resume:function(){this.paused=!1},isPaused:function(){return!!this.paused},pipe:function(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe:function(e){this.pipes=this.pipes.filter((function(t){return t!==e}))},unshift:function(){throw new Error("Not Implemented")},wrap:function(){throw new Error("Not Implemented")}}),t.exports=b}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":24,"./utils":26,_process:467,buffer:216,"readable-stream":491}],24:[function(e,t,r){(function(e){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var r=0;r=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}},{key:"addStringBuf",value:function(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}},{key:"length",get:function(){return this._inPos}},{key:"capacity",get:function(){return this._buf.length}},{key:"buffer",get:function(){return this._buf}}]),t}();t.exports=o}).call(this,e("buffer").Buffer)},{buffer:216}],25:[function(e,t,r){function n(e){return n="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},n(e)}var i=Object.prototype.toString,o=/["&<>]/,a={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach((function(r){t(e[r],r)})))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some((function(r){return t(e[r],r)})))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every((function(r){return t(e[r],r)})))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map((function(r){return t(e[r],r)})):[]},keyBy:function(e,t){return e.reduce((function(e,r){return e[r[t]]=r,e}),{})},isEqual:function(e,t){var r=n(e),i=n(t),o=Array.isArray(e),s=Array.isArray(t);return r===i&&("object"===n(e)?o||s?!(!o||!s)&&e.length===t.length&&e.every((function(e,r){var n=t[r];return a.isEqual(e,n)})):a.every(e,(function(e,r){var n=t[r];return a.isEqual(e,n)})):e===t)},escapeHtml:function(e){var t=o.exec(e);if(!t)return e;for(var r="",n="",i=0,a=t.index;a":n=">";break;default:continue}i!==a&&(r+=e.substring(i,a)),i=a+1,r+=n}return i!==a?r+e.substring(i,a):r},strcmp:function(e,t){return et?1:0},isUndefined:function(e){return"[object Undefined]"===i.call(e)},isObject:function(e){return"[object Object]"===i.call(e)},deepMerge:function(){var e,t,r,n=arguments[0]||{},i=arguments.length;function o(i,o){e=n[o],r=Array.isArray(i),a.isObject(i)||r?(r?(r=!1,t=e&&Array.isArray(e)?e:[]):t=e&&a.isObject(e)?e:{},n[o]=a.deepMerge(t,i)):a.isUndefined(i)||(n[o]=i)}for(var s=0;s&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,a={nop:function(){},promiseImmediate:function(e){return new Promise((function(t){r.setImmediate?n((function(){t(e)})):setTimeout((function(){t(e)}),1)}))},inherits:function(e,t,r,n){e.super_=t,n||(n=r,r=null),r&&Object.keys(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}));var i={constructor:{value:e,enumerable:!1,writable:!1,configurable:!0}};n&&Object.keys(n).forEach((function(e){i[e]=Object.getOwnPropertyDescriptor(n,e)})),e.prototype=Object.create(t.prototype,i)},dateToExcel:function(e,t){return 25569+e.getTime()/864e5-(t?1462:0)},excelToDate:function(e,t){var r=Math.round(24*(e-25569+(t?1462:0))*3600*1e3);return new Date(r)},parsePath:function(e){var t=e.lastIndexOf("/");return{path:e.substring(0,t),name:e.substring(t+1)}},getRelsPath:function(e){var t=a.parsePath(e);return"".concat(t.path,"/_rels/").concat(t.name,".rels")},xmlEncode:function(e){var t=o.exec(e);if(!t)return e;for(var r="",n="",i=0,a=t.index;a=11&&13!==s)){n="";break}continue}i!==a&&(r+=e.substring(i,a)),i=a+1,n&&(r+=n)}return i!==a?r+e.substring(i,a):r},xmlDecode:function(e){return e.replace(/&([a-z]*);/g,(function(e){switch(e){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return e}}))},validInt:function(e){var t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt:function(e){return!!e&&null!==(e=(e=e.replace(/\[[^\]]*]/g,"")).replace(/"[^"]*"/g,"")).match(/[ymdhMsb]+/)},fs:{exists:function(e){return new Promise((function(t){i.access(e,i.constants.F_OK,(function(e){t(!e)}))}))}},toIsoDateString:function(e){return e.toIsoString().subsstr(0,10)}};t.exports=a}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{fs:215,timers:521}],27:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r",u="",h='="',d='"',p=" ";function m(e,t,r){e.push(p),e.push(t),e.push(h),e.push(s.xmlEncode(r.toString())),e.push(d)}function b(e,t){t&&a.each(t,(function(t,r){void 0!==t&&m(e,r,t)}))}var y=function(){function e(){n(this,e),this._xml=[],this._stack=[],this._rollbacks=[]}return o(e,[{key:"openXml",value:function(e){var t=this._xml;t.push("\n")}},{key:"openNode",value:function(e,t){var r=this.tos,n=this._xml;r&&this.open&&n.push(l),this._stack.push(e),n.push(c),n.push(e),b(n,t),this.leaf=!0,this.open=!0}},{key:"addAttribute",value:function(e,t){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");void 0!==t&&m(this._xml,e,t)}},{key:"addAttributes",value:function(e){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");b(this._xml,e)}},{key:"writeText",value:function(e){var t=this._xml;this.open&&(t.push(l),this.open=!1),this.leaf=!1,t.push(s.xmlEncode(e.toString()))}},{key:"writeXml",value:function(e){this.open&&(this._xml.push(l),this.open=!1),this.leaf=!1,this._xml.push(e)}},{key:"closeNode",value:function(){var e=this._stack.pop(),t=this._xml;this.leaf?t.push(f):(t.push(u),t.push(e),t.push(l)),this.open=!1,this.leaf=!1}},{key:"leafNode",value:function(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}},{key:"closeAll",value:function(){for(;this._stack.length;)this.closeNode()}},{key:"addRollback",value:function(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}},{key:"commit",value:function(){this._rollbacks.pop()}},{key:"rollback",value:function(){var e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}},{key:"tos",get:function(){return this._stack.length?this._stack[this._stack.length-1]:void 0}},{key:"cursor",get:function(){return this._xml.length}},{key:"xml",get:function(){return this.closeAll(),this._xml.join("")}}]),e}();y.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},t.exports=y},{"./under-dash":25,"./utils":26}],28:[function(e,t,r){(function(r){function n(e){return n="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},n(e)}function i(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,i)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function s(e){i(a,n,o,s,c,"next",e)}function c(e){i(a,n,o,s,c,"throw",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw a}}}}function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}},{key:"toStringAttribute",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:"toStringValue",value:function(e,t){return void 0===e?t:e}},{key:"toBoolAttribute",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?"1":"0"}},{key:"toBoolValue",value:function(e,t){return void 0===e?t:"1"===e}},{key:"toIntAttribute",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:"toIntValue",value:function(e,t){return void 0===e?t:parseInt(e,10)}},{key:"toFloatAttribute",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:"toFloatValue",value:function(e,t){return void 0===e?t:parseFloat(e)}}]),e}();t.exports=p},{"../../utils/parse-sax":21,"../../utils/xml-stream":27}],32:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;rthis.maxItems))throw new Error("Max ".concat(this.childXform.tag," count (").concat(this.maxItems,") exceeded"));return!0}return!1}},{key:"reconcile",value:function(e,t){if(e){var r=this.childXform;e.forEach((function(e){r.reconcile(e,t)}))}}}]),r}(e("./base-xform"));t.exports=p},{"./base-xform":31}],71:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r0");case"containsErrors":return"ISERROR(".concat(t,")");case"notContainsErrors":return"NOT(ISERROR(".concat(t,"))");default:return}},O=function(e){if(e.formulae&&e.formulae[0])return e.formulae[0];var t=new g(e.ref).tl;switch(e.timePeriod){case"thisWeek":return"AND(TODAY()-ROUNDDOWN(".concat(t,",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(").concat(t,",0)-TODAY()<=7-WEEKDAY(TODAY()))");case"lastWeek":return"AND(TODAY()-ROUNDDOWN(".concat(t,",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(").concat(t,",0)<(WEEKDAY(TODAY())+7))");case"nextWeek":return"AND(ROUNDDOWN(".concat(t,",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(").concat(t,",0)-TODAY()<(15-WEEKDAY(TODAY())))");case"yesterday":return"FLOOR(".concat(t,",1)=TODAY()-1");case"today":return"FLOOR(".concat(t,",1)=TODAY()");case"tomorrow":return"FLOOR(".concat(t,",1)=TODAY()+1");case"last7Days":return"AND(TODAY()-FLOOR(".concat(t,",1)<=6,FLOOR(").concat(t,",1)<=TODAY())");case"lastMonth":return"AND(MONTH(".concat(t,")=MONTH(EDATE(TODAY(),0-1)),YEAR(").concat(t,")=YEAR(EDATE(TODAY(),0-1)))");case"thisMonth":return"AND(MONTH(".concat(t,")=MONTH(TODAY()),YEAR(").concat(t,")=YEAR(TODAY()))");case"nextMonth":return"AND(MONTH(".concat(t,")=MONTH(EDATE(TODAY(),0+1)),YEAR(").concat(t,")=YEAR(EDATE(TODAY(),0+1)))");default:return}},C=function(e){var t=e.type,r=e.operator;switch(t){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:t};default:return{type:t,operator:r}}},R=function(e){u(r,e);var t=h(r);function r(){var e;return s(this,r),(e=t.call(this)).map={dataBar:e.databarXform=new w,extLst:e.extLstRefXform=new _,formula:e.formulaXform=new x,colorScale:e.colorScaleXform=new k,iconSet:e.iconSetXform=new S},e}return l(r,[{key:"render",value:function(e,t){switch(t.type){case"expression":this.renderExpression(e,t);break;case"cellIs":this.renderCellIs(e,t);break;case"top10":this.renderTop10(e,t);break;case"aboveAverage":this.renderAboveAverage(e,t);break;case"dataBar":this.renderDataBar(e,t);break;case"colorScale":this.renderColorScale(e,t);break;case"iconSet":this.renderIconSet(e,t);break;case"containsText":this.renderText(e,t);break;case"timePeriod":this.renderTimePeriod(e,t)}}},{key:"renderExpression",value:function(e,t){e.openNode(this.tag,{type:"expression",dxfId:t.dxfId,priority:t.priority}),this.formulaXform.render(e,t.formulae[0]),e.closeNode()}},{key:"renderCellIs",value:function(e,t){var r=this;e.openNode(this.tag,{type:"cellIs",dxfId:t.dxfId,priority:t.priority,operator:t.operator}),t.formulae.forEach((function(t){r.formulaXform.render(e,t)})),e.closeNode()}},{key:"renderTop10",value:function(e,t){e.leafNode(this.tag,{type:"top10",dxfId:t.dxfId,priority:t.priority,percent:y.toBoolAttribute(t.percent,!1),bottom:y.toBoolAttribute(t.bottom,!1),rank:y.toIntValue(t.rank,10,!0)})}},{key:"renderAboveAverage",value:function(e,t){e.leafNode(this.tag,{type:"aboveAverage",dxfId:t.dxfId,priority:t.priority,aboveAverage:y.toBoolAttribute(t.aboveAverage,!0)})}},{key:"renderDataBar",value:function(e,t){e.openNode(this.tag,{type:"dataBar",priority:t.priority}),this.databarXform.render(e,t),this.extLstRefXform.render(e,t),e.closeNode()}},{key:"renderColorScale",value:function(e,t){e.openNode(this.tag,{type:"colorScale",priority:t.priority}),this.colorScaleXform.render(e,t),e.closeNode()}},{key:"renderIconSet",value:function(e,t){r.isPrimitive(t)&&(e.openNode(this.tag,{type:"iconSet",priority:t.priority}),this.iconSetXform.render(e,t),e.closeNode())}},{key:"renderText",value:function(e,t){e.openNode(this.tag,{type:t.operator,dxfId:t.dxfId,priority:t.priority,operator:y.toStringAttribute(t.operator,"containsText")});var r=E(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:"renderTimePeriod",value:function(e,t){e.openNode(this.tag,{type:"timePeriod",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});var r=O(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:"createNewModel",value:function(e){var t=e.attributes;return o(o({},C(t)),{},{dxfId:y.toIntValue(t.dxfId),priority:y.toIntValue(t.priority),timePeriod:t.timePeriod,percent:y.toBoolValue(t.percent),bottom:y.toBoolValue(t.bottom),rank:y.toIntValue(t.rank),aboveAverage:y.toBoolValue(t.aboveAverage)})}},{key:"onParserClose",value:function(e,t){switch(e){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,t.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(t.model)}}},{key:"tag",get:function(){return"cfRule"}}],[{key:"isPrimitive",value:function(e){return"iconSet"!==e.type||!e.custom&&!T[e.iconSet]}}]),r}(v);t.exports=R},{"../../../../doc/range":10,"../../base-xform":31,"../../composite-xform":47,"./color-scale-xform":84,"./databar-xform":87,"./ext-lst-ref-xform":88,"./formula-xform":89,"./icon-set-xform":90}],83:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1||s>1){var u=i.row+(o-1),f=i.col+(s-1);return m(m({},t.dataValidation),{},{sqref:"".concat(t.address,":").concat(g.encodeAddress(u,f))})}return m(m({},t.dataValidation),{},{sqref:t.address})}return null})).filter(Boolean)}var E=function(e){s(r,e);var t=l(r);function r(){return i(this,r),t.apply(this,arguments)}return a(r,[{key:"render",value:function(e,t){var r=T(t);r.length&&(e.openNode("dataValidations",{count:r.length}),r.forEach((function(t){e.openNode("dataValidation"),"any"!==t.type&&(e.addAttribute("type",t.type),t.operator&&"list"!==t.type&&"between"!==t.operator&&e.addAttribute("operator",t.operator),t.allowBlank&&e.addAttribute("allowBlank","1")),t.showInputMessage&&e.addAttribute("showInputMessage","1"),t.promptTitle&&e.addAttribute("promptTitle",t.promptTitle),t.prompt&&e.addAttribute("prompt",t.prompt),t.showErrorMessage&&e.addAttribute("showErrorMessage","1"),t.errorStyle&&e.addAttribute("errorStyle",t.errorStyle),t.errorTitle&&e.addAttribute("errorTitle",t.errorTitle),t.error&&e.addAttribute("error",t.error),e.addAttribute("sqref",t.sqref),(t.formulae||[]).forEach((function(r,n){e.openNode("formula".concat(n+1)),"date"===t.type?e.writeText(v.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()})),e.closeNode()})),e.closeNode())}},{key:"parseOpen",value:function(e){switch(e.name){case"dataValidations":return this.model={},!0;case"dataValidation":this._address=e.attributes.sqref;var t={type:e.attributes.type||"any",formulae:[]};switch(e.attributes.type&&S(t,e.attributes,"allowBlank"),S(t,e.attributes,"showInputMessage"),S(t,e.attributes,"showErrorMessage"),t.type){case"any":case"list":case"custom":break;default:x(t,e.attributes,"operator","between")}return x(t,e.attributes,"promptTitle"),x(t,e.attributes,"prompt"),x(t,e.attributes,"errorStyle"),x(t,e.attributes,"errorTitle"),x(t,e.attributes,"error"),this._dataValidation=t,!0;case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}},{key:"parseText",value:function(e){this._formula&&this._formula.push(e)}},{key:"parseClose",value:function(e){var t=this;switch(e){case"dataValidations":return!1;case"dataValidation":return this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach((function(e){e.includes(":")?new _(e).forEachAddress((function(e){t.model[e]=t._dataValidation})):t.model[e]=t._dataValidation})),!0;case"formula1":case"formula2":var r=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":r=parseInt(r,10);break;case"decimal":r=parseFloat(r);break;case"date":r=v.excelToDate(parseFloat(r))}return this._dataValidation.formulae.push(r),this._formula=void 0,!0;default:return!0}}},{key:"tag",get:function(){return"dataValidations"}}]),r}(w);t.exports=E},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":25,"../../../utils/utils":26,"../base-xform":31}],93:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0&&t.max>0&&t.min<=t.max&&e.addAttribute("spans","".concat(t.min,":").concat(t.max)),t.styleId&&(e.addAttribute("s",t.styleId),e.addAttribute("customFormat","1")),e.addAttribute("x14ac:dyDescent","0.25"),t.outlineLevel&&e.addAttribute("outlineLevel",t.outlineLevel),t.collapsed&&e.addAttribute("collapsed","1");var n=this.map.c;t.cells.forEach((function(t){n.render(e,t,r)})),e.closeNode()}},{key:"parseOpen",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;if("row"===e.name){this.numRowsSeen+=1;var t=e.attributes.spans?e.attributes.spans.split(":").map((function(e){return parseInt(e,10)})):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),!0!==e.attributes.hidden&&"true"!==e.attributes.hidden&&1!==e.attributes.hidden&&"1"!==e.attributes.hidden||(r.hidden=!0),e.attributes.bestFit&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),e.attributes.collapsed&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}},{key:"parseText",value:function(e){this.parser&&this.parser.parseText(e)}},{key:"parseClose",value:function(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error("Max column count (".concat(this.maxItems,") exceeded"));this.parser=void 0}return!0}return!1}},{key:"reconcile",value:function(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);var r=this.map.c;e.cells.forEach((function(e){r.reconcile(e,t)}))}},{key:"tag",get:function(){return"row"}}]),r}(p);t.exports=b},{"../base-xform":31,"./cell-xform":72}],109:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0){var o={Id:i(n),Type:y.Comments,Target:"../comments".concat(e.id,".xml")};n.push(o);var a={Id:i(n),Type:y.VmlDrawing,Target:"../drawings/vmlDrawing".concat(e.id,".vml")};n.push(a),e.comments.forEach((function(e){e.refAddress=m.decodeAddress(e.ref)})),t.commentRefs.push({commentName:"comments".concat(e.id),vmlDrawing:"vmlDrawing".concat(e.id)})}var s,c=[];e.media.forEach((function(o){if("background"===o.type){var a=i(n);s=t.media[o.imageId],n.push({Id:a,Type:y.Image,Target:"../media/".concat(s.name,".").concat(s.extension)}),e.background={rId:a},e.image=t.media[o.imageId]}else if("image"===o.type){var l=e.drawing;s=t.media[o.imageId],l||(l=e.drawing={rId:i(n),name:"drawing".concat(++t.drawingsCount),anchors:[],rels:[]},t.drawings.push(l),n.push({Id:l.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:"../drawings/".concat(l.name,".xml")}));var u=r.preImageId===o.imageId?c[o.imageId]:c[l.rels.length];u||(u=i(l.rels),c[l.rels.length]=u,l.rels.push({Id:u,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:"../media/".concat(s.name,".").concat(s.extension)}));var f={picture:{rId:u},range:o.range};if(o.hyperlinks&&o.hyperlinks.hyperlink){var h=i(l.rels);c[l.rels.length]=h,f.picture.hyperlinks={tooltip:o.hyperlinks.tooltip,rId:h},l.rels.push({Id:h,Type:y.Hyperlink,Target:o.hyperlinks.hyperlink,TargetMode:"External"})}r.preImageId=o.imageId,l.anchors.push(f)}})),e.tables.forEach((function(e){var r=i(n);e.rId=r,n.push({Id:r,Type:y.Table,Target:"../tables/".concat(e.target)}),e.columns.forEach((function(e){var r=e.style;r&&(e.dxfId=t.styles.addDxfStyle(r))}))})),this.map.extLst.prepare(e,t)}},{key:"render",value:function(e,t){e.openXml(b.StdDocAttributes),e.openNode("worksheet",r.WORKSHEET_ATTRIBUTES);var n=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(n.defaultColWidth=t.properties.defaultColWidth);var i={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},o=t.pageSetup&&t.pageSetup.margins,a={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},s=t.sheetProtection;this.map.sheetPr.render(e,i),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,n),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,s),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,a),this.map.pageMargins.render(e,o),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach((function(t){t.Type===y.VmlDrawing&&e.leafNode("legacyDrawing",{"r:id":t.Id})})),e.closeNode()}},{key:"parseOpen",value:function(e){return this.parser?(this.parser.parseOpen(e),!0):"worksheet"===e.name?(p.each(this.map,(function(e){e.reset()})),!0):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0)}},{key:"parseText",value:function(e){this.parser&&this.parser.parseText(e)}},{key:"parseClose",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if("worksheet"===e){var t=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(t.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(t.outlineProperties=this.map.sheetPr.model.outlineProperties);var r={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},n=Object.assign(r,this.map.pageSetup.model,this.map.printOptions.model),i=W(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:t,views:this.map.sheetViews.model,pageSetup:n,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:i},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}return!0}},{key:"reconcile",value:function(e,t){var r=(e.relationships||[]).reduce((function(r,n){if(r[n.Id]=n,n.Type===y.Comments&&(e.comments=t.comments[n.Target].comments),n.Type===y.VmlDrawing&&e.comments&&e.comments.length){var i=t.vmlDrawings[n.Target].comments;e.comments.forEach((function(e,t){e.note=Object.assign({},e.note,i[t])}))}return r}),{});if(t.commentsMap=(e.comments||[]).reduce((function(e,t){return t.ref&&(e[t.ref]=t),e}),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce((function(e,t){return t.rId&&(e[t.address]=r[t.rId].Target),e}),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach((function(e){e.cells=e.cells&&e.cells.filter(Boolean)||[]})),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){var n=r[e.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(n){var i=n[1];t.drawings[i].anchors.forEach((function(t){if(t.medium){var r={type:"image",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}}))}}var o=e.background&&r[e.background.rId];if(o){var a=o.Target.split("/media/")[1],s=t.mediaIndex&&t.mediaIndex[a];void 0!==s&&e.media.push({type:"background",imageId:s})}e.tables=(e.tables||[]).map((function(e){var n=r[e.rId];return t.tables[n.Target]})),delete e.relationships,delete e.hyperlinks,delete e.comments}}]),r}(g);$.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},t.exports=$},{"../../../utils/col-cache":19,"../../../utils/under-dash":25,"../../../utils/xml-stream":27,"../../rel-type":30,"../base-xform":31,"../list-xform":70,"./auto-filter-xform":71,"./cf/conditional-formattings-xform":86,"./col-xform":91,"./data-validations-xform":92,"./dimension-xform":93,"./drawing-xform":94,"./ext-lst-xform":95,"./header-footer-xform":96,"./hyperlink-xform":97,"./merge-cell-xform":98,"./merges":99,"./page-margins-xform":102,"./page-setup-xform":104,"./picture-xform":105,"./print-options-xform":106,"./row-breaks-xform":107,"./row-xform":108,"./sheet-format-properties-xform":109,"./sheet-properties-xform":110,"./sheet-protection-xform":111,"./sheet-view-xform":112,"./table-part-xform":113}],115:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r=-90&&e<=90?e:void 0},indent:function(e){return e=m.validInt(e),Math.max(0,e)},readingOrder:function(e){switch(e){case"ltr":return p.ReadingOrder.LeftToRight;case"rtl":return p.ReadingOrder.RightToLeft;default:return}}},v={toXml:function(e){if(e=y.textRotation(e)){if("vertical"===e)return 255;var t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},toModel:function(e){var t=m.validInt(e);if(void 0!==t){if(255===t)return"vertical";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}}},g=function(e){s(r,e);var t=l(r);function r(){return i(this,r),t.apply(this,arguments)}return a(r,[{key:"render",value:function(e,t){e.addRollback(),e.openNode("alignment");var r=!1;function n(t,n){n&&(e.addAttribute(t,n),r=!0)}n("horizontal",y.horizontal(t.horizontal)),n("vertical",y.vertical(t.vertical)),n("wrapText",!!y.wrapText(t.wrapText)&&"1"),n("shrinkToFit",!!y.shrinkToFit(t.shrinkToFit)&&"1"),n("indent",y.indent(t.indent)),n("textRotation",v.toXml(t.textRotation)),n("readingOrder",y.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}},{key:"parseOpen",value:function(e){var t={},r=!1;function n(e,n,i){e&&(t[n]=i,r=!0)}n(e.attributes.horizontal,"horizontal",e.attributes.horizontal),n(e.attributes.vertical,"vertical","center"===e.attributes.vertical?"middle":e.attributes.vertical),n(e.attributes.wrapText,"wrapText",!!e.attributes.wrapText),n(e.attributes.shrinkToFit,"shrinkToFit",!!e.attributes.shrinkToFit),n(e.attributes.indent,"indent",parseInt(e.attributes.indent,10)),n(e.attributes.textRotation,"textRotation",v.toModel(e.attributes.textRotation)),n(e.attributes.readingOrder,"readingOrder","2"===e.attributes.readingOrder?"rtl":"ltr"),this.model=r?t:null}},{key:"parseText",value:function(){}},{key:"parseClose",value:function(){return!1}},{key:"tag",get:function(){return"alignment"}}]),r}(b);t.exports=g},{"../../../doc/enums":7,"../../../utils/utils":26,"../base-xform":31}],126:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=1)){e.next=6;break}return o=n.substr(i+1),a=n.substr(0,i),e.next=6,new Promise((function(e,i){var s=new p;s.on("finish",(function(){r.mediaIndex[n]=r.media.length,r.mediaIndex[a]=r.media.length;var t={type:"image",name:a,extension:o,buffer:s.toBuffer()};r.media.push(t),e()})),t.on("error",(function(e){i(e)})),t.pipe(s)}));case 6:case"end":return e.stop()}}),e)})));function t(t,r,n){return e.apply(this,arguments)}return t}()},{key:"_processDrawingEntry",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r,n){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new E,e.next=3,i.parseStream(t);case 3:o=e.sent,r.drawings[n]=o;case 5:case"end":return e.stop()}}),e)})));function t(t,r,n){return e.apply(this,arguments)}return t}()},{key:"_processDrawingRelsEntry",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r,n){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new _,e.next=3,i.parseStream(t);case 3:o=e.sent,r.drawingRels[n]=o;case 5:case"end":return e.stop()}}),e)})));function t(t,r,n){return e.apply(this,arguments)}return t}()},{key:"_processVmlDrawingEntry",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r,n){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new R,e.next=3,i.parseStream(t);case 3:o=e.sent,r.vmlDrawings["../drawings/".concat(n,".vml")]=o;case 5:case"end":return e.stop()}}),e)})));function t(t,r,n){return e.apply(this,arguments)}return t}()},{key:"_processThemeEntry",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,new Promise((function(e,i){var o=new p;t.on("error",i),o.on("error",i),o.on("finish",(function(){r.themes[n]=o.read().toString(),e()})),t.pipe(o)}));case 2:case"end":return e.stop()}}),e)})));function t(t,r,n){return e.apply(this,arguments)}return t}()},{key:"createInputStream",value:function(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}},{key:"read",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r){var i,o,a,s,c,u,f,d;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:!t[Symbol.asyncIterator]&&t.pipe&&(t=t.pipe(new h)),i=[],o=!0,a=!1,e.prev=4,c=l(t);case 6:return e.next=8,c.next();case 8:return u=e.sent,o=u.done,e.next=12,u.value;case 12:if(f=e.sent,o){e.next=19;break}d=f,i.push(d);case 16:o=!0,e.next=6;break;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(4),a=!0,s=e.t0;case 25:if(e.prev=25,e.prev=26,o||null==c.return){e.next=30;break}return e.next=30,c.return();case 30:if(e.prev=30,!a){e.next=33;break}throw s;case 33:return e.finish(30);case 34:return e.finish(25);case 35:return e.abrupt("return",this.load(n.concat(i),r));case 36:case"end":return e.stop()}}),e,this,[[4,21,25,35],[26,,30,34]])})));function t(t,r){return e.apply(this,arguments)}return t}()},{key:"load",value:function(){var e=o(regeneratorRuntime.mark((function e(t,i){var o,a,s,c,l,u,d,p,m,b,_,x,S,T,E,O,C;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=i&&i.base64?n.from(t.toString(),"base64"):t,a={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},e.next=4,f.loadAsync(o);case 4:s=e.sent,c=0,l=Object.values(s.files);case 6:if(!(c0&&(r=new b,o.render(r,e),t.append(r.xml,{name:"xl/comments".concat(e.id,".xml")}),r=new b,a.render(r,e),t.append(r.xml,{name:"xl/drawings/vmlDrawing".concat(e.id,".vml")}))}));case 5:case"end":return e.stop()}}),e)})));function t(t,r){return e.apply(this,arguments)}return t}()},{key:"_finalize",value:function(e){var t=this;return new Promise((function(r,n){e.on("finish",(function(){r(t)})),e.on("error",n),e.finalize()}))}},{key:"prepareModel",value:function(e,t){e.creator=e.creator||"ExcelJS",e.lastModifiedBy=e.lastModifiedBy||"ExcelJS",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new w,e.styles=e.useStyles?new v(!0):new v.Mock;var r=new S,n=new T;r.prepare(e);var i={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};i.drawings=e.drawings=[],i.commentRefs=e.commentRefs=[];var o=0;e.tables=[],e.worksheets.forEach((function(t){t.tables.forEach((function(t){o++,t.target="table".concat(o,".xml"),t.id=o,e.tables.push(t)})),n.prepare(t,i)}))}},{key:"write",value:function(){var e=o(regeneratorRuntime.mark((function e(t,r){var n,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=r||{},n=this.workbook.model,(i=new d.ZipWriter(r.zip)).pipe(t),this.prepareModel(n,r),e.next=7,this.addContentTypes(i,n);case 7:return e.next=9,this.addOfficeRels(i,n);case 9:return e.next=11,this.addWorkbookRels(i,n);case 11:return e.next=13,this.addWorksheets(i,n);case 13:return e.next=15,this.addSharedStrings(i,n);case 15:return e.next=17,this.addDrawings(i,n);case 17:return e.next=19,this.addTables(i,n);case 19:return e.next=21,Promise.all([this.addThemes(i,n),this.addStyles(i,n)]);case 21:return e.next=23,this.addMedia(i,n);case 23:return e.next=25,Promise.all([this.addApp(i,n),this.addCore(i,n)]);case 25:return e.next=27,this.addWorkbook(i,n);case 27:return e.abrupt("return",this._finalize(i));case 28:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}()},{key:"writeFile",value:function(e,t){var r=this,n=u.createWriteStream(e);return new Promise((function(e,i){n.on("finish",(function(){e()})),n.on("error",(function(e){i(e)})),r.write(n,t).then((function(){n.end()}))}))}},{key:"writeBuffer",value:function(){var e=o(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new p,e.next=3,this.write(r,t);case 3:return e.abrupt("return",r.read());case 4:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()}]),e}();P.RelType=e("./rel-type"),t.exports=P}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":23,"../utils/utils":26,"../utils/xml-stream":27,"../utils/zip-stream":28,"./rel-type":30,"./xform/book/workbook-xform":37,"./xform/comment/comments-xform":39,"./xform/comment/vml-notes-xform":44,"./xform/core/app-xform":50,"./xform/core/content-types-xform":51,"./xform/core/core-xform":52,"./xform/core/relationships-xform":54,"./xform/drawing/drawing-xform":61,"./xform/sheet/worksheet-xform":114,"./xform/strings/shared-strings-xform":123,"./xform/style/styles-xform":134,"./xform/table/table-xform":140,"./xml/theme1.js":142,_process:467,buffer:216,fs:215,jszip:399,"readable-stream":491}],142:[function(e,t,r){t.exports='\n '},{}],143:[function(e,t,r){(function(t){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};n(this,e),this.objectMode=!0,this.delimiter=",",this.rowDelimiter="\n",this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\ufeff",this.alwaysWriteHeaders=!1,Object.assign(this,r||{}),void 0===(null==r?void 0:r.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null==r?void 0:r.quote)?this.quote='"':!1===(null==r?void 0:r.quote)&&(this.quote=""),"string"!=typeof(null==r?void 0:r.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&(null===(t=r.writeHeaders)||void 0===t||t),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote="".concat(this.escape).concat(this.quote)};r.FormatterOptions=i},{}],145:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},i=[],o=new c.Writable({write:function(e,t,r){i.push(e),r()}});return new Promise((function(a,s){o.on("error",s).on("finish",(function(){return a(t.concat(i))})),r.write(e,n).pipe(o)}))},r.writeToString=function(e,t){return r.writeToBuffer(e,t).then((function(e){return e.toString()}))},r.writeToPath=function(e,t,n){var i=l.createWriteStream(e,{encoding:"utf8"});return r.write(t,n).pipe(i)}}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":143,"./FormatterOptions":144,"./types":149,buffer:216,fs:215,stream:506,util:525}],149:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.isSyncTransform=void 0,r.isSyncTransform=function(e){return 1===e.length}},{}],150:[function(e,t,r){(function(t){function n(e){return n="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},n(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var r=0;r1?r-1:0),o=1;o=i||n.hasHitRowLimit)return r();if(n.parsedLineCount+=1,n.shouldSkipLine)return s();var c=e[a];n.rowCount+=1,n.parsedRowCount+=1;var l=n.rowCount;return n.transformRow(c,(function(e,t){if(e)return n.rowCount-=1,s(e);if(!t)return s(new Error("expected transform result"));if(t.isValid){if(t.row)return n.pushRow(t.row,s)}else n.emit("data-invalid",t.row,l,t.reason);return s()}))}(0)}},{key:"transformRow",value:function(e,t){var r=this;try{this.headerTransformer.transform(e,(function(n,i){return n?t(n):i?i.isValid?i.row?r.shouldEmitRows?r.rowTransformerValidator.transformAndValidate(i.row,t):r.skipRow(t):(r.rowCount-=1,r.parsedRowCount-=1,t(null,{row:null,isValid:!0})):r.shouldEmitRows?t(null,{isValid:!1,row:e}):r.skipRow(t):t(new Error("Expected result from header transform"))}))}catch(e){t(e)}}},{key:"checkAndEmitHeaders",value:function(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}},{key:"skipRow",value:function(e){return this.rowCount-=1,e(null,{row:null,isValid:!0})}},{key:"pushRow",value:function(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}},{key:"hasHitRowLimit",get:function(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}},{key:"shouldEmitRows",get:function(){return this.parsedRowCount>this.parserOptions.skipRows}},{key:"shouldSkipLine",get:function(){return this.parsedLineCount<=this.parserOptions.skipLines}}]),n}(y.Transform);r.CsvParserStream=w}).call(this,e("timers").setImmediate)},{"./parser":162,"./transforms":165,stream:506,string_decoder:520,timers:521}],151:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.ParserOptions=void 0;var o=i(e("lodash.escaperegexp")),a=i(e("lodash.isnil")),s=function e(t){var r;if(n(this,e),this.objectMode=!0,this.delimiter=",",this.ignoreEmpty=!1,this.quote='"',this.escape=null,this.escapeChar=this.quote,this.comment=null,this.supportsComments=!1,this.ltrim=!1,this.rtrim=!1,this.trim=!1,this.headers=null,this.renameHeaders=!1,this.strictColumnHandling=!1,this.discardUnmappedColumns=!1,this.carriageReturn="\r",this.encoding="utf8",this.limitRows=!1,this.maxRows=0,this.skipLines=0,this.skipRows=0,Object.assign(this,t||{}),this.delimiter.length>1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=o.default(this.delimiter),this.escapeChar=null!==(r=this.escape)&&void 0!==r?r:this.quote,this.supportsComments=!a.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp("([^\\s]|\\r\\n|\\n|\\r|".concat(this.escapedDelimiter,")")),this.maxRows>0&&(this.limitRows=!0)};r.ParserOptions=s},{"lodash.escaperegexp":426,"lodash.isnil":431}],152:[function(e,t,r){var n=Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},i=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},a=function(e,t){for(var r in e)"default"===r||t.hasOwnProperty(r)||n(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),r.parseString=r.parseFile=r.parseStream=r.parse=void 0;var s=o(e("fs")),c=e("stream"),l=e("./ParserOptions"),u=e("./CsvParserStream");a(e("./types"),r);var f=e("./CsvParserStream");Object.defineProperty(r,"CsvParserStream",{enumerable:!0,get:function(){return f.CsvParserStream}});var h=e("./ParserOptions");Object.defineProperty(r,"ParserOptions",{enumerable:!0,get:function(){return h.ParserOptions}}),r.parse=function(e){return new u.CsvParserStream(new l.ParserOptions(e))},r.parseStream=function(e,t){return e.pipe(new u.CsvParserStream(new l.ParserOptions(t)))},r.parseFile=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return s.createReadStream(e).pipe(new u.CsvParserStream(new l.ParserOptions(t)))},r.parseString=function(e,t){var r=new c.Readable;return r.push(e),r.push(null),r.pipe(new u.CsvParserStream(new l.ParserOptions(t)))}},{"./CsvParserStream":150,"./ParserOptions":151,"./types":166,fs:215,stream:506}],153:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;rthis.cursor}},{key:"nextNonSpaceToken",get:function(){var e=this.lineFromCursor,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;var r=t.exec(e);if(null==r)return null;var n=r[1],i=this.cursor+(r.index||0);return new a.Token({token:n,startCursor:i,endCursor:i+n.length-1})}},{key:"nextCharacterToken",get:function(){var e=this.cursor;return this.lineLength<=e?null:new a.Token({token:this.line[e],startCursor:e,endCursor:e})}},{key:"lineFromCursor",get:function(){return this.line.substr(this.cursor)}}]),e}();r.Scanner=c},{"./Token":156}],156:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;rthis.headersLength){if(!t.strictColumnHandling)throw new Error("Unexpected Error: column header mismatch expected: ".concat(this.headersLength," columns got: ").concat(e.length));return{row:e,isValid:!1,reason:"Column header mismatch expected: ".concat(this.headersLength," columns got: ").concat(e.length)}}return t.strictColumnHandling&&e.length1}));throw new Error("Duplicate headers found ".concat(JSON.stringify(i)))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}]),e}();r.HeaderTransformer=f},{"lodash.groupby":427,"lodash.isfunction":430,"lodash.isundefined":432,"lodash.uniq":433}],164:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r>6],i=0==(32&r);if(31==(31&r)){var o=r;for(r=0;128==(128&o);){if(o=e.readUInt8(t),e.isError(o))return o;r<<=7,r|=127&o}}else r&=31;return{cls:n,primitive:i,tag:r,tagStr:s.tag[r]}}function f(e,t,r){var n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(0==(128&n))return n;var i=127&n;if(i>4)return e.error("length octect is too long");n=0;for(var o=0;o=31?n.error("Multi-octet tag encoding unsupported"):(t||(i|=32),i|=a.tagClassByName[r||"universal"]<<6)}t.exports=s,s.prototype.encode=function(e,t){return this.tree._encode(e,t).join()},n(c,o),c.prototype._encodeComposite=function(e,t,r,n){var o=u(e,t,r,this.reporter);if(n.length<128){var a=i.alloc(2);return a[0]=o,a[1]=n.length,this._createEncoderBuffer([a,n])}for(var s=1,c=n.length;c>=256;c>>=8)s++;var l=i.alloc(2+s);l[0]=o,l[1]=128|s;for(var f=1+s,h=n.length;h>0;f--,h>>=8)l[f]=255&h;return this._createEncoderBuffer([l,n])},c.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){for(var r=i.alloc(2*e.length),n=0;n=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}for(var a=0,s=0;s=128;c>>=7)a++}for(var l=i.alloc(a),u=l.length-1,f=e.length-1;f>=0;f--){var h=e[f];for(l[u--]=127&h;(h>>=7)>0;)l[u--]=128|127&h}return this._createEncoderBuffer(l)},c.prototype._encodeTime=function(e,t){var r,n=new Date(e);return"gentime"===t?r=[l(n.getUTCFullYear()),l(n.getUTCMonth()+1),l(n.getUTCDate()),l(n.getUTCHours()),l(n.getUTCMinutes()),l(n.getUTCSeconds()),"Z"].join(""):"utctime"===t?r=[l(n.getUTCFullYear()%100),l(n.getUTCMonth()+1),l(n.getUTCDate()),l(n.getUTCHours()),l(n.getUTCMinutes()),l(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(r,"octstr")},c.prototype._encodeNull=function(){return this._createEncoderBuffer("")},c.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!i.isBuffer(e)){var r=e.toArray();!e.sign&&128&r[0]&&r.unshift(0),e=i.from(r)}if(i.isBuffer(e)){var n=e.length;0===e.length&&n++;var o=i.alloc(n);return e.copy(o),0===e.length&&(o[0]=0),this._createEncoderBuffer(o)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);for(var a=1,s=e;s>=256;s>>=8)a++;for(var c=new Array(a),l=c.length-1;l>=0;l--)c[l]=255&e,e>>=8;return 128&c[0]&&c.unshift(0),this._createEncoderBuffer(i.from(c))},c.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},c.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},c.prototype._skipDefault=function(e,t,r){var n,i=this._baseState;if(null===i.default)return!1;var o=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,t,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function l(e,t,r,n){for(var i=0,o=Math.min(e.length,r),a=t;a=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(e){return e instanceof a||null!==e&&"object"===n(e)&&e.constructor.wordSize===a.wordSize&&Array.isArray(e.words)},a.max=function(e,t){return e.cmp(t)>0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"===n(e))return this._initArray(e,t,r);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===t?this._parseHex(e,o):this._parseBase(e,t,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var n=0;n=0;n-=3)a=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(n=0,o=0;n>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=c(e,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=c(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},a.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,c=0,u=r;u1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}function p(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,c=a/67108864|0;r.words[0]=s;for(var l=1;l>>26,f=67108863&c,h=Math.min(l,t.length-1),d=Math.max(0,l-e.length+1);d<=h;d++){var p=l-d|0;u+=(a=(i=0|e.words[p])*(o=0|t.words[d])+f)/67108864|0,f=67108863&a}r.words[l]=0|f,c=0|u}return 0!==c?r.words[l]=0|c:r.length--,r.strip()}a.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var n=0,o=0,a=0;a>>24-n&16777215)||a!==this.length-1?u[6-c.length]+c+r:c+r,(n+=2)>=26&&(n-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var l=f[e],d=h[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(d).toString(e);r=(p=p.idivn(d)).isZero()?m+r:u[l-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},a.prototype.toArrayLike=function(e,t,r){var n=this.byteLength(),o=r||Math.max(1,n);i(n<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var a,s,c="le"===t,l=new e(o),u=this.clone();if(c){for(s=0;!u.isZero();s++)a=u.andln(255),u.iushrn(8),l[s]=a;for(;s=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var n=0;n0&&(this.words[n]=~this.words[n]&67108863>>26-r),this.strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,n=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,d=0|a[1],p=8191&d,m=d>>>13,b=0|a[2],y=8191&b,v=b>>>13,g=0|a[3],w=8191&g,_=g>>>13,x=0|a[4],k=8191&x,S=x>>>13,T=0|a[5],E=8191&T,O=T>>>13,C=0|a[6],R=8191&C,A=C>>>13,M=0|a[7],P=8191&M,j=M>>>13,I=0|a[8],D=8191&I,N=I>>>13,F=0|a[9],L=8191&F,B=F>>>13,z=0|s[0],U=8191&z,H=z>>>13,W=0|s[1],$=8191&W,V=W>>>13,q=0|s[2],X=8191&q,G=q>>>13,Y=0|s[3],K=8191&Y,Z=Y>>>13,J=0|s[4],Q=8191&J,ee=J>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],ce=8191&se,le=se>>>13,ue=0|s[8],fe=8191&ue,he=ue>>>13,de=0|s[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(l+(n=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,H))+Math.imul(h,U)|0))<<13)|0;l=((o=Math.imul(h,H))+(i>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(p,U),i=(i=Math.imul(p,H))+Math.imul(m,U)|0,o=Math.imul(m,H);var ye=(l+(n=n+Math.imul(f,$)|0)|0)+((8191&(i=(i=i+Math.imul(f,V)|0)+Math.imul(h,$)|0))<<13)|0;l=((o=o+Math.imul(h,V)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,H))+Math.imul(v,U)|0,o=Math.imul(v,H),n=n+Math.imul(p,$)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,V)|0;var ve=(l+(n=n+Math.imul(f,X)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,X)|0))<<13)|0;l=((o=o+Math.imul(h,G)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,U),i=(i=Math.imul(w,H))+Math.imul(_,U)|0,o=Math.imul(_,H),n=n+Math.imul(y,$)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,$)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,X)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(m,X)|0,o=o+Math.imul(m,G)|0;var ge=(l+(n=n+Math.imul(f,K)|0)|0)+((8191&(i=(i=i+Math.imul(f,Z)|0)+Math.imul(h,K)|0))<<13)|0;l=((o=o+Math.imul(h,Z)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(k,U),i=(i=Math.imul(k,H))+Math.imul(S,U)|0,o=Math.imul(S,H),n=n+Math.imul(w,$)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,$)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(v,X)|0,o=o+Math.imul(v,G)|0,n=n+Math.imul(p,K)|0,i=(i=i+Math.imul(p,Z)|0)+Math.imul(m,K)|0,o=o+Math.imul(m,Z)|0;var we=(l+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,ee)|0)+Math.imul(h,Q)|0))<<13)|0;l=((o=o+Math.imul(h,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(E,U),i=(i=Math.imul(E,H))+Math.imul(O,U)|0,o=Math.imul(O,H),n=n+Math.imul(k,$)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(S,$)|0,o=o+Math.imul(S,V)|0,n=n+Math.imul(w,X)|0,i=(i=i+Math.imul(w,G)|0)+Math.imul(_,X)|0,o=o+Math.imul(_,G)|0,n=n+Math.imul(y,K)|0,i=(i=i+Math.imul(y,Z)|0)+Math.imul(v,K)|0,o=o+Math.imul(v,Z)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,ee)|0;var _e=(l+(n=n+Math.imul(f,re)|0)|0)+((8191&(i=(i=i+Math.imul(f,ne)|0)+Math.imul(h,re)|0))<<13)|0;l=((o=o+Math.imul(h,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(R,U),i=(i=Math.imul(R,H))+Math.imul(A,U)|0,o=Math.imul(A,H),n=n+Math.imul(E,$)|0,i=(i=i+Math.imul(E,V)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(S,X)|0,o=o+Math.imul(S,G)|0,n=n+Math.imul(w,K)|0,i=(i=i+Math.imul(w,Z)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,Z)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(m,re)|0,o=o+Math.imul(m,ne)|0;var xe=(l+(n=n+Math.imul(f,oe)|0)|0)+((8191&(i=(i=i+Math.imul(f,ae)|0)+Math.imul(h,oe)|0))<<13)|0;l=((o=o+Math.imul(h,ae)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(P,U),i=(i=Math.imul(P,H))+Math.imul(j,U)|0,o=Math.imul(j,H),n=n+Math.imul(R,$)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(A,$)|0,o=o+Math.imul(A,V)|0,n=n+Math.imul(E,X)|0,i=(i=i+Math.imul(E,G)|0)+Math.imul(O,X)|0,o=o+Math.imul(O,G)|0,n=n+Math.imul(k,K)|0,i=(i=i+Math.imul(k,Z)|0)+Math.imul(S,K)|0,o=o+Math.imul(S,Z)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(y,re)|0,i=(i=i+Math.imul(y,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(m,oe)|0,o=o+Math.imul(m,ae)|0;var ke=(l+(n=n+Math.imul(f,ce)|0)|0)+((8191&(i=(i=i+Math.imul(f,le)|0)+Math.imul(h,ce)|0))<<13)|0;l=((o=o+Math.imul(h,le)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(D,U),i=(i=Math.imul(D,H))+Math.imul(N,U)|0,o=Math.imul(N,H),n=n+Math.imul(P,$)|0,i=(i=i+Math.imul(P,V)|0)+Math.imul(j,$)|0,o=o+Math.imul(j,V)|0,n=n+Math.imul(R,X)|0,i=(i=i+Math.imul(R,G)|0)+Math.imul(A,X)|0,o=o+Math.imul(A,G)|0,n=n+Math.imul(E,K)|0,i=(i=i+Math.imul(E,Z)|0)+Math.imul(O,K)|0,o=o+Math.imul(O,Z)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(y,oe)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,ce)|0,i=(i=i+Math.imul(p,le)|0)+Math.imul(m,ce)|0,o=o+Math.imul(m,le)|0;var Se=(l+(n=n+Math.imul(f,fe)|0)|0)+((8191&(i=(i=i+Math.imul(f,he)|0)+Math.imul(h,fe)|0))<<13)|0;l=((o=o+Math.imul(h,he)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(L,U),i=(i=Math.imul(L,H))+Math.imul(B,U)|0,o=Math.imul(B,H),n=n+Math.imul(D,$)|0,i=(i=i+Math.imul(D,V)|0)+Math.imul(N,$)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=(i=i+Math.imul(P,G)|0)+Math.imul(j,X)|0,o=o+Math.imul(j,G)|0,n=n+Math.imul(R,K)|0,i=(i=i+Math.imul(R,Z)|0)+Math.imul(A,K)|0,o=o+Math.imul(A,Z)|0,n=n+Math.imul(E,Q)|0,i=(i=i+Math.imul(E,ee)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,ee)|0,n=n+Math.imul(k,re)|0,i=(i=i+Math.imul(k,ne)|0)+Math.imul(S,re)|0,o=o+Math.imul(S,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(y,ce)|0,i=(i=i+Math.imul(y,le)|0)+Math.imul(v,ce)|0,o=o+Math.imul(v,le)|0,n=n+Math.imul(p,fe)|0,i=(i=i+Math.imul(p,he)|0)+Math.imul(m,fe)|0,o=o+Math.imul(m,he)|0;var Te=(l+(n=n+Math.imul(f,pe)|0)|0)+((8191&(i=(i=i+Math.imul(f,me)|0)+Math.imul(h,pe)|0))<<13)|0;l=((o=o+Math.imul(h,me)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(L,$),i=(i=Math.imul(L,V))+Math.imul(B,$)|0,o=Math.imul(B,V),n=n+Math.imul(D,X)|0,i=(i=i+Math.imul(D,G)|0)+Math.imul(N,X)|0,o=o+Math.imul(N,G)|0,n=n+Math.imul(P,K)|0,i=(i=i+Math.imul(P,Z)|0)+Math.imul(j,K)|0,o=o+Math.imul(j,Z)|0,n=n+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(A,Q)|0,o=o+Math.imul(A,ee)|0,n=n+Math.imul(E,re)|0,i=(i=i+Math.imul(E,ne)|0)+Math.imul(O,re)|0,o=o+Math.imul(O,ne)|0,n=n+Math.imul(k,oe)|0,i=(i=i+Math.imul(k,ae)|0)+Math.imul(S,oe)|0,o=o+Math.imul(S,ae)|0,n=n+Math.imul(w,ce)|0,i=(i=i+Math.imul(w,le)|0)+Math.imul(_,ce)|0,o=o+Math.imul(_,le)|0,n=n+Math.imul(y,fe)|0,i=(i=i+Math.imul(y,he)|0)+Math.imul(v,fe)|0,o=o+Math.imul(v,he)|0;var Ee=(l+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;l=((o=o+Math.imul(m,me)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,X),i=(i=Math.imul(L,G))+Math.imul(B,X)|0,o=Math.imul(B,G),n=n+Math.imul(D,K)|0,i=(i=i+Math.imul(D,Z)|0)+Math.imul(N,K)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,ee)|0)+Math.imul(j,Q)|0,o=o+Math.imul(j,ee)|0,n=n+Math.imul(R,re)|0,i=(i=i+Math.imul(R,ne)|0)+Math.imul(A,re)|0,o=o+Math.imul(A,ne)|0,n=n+Math.imul(E,oe)|0,i=(i=i+Math.imul(E,ae)|0)+Math.imul(O,oe)|0,o=o+Math.imul(O,ae)|0,n=n+Math.imul(k,ce)|0,i=(i=i+Math.imul(k,le)|0)+Math.imul(S,ce)|0,o=o+Math.imul(S,le)|0,n=n+Math.imul(w,fe)|0,i=(i=i+Math.imul(w,he)|0)+Math.imul(_,fe)|0,o=o+Math.imul(_,he)|0;var Oe=(l+(n=n+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,me)|0)+Math.imul(v,pe)|0))<<13)|0;l=((o=o+Math.imul(v,me)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(L,K),i=(i=Math.imul(L,Z))+Math.imul(B,K)|0,o=Math.imul(B,Z),n=n+Math.imul(D,Q)|0,i=(i=i+Math.imul(D,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(P,re)|0,i=(i=i+Math.imul(P,ne)|0)+Math.imul(j,re)|0,o=o+Math.imul(j,ne)|0,n=n+Math.imul(R,oe)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(A,oe)|0,o=o+Math.imul(A,ae)|0,n=n+Math.imul(E,ce)|0,i=(i=i+Math.imul(E,le)|0)+Math.imul(O,ce)|0,o=o+Math.imul(O,le)|0,n=n+Math.imul(k,fe)|0,i=(i=i+Math.imul(k,he)|0)+Math.imul(S,fe)|0,o=o+Math.imul(S,he)|0;var Ce=(l+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;l=((o=o+Math.imul(_,me)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(L,Q),i=(i=Math.imul(L,ee))+Math.imul(B,Q)|0,o=Math.imul(B,ee),n=n+Math.imul(D,re)|0,i=(i=i+Math.imul(D,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(P,oe)|0,i=(i=i+Math.imul(P,ae)|0)+Math.imul(j,oe)|0,o=o+Math.imul(j,ae)|0,n=n+Math.imul(R,ce)|0,i=(i=i+Math.imul(R,le)|0)+Math.imul(A,ce)|0,o=o+Math.imul(A,le)|0,n=n+Math.imul(E,fe)|0,i=(i=i+Math.imul(E,he)|0)+Math.imul(O,fe)|0,o=o+Math.imul(O,he)|0;var Re=(l+(n=n+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,me)|0)+Math.imul(S,pe)|0))<<13)|0;l=((o=o+Math.imul(S,me)|0)+(i>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(L,re),i=(i=Math.imul(L,ne))+Math.imul(B,re)|0,o=Math.imul(B,ne),n=n+Math.imul(D,oe)|0,i=(i=i+Math.imul(D,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(P,ce)|0,i=(i=i+Math.imul(P,le)|0)+Math.imul(j,ce)|0,o=o+Math.imul(j,le)|0,n=n+Math.imul(R,fe)|0,i=(i=i+Math.imul(R,he)|0)+Math.imul(A,fe)|0,o=o+Math.imul(A,he)|0;var Ae=(l+(n=n+Math.imul(E,pe)|0)|0)+((8191&(i=(i=i+Math.imul(E,me)|0)+Math.imul(O,pe)|0))<<13)|0;l=((o=o+Math.imul(O,me)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(L,oe),i=(i=Math.imul(L,ae))+Math.imul(B,oe)|0,o=Math.imul(B,ae),n=n+Math.imul(D,ce)|0,i=(i=i+Math.imul(D,le)|0)+Math.imul(N,ce)|0,o=o+Math.imul(N,le)|0,n=n+Math.imul(P,fe)|0,i=(i=i+Math.imul(P,he)|0)+Math.imul(j,fe)|0,o=o+Math.imul(j,he)|0;var Me=(l+(n=n+Math.imul(R,pe)|0)|0)+((8191&(i=(i=i+Math.imul(R,me)|0)+Math.imul(A,pe)|0))<<13)|0;l=((o=o+Math.imul(A,me)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(L,ce),i=(i=Math.imul(L,le))+Math.imul(B,ce)|0,o=Math.imul(B,le),n=n+Math.imul(D,fe)|0,i=(i=i+Math.imul(D,he)|0)+Math.imul(N,fe)|0,o=o+Math.imul(N,he)|0;var Pe=(l+(n=n+Math.imul(P,pe)|0)|0)+((8191&(i=(i=i+Math.imul(P,me)|0)+Math.imul(j,pe)|0))<<13)|0;l=((o=o+Math.imul(j,me)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(L,fe),i=(i=Math.imul(L,he))+Math.imul(B,fe)|0,o=Math.imul(B,he);var je=(l+(n=n+Math.imul(D,pe)|0)|0)+((8191&(i=(i=i+Math.imul(D,me)|0)+Math.imul(N,pe)|0))<<13)|0;l=((o=o+Math.imul(N,me)|0)+(i>>>13)|0)+(je>>>26)|0,je&=67108863;var Ie=(l+(n=Math.imul(L,pe))|0)+((8191&(i=(i=Math.imul(L,me))+Math.imul(B,pe)|0))<<13)|0;return l=((o=Math.imul(B,me))+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,c[0]=be,c[1]=ye,c[2]=ve,c[3]=ge,c[4]=we,c[5]=_e,c[6]=xe,c[7]=ke,c[8]=Se,c[9]=Te,c[10]=Ee,c[11]=Oe,c[12]=Ce,c[13]=Re,c[14]=Ae,c[15]=Me,c[16]=Pe,c[17]=je,c[18]=Ie,0!==l&&(c[19]=l,r.length++),r};function b(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function y(e,t,r){return(new v).mulp(e,t,r)}function v(e,t){this.x=e,this.y=t}Math.imul||(m=p),a.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?m(this,e,t):r<63?p(this,e,t):r<1024?b(this,e,t):y(this,e,t)},v.prototype.makeRBT=function(e){for(var t=new Array(e),r=a.prototype._countBits(e)-1,n=0;n>=1;return n},v.prototype.permute=function(e,t,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,t+=n/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=d(e);if(0===t.length)return new a(1);for(var r=this,n=0;n=0);var t,r=e%26,n=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t=0),n=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,l=0;l=0&&(0!==u||l>=n);l--){var f=0|this.words[l];this.words[l]=u<<26-o|f>>>o,u=f&s}return c&&0!==u&&(c.words[c.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,n=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var n=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(c/67108864|0),this.words[n+r]=67108863&o}for(;n>26,this.words[n+r]=67108863&o;if(0===s)return this.strip();for(i(-1===s),s=0,n=0;n>26,this.words[n]=67108863&o;return this.negative=1,this.strip()},a.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),i=e,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,c=n.length-i.length;if("mod"!==t){(s=new a(null)).length=c+1,s.words=new Array(s.length);for(var l=0;l=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:n,mod:o}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:s.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modn(e.words[0]))}:this._wordDiv(e,t);var n,o,s},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,n=this.length-1;n>=0;n--)r=(t*r+(0|this.words[n]))%e;return r},a.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var n=(0|this.words[r])+67108864*t;this.words[r]=n/e|0,t=n%e}return this.strip()},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n=new a(1),o=new a(0),s=new a(0),c=new a(1),l=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++l;for(var u=r.clone(),f=t.clone();!t.isZero();){for(var h=0,d=1;0==(t.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(n.isOdd()||o.isOdd())&&(n.iadd(u),o.isub(f)),n.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||c.isOdd())&&(s.iadd(u),c.isub(f)),s.iushrn(1),c.iushrn(1);t.cmp(r)>=0?(t.isub(r),n.isub(s),o.isub(c)):(r.isub(t),s.isub(n),c.isub(o))}return{a:s,b:c,gcd:r.iushln(l)}},a.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n,o=new a(1),s=new a(0),c=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var l=0,u=1;0==(t.words[0]&u)&&l<26;++l,u<<=1);if(l>0)for(t.iushrn(l);l-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s)):(r.isub(t),s.isub(o))}return(n=0===t.cmpn(1)?o:s).cmpn(0)<0&&n.iadd(e),n},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,n=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:ne.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new T(e)},a.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function w(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function _(){w.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function x(){w.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function k(){w.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function S(){w.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function E(e){T.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}w.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},w.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},w.prototype.split=function(e,t){e.iushrn(this.n,0,t)},w.prototype.imulK=function(e){return e.imul(this.k)},o(_,w),_.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;i>>22,o=a}o>>>=22,e.words[i-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},_.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(g[e])return g[e];var t;if("k256"===e)t=new _;else if("p224"===e)t=new x;else if("p192"===e)t=new k;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new S}return g[e]=t,t},T.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},T.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},T.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},T.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},T.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},T.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},T.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},T.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},T.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},T.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},T.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},T.prototype.isqr=function(e){return this.imul(e,e.clone())},T.prototype.sqr=function(e){return this.mul(e,e)},T.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new a(1)).iushrn(2);return this.pow(e,r)}for(var n=this.m.subn(1),o=0;!n.isZero()&&0===n.andln(1);)o++,n.iushrn(1);i(!n.isZero());var s=new a(1).toRed(this),c=s.redNeg(),l=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new a(2*u*u).toRed(this);0!==this.pow(u,l).cmp(c);)u.redIAdd(c);for(var f=this.pow(u,n),h=this.pow(e,n.addn(1).iushrn(1)),d=this.pow(e,n),p=o;0!==d.cmp(s);){for(var m=d,b=0;0!==m.cmp(s);b++)m=m.redSqr();i(b=0;i--){for(var u=t.words[i],f=l-1;f>=0;f--){var h=u>>f&1;o!==n[0]&&(o=this.sqr(o)),0!==h||0!==s?(s<<=1,s|=h,(++c===r||0===i&&0===f)&&(o=this.mul(o,n[s]),c=0,s=0)):c=0}l=26}return o},T.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},T.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new E(e)},o(E,T),E.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},E.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},E.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},E.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},E.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,void 0)},{buffer:185}],182:[function(e,t,r){r.byteLength=u,r.toByteArray=h,r.fromByteArray=m;for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e){var t=l(e),r=t[0],n=t[1];return 3*(r+n)/4-n}function f(e,t,r){return 3*(t+r)/4-r}function h(e){var t,r,n=l(e),a=n[0],s=n[1],c=new o(f(e,a,s)),u=0,h=s>0?a-4:a;for(r=0;r>16&255,c[u++]=t>>8&255,c[u++]=255&t;return 2===s&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,c[u++]=255&t),1===s&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t),c}function d(e){return n[e>>18&63]+n[e>>12&63]+n[e>>6&63]+n[63&e]}function p(e,t,r){for(var n,i=[],o=t;oc?c:s+a));return 1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"=")),o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],183:[function(e,t,r){function n(e){return n="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},n(e)}!function(t,r){function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function o(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function a(e,t,r){if(a.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var s;"object"===n(t)?t.exports=a:r.BN=a,a.BN=a,a.wordSize=26;try{s=e("buffer").Buffer}catch(e){}function c(e,t,r){for(var n=0,o=Math.min(e.length,r),a=0,s=t;s=49&&l<=54?l-49+10:l>=17&&l<=22?l-17+10:l,a|=c}return i(!(240&a),"Invalid character in "+e),n}function l(e,t,r,n){for(var o=0,a=0,s=Math.min(e.length,r),c=t;c=49?l-49+10:l>=17?l-17+10:l,i(l>=0&&a0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"===n(e))return this._initArray(e,t,r);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===t?this._parseHex(e,o):this._parseBase(e,t,o),"-"===e[0]&&(this.negative=1),this._strip(),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},a.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var n=0;n=0;n-=3)a=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(n=0,o=0;n>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this._strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=c(e,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=c(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this._strip()},a.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,c=0,u=r;u1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{a.prototype[Symbol.for("nodejs.util.inspect.custom")]=f}catch(e){a.prototype.inspect=f}else a.prototype.inspect=f;function f(){return(this.red?""}var h=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];a.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var n=0,o=0,a=0;a>>24-n&16777215)||a!==this.length-1?h[6-c.length]+c+r:c+r,(n+=2)>=26&&(n-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var l=d[e],u=p[e];r="";var f=this.clone();for(f.negative=0;!f.isZero();){var m=f.modrn(u).toString(e);r=(f=f.idivn(u)).isZero()?m+r:h[l-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16,2)},s&&(a.prototype.toBuffer=function(e,t){return this.toArrayLike(s,e,t)}),a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)};var m=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)};function b(e){for(var t=new Array(e.bitLength()),r=0;r>>i&1}return t}function y(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,c=a/67108864|0;r.words[0]=s;for(var l=1;l>>26,f=67108863&c,h=Math.min(l,t.length-1),d=Math.max(0,l-e.length+1);d<=h;d++){var p=l-d|0;u+=(a=(i=0|e.words[p])*(o=0|t.words[d])+f)/67108864|0,f=67108863&a}r.words[l]=0|f,c=0|u}return 0!==c?r.words[l]=0|c:r.length--,r._strip()}a.prototype.toArrayLike=function(e,t,r){this._strip();var n=this.byteLength(),o=r||Math.max(1,n);i(n<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0");var a=m(e,o);return this["_toArrayLike"+("le"===t?"LE":"BE")](a,n),a},a.prototype._toArrayLikeLE=function(e,t){for(var r=0,n=0,i=0,o=0;i>8&255),r>16&255),6===o?(r>24&255),n=0,o=0):(n=a>>>24,o+=2)}if(r=0&&(e[r--]=a>>8&255),r>=0&&(e[r--]=a>>16&255),6===o?(r>=0&&(e[r--]=a>>24&255),n=0,o=0):(n=a>>>24,o+=2)}if(r>=0)for(e[r--]=n;r>=0;)e[r--]=0},Math.clz32?a.prototype._countBits=function(e){return 32-Math.clz32(e)}:a.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var n=0;n0&&(this.words[n]=~this.words[n]&67108863>>26-r),this._strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,n=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,d=0|a[1],p=8191&d,m=d>>>13,b=0|a[2],y=8191&b,v=b>>>13,g=0|a[3],w=8191&g,_=g>>>13,x=0|a[4],k=8191&x,S=x>>>13,T=0|a[5],E=8191&T,O=T>>>13,C=0|a[6],R=8191&C,A=C>>>13,M=0|a[7],P=8191&M,j=M>>>13,I=0|a[8],D=8191&I,N=I>>>13,F=0|a[9],L=8191&F,B=F>>>13,z=0|s[0],U=8191&z,H=z>>>13,W=0|s[1],$=8191&W,V=W>>>13,q=0|s[2],X=8191&q,G=q>>>13,Y=0|s[3],K=8191&Y,Z=Y>>>13,J=0|s[4],Q=8191&J,ee=J>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],ce=8191&se,le=se>>>13,ue=0|s[8],fe=8191&ue,he=ue>>>13,de=0|s[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(l+(n=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,H))+Math.imul(h,U)|0))<<13)|0;l=((o=Math.imul(h,H))+(i>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(p,U),i=(i=Math.imul(p,H))+Math.imul(m,U)|0,o=Math.imul(m,H);var ye=(l+(n=n+Math.imul(f,$)|0)|0)+((8191&(i=(i=i+Math.imul(f,V)|0)+Math.imul(h,$)|0))<<13)|0;l=((o=o+Math.imul(h,V)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,H))+Math.imul(v,U)|0,o=Math.imul(v,H),n=n+Math.imul(p,$)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,V)|0;var ve=(l+(n=n+Math.imul(f,X)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,X)|0))<<13)|0;l=((o=o+Math.imul(h,G)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,U),i=(i=Math.imul(w,H))+Math.imul(_,U)|0,o=Math.imul(_,H),n=n+Math.imul(y,$)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,$)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,X)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(m,X)|0,o=o+Math.imul(m,G)|0;var ge=(l+(n=n+Math.imul(f,K)|0)|0)+((8191&(i=(i=i+Math.imul(f,Z)|0)+Math.imul(h,K)|0))<<13)|0;l=((o=o+Math.imul(h,Z)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(k,U),i=(i=Math.imul(k,H))+Math.imul(S,U)|0,o=Math.imul(S,H),n=n+Math.imul(w,$)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,$)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(v,X)|0,o=o+Math.imul(v,G)|0,n=n+Math.imul(p,K)|0,i=(i=i+Math.imul(p,Z)|0)+Math.imul(m,K)|0,o=o+Math.imul(m,Z)|0;var we=(l+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,ee)|0)+Math.imul(h,Q)|0))<<13)|0;l=((o=o+Math.imul(h,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(E,U),i=(i=Math.imul(E,H))+Math.imul(O,U)|0,o=Math.imul(O,H),n=n+Math.imul(k,$)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(S,$)|0,o=o+Math.imul(S,V)|0,n=n+Math.imul(w,X)|0,i=(i=i+Math.imul(w,G)|0)+Math.imul(_,X)|0,o=o+Math.imul(_,G)|0,n=n+Math.imul(y,K)|0,i=(i=i+Math.imul(y,Z)|0)+Math.imul(v,K)|0,o=o+Math.imul(v,Z)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,ee)|0;var _e=(l+(n=n+Math.imul(f,re)|0)|0)+((8191&(i=(i=i+Math.imul(f,ne)|0)+Math.imul(h,re)|0))<<13)|0;l=((o=o+Math.imul(h,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(R,U),i=(i=Math.imul(R,H))+Math.imul(A,U)|0,o=Math.imul(A,H),n=n+Math.imul(E,$)|0,i=(i=i+Math.imul(E,V)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(S,X)|0,o=o+Math.imul(S,G)|0,n=n+Math.imul(w,K)|0,i=(i=i+Math.imul(w,Z)|0)+Math.imul(_,K)|0,o=o+Math.imul(_,Z)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(m,re)|0,o=o+Math.imul(m,ne)|0;var xe=(l+(n=n+Math.imul(f,oe)|0)|0)+((8191&(i=(i=i+Math.imul(f,ae)|0)+Math.imul(h,oe)|0))<<13)|0;l=((o=o+Math.imul(h,ae)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(P,U),i=(i=Math.imul(P,H))+Math.imul(j,U)|0,o=Math.imul(j,H),n=n+Math.imul(R,$)|0,i=(i=i+Math.imul(R,V)|0)+Math.imul(A,$)|0,o=o+Math.imul(A,V)|0,n=n+Math.imul(E,X)|0,i=(i=i+Math.imul(E,G)|0)+Math.imul(O,X)|0,o=o+Math.imul(O,G)|0,n=n+Math.imul(k,K)|0,i=(i=i+Math.imul(k,Z)|0)+Math.imul(S,K)|0,o=o+Math.imul(S,Z)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(y,re)|0,i=(i=i+Math.imul(y,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(m,oe)|0,o=o+Math.imul(m,ae)|0;var ke=(l+(n=n+Math.imul(f,ce)|0)|0)+((8191&(i=(i=i+Math.imul(f,le)|0)+Math.imul(h,ce)|0))<<13)|0;l=((o=o+Math.imul(h,le)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(D,U),i=(i=Math.imul(D,H))+Math.imul(N,U)|0,o=Math.imul(N,H),n=n+Math.imul(P,$)|0,i=(i=i+Math.imul(P,V)|0)+Math.imul(j,$)|0,o=o+Math.imul(j,V)|0,n=n+Math.imul(R,X)|0,i=(i=i+Math.imul(R,G)|0)+Math.imul(A,X)|0,o=o+Math.imul(A,G)|0,n=n+Math.imul(E,K)|0,i=(i=i+Math.imul(E,Z)|0)+Math.imul(O,K)|0,o=o+Math.imul(O,Z)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(y,oe)|0,i=(i=i+Math.imul(y,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,ce)|0,i=(i=i+Math.imul(p,le)|0)+Math.imul(m,ce)|0,o=o+Math.imul(m,le)|0;var Se=(l+(n=n+Math.imul(f,fe)|0)|0)+((8191&(i=(i=i+Math.imul(f,he)|0)+Math.imul(h,fe)|0))<<13)|0;l=((o=o+Math.imul(h,he)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(L,U),i=(i=Math.imul(L,H))+Math.imul(B,U)|0,o=Math.imul(B,H),n=n+Math.imul(D,$)|0,i=(i=i+Math.imul(D,V)|0)+Math.imul(N,$)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=(i=i+Math.imul(P,G)|0)+Math.imul(j,X)|0,o=o+Math.imul(j,G)|0,n=n+Math.imul(R,K)|0,i=(i=i+Math.imul(R,Z)|0)+Math.imul(A,K)|0,o=o+Math.imul(A,Z)|0,n=n+Math.imul(E,Q)|0,i=(i=i+Math.imul(E,ee)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,ee)|0,n=n+Math.imul(k,re)|0,i=(i=i+Math.imul(k,ne)|0)+Math.imul(S,re)|0,o=o+Math.imul(S,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(y,ce)|0,i=(i=i+Math.imul(y,le)|0)+Math.imul(v,ce)|0,o=o+Math.imul(v,le)|0,n=n+Math.imul(p,fe)|0,i=(i=i+Math.imul(p,he)|0)+Math.imul(m,fe)|0,o=o+Math.imul(m,he)|0;var Te=(l+(n=n+Math.imul(f,pe)|0)|0)+((8191&(i=(i=i+Math.imul(f,me)|0)+Math.imul(h,pe)|0))<<13)|0;l=((o=o+Math.imul(h,me)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(L,$),i=(i=Math.imul(L,V))+Math.imul(B,$)|0,o=Math.imul(B,V),n=n+Math.imul(D,X)|0,i=(i=i+Math.imul(D,G)|0)+Math.imul(N,X)|0,o=o+Math.imul(N,G)|0,n=n+Math.imul(P,K)|0,i=(i=i+Math.imul(P,Z)|0)+Math.imul(j,K)|0,o=o+Math.imul(j,Z)|0,n=n+Math.imul(R,Q)|0,i=(i=i+Math.imul(R,ee)|0)+Math.imul(A,Q)|0,o=o+Math.imul(A,ee)|0,n=n+Math.imul(E,re)|0,i=(i=i+Math.imul(E,ne)|0)+Math.imul(O,re)|0,o=o+Math.imul(O,ne)|0,n=n+Math.imul(k,oe)|0,i=(i=i+Math.imul(k,ae)|0)+Math.imul(S,oe)|0,o=o+Math.imul(S,ae)|0,n=n+Math.imul(w,ce)|0,i=(i=i+Math.imul(w,le)|0)+Math.imul(_,ce)|0,o=o+Math.imul(_,le)|0,n=n+Math.imul(y,fe)|0,i=(i=i+Math.imul(y,he)|0)+Math.imul(v,fe)|0,o=o+Math.imul(v,he)|0;var Ee=(l+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;l=((o=o+Math.imul(m,me)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,X),i=(i=Math.imul(L,G))+Math.imul(B,X)|0,o=Math.imul(B,G),n=n+Math.imul(D,K)|0,i=(i=i+Math.imul(D,Z)|0)+Math.imul(N,K)|0,o=o+Math.imul(N,Z)|0,n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,ee)|0)+Math.imul(j,Q)|0,o=o+Math.imul(j,ee)|0,n=n+Math.imul(R,re)|0,i=(i=i+Math.imul(R,ne)|0)+Math.imul(A,re)|0,o=o+Math.imul(A,ne)|0,n=n+Math.imul(E,oe)|0,i=(i=i+Math.imul(E,ae)|0)+Math.imul(O,oe)|0,o=o+Math.imul(O,ae)|0,n=n+Math.imul(k,ce)|0,i=(i=i+Math.imul(k,le)|0)+Math.imul(S,ce)|0,o=o+Math.imul(S,le)|0,n=n+Math.imul(w,fe)|0,i=(i=i+Math.imul(w,he)|0)+Math.imul(_,fe)|0,o=o+Math.imul(_,he)|0;var Oe=(l+(n=n+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,me)|0)+Math.imul(v,pe)|0))<<13)|0;l=((o=o+Math.imul(v,me)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(L,K),i=(i=Math.imul(L,Z))+Math.imul(B,K)|0,o=Math.imul(B,Z),n=n+Math.imul(D,Q)|0,i=(i=i+Math.imul(D,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(P,re)|0,i=(i=i+Math.imul(P,ne)|0)+Math.imul(j,re)|0,o=o+Math.imul(j,ne)|0,n=n+Math.imul(R,oe)|0,i=(i=i+Math.imul(R,ae)|0)+Math.imul(A,oe)|0,o=o+Math.imul(A,ae)|0,n=n+Math.imul(E,ce)|0,i=(i=i+Math.imul(E,le)|0)+Math.imul(O,ce)|0,o=o+Math.imul(O,le)|0,n=n+Math.imul(k,fe)|0,i=(i=i+Math.imul(k,he)|0)+Math.imul(S,fe)|0,o=o+Math.imul(S,he)|0;var Ce=(l+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;l=((o=o+Math.imul(_,me)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(L,Q),i=(i=Math.imul(L,ee))+Math.imul(B,Q)|0,o=Math.imul(B,ee),n=n+Math.imul(D,re)|0,i=(i=i+Math.imul(D,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(P,oe)|0,i=(i=i+Math.imul(P,ae)|0)+Math.imul(j,oe)|0,o=o+Math.imul(j,ae)|0,n=n+Math.imul(R,ce)|0,i=(i=i+Math.imul(R,le)|0)+Math.imul(A,ce)|0,o=o+Math.imul(A,le)|0,n=n+Math.imul(E,fe)|0,i=(i=i+Math.imul(E,he)|0)+Math.imul(O,fe)|0,o=o+Math.imul(O,he)|0;var Re=(l+(n=n+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,me)|0)+Math.imul(S,pe)|0))<<13)|0;l=((o=o+Math.imul(S,me)|0)+(i>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(L,re),i=(i=Math.imul(L,ne))+Math.imul(B,re)|0,o=Math.imul(B,ne),n=n+Math.imul(D,oe)|0,i=(i=i+Math.imul(D,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(P,ce)|0,i=(i=i+Math.imul(P,le)|0)+Math.imul(j,ce)|0,o=o+Math.imul(j,le)|0,n=n+Math.imul(R,fe)|0,i=(i=i+Math.imul(R,he)|0)+Math.imul(A,fe)|0,o=o+Math.imul(A,he)|0;var Ae=(l+(n=n+Math.imul(E,pe)|0)|0)+((8191&(i=(i=i+Math.imul(E,me)|0)+Math.imul(O,pe)|0))<<13)|0;l=((o=o+Math.imul(O,me)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(L,oe),i=(i=Math.imul(L,ae))+Math.imul(B,oe)|0,o=Math.imul(B,ae),n=n+Math.imul(D,ce)|0,i=(i=i+Math.imul(D,le)|0)+Math.imul(N,ce)|0,o=o+Math.imul(N,le)|0,n=n+Math.imul(P,fe)|0,i=(i=i+Math.imul(P,he)|0)+Math.imul(j,fe)|0,o=o+Math.imul(j,he)|0;var Me=(l+(n=n+Math.imul(R,pe)|0)|0)+((8191&(i=(i=i+Math.imul(R,me)|0)+Math.imul(A,pe)|0))<<13)|0;l=((o=o+Math.imul(A,me)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(L,ce),i=(i=Math.imul(L,le))+Math.imul(B,ce)|0,o=Math.imul(B,le),n=n+Math.imul(D,fe)|0,i=(i=i+Math.imul(D,he)|0)+Math.imul(N,fe)|0,o=o+Math.imul(N,he)|0;var Pe=(l+(n=n+Math.imul(P,pe)|0)|0)+((8191&(i=(i=i+Math.imul(P,me)|0)+Math.imul(j,pe)|0))<<13)|0;l=((o=o+Math.imul(j,me)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(L,fe),i=(i=Math.imul(L,he))+Math.imul(B,fe)|0,o=Math.imul(B,he);var je=(l+(n=n+Math.imul(D,pe)|0)|0)+((8191&(i=(i=i+Math.imul(D,me)|0)+Math.imul(N,pe)|0))<<13)|0;l=((o=o+Math.imul(N,me)|0)+(i>>>13)|0)+(je>>>26)|0,je&=67108863;var Ie=(l+(n=Math.imul(L,pe))|0)+((8191&(i=(i=Math.imul(L,me))+Math.imul(B,pe)|0))<<13)|0;return l=((o=Math.imul(B,me))+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,c[0]=be,c[1]=ye,c[2]=ve,c[3]=ge,c[4]=we,c[5]=_e,c[6]=xe,c[7]=ke,c[8]=Se,c[9]=Te,c[10]=Ee,c[11]=Oe,c[12]=Ce,c[13]=Re,c[14]=Ae,c[15]=Me,c[16]=Pe,c[17]=je,c[18]=Ie,0!==l&&(c[19]=l,r.length++),r};function g(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r._strip()}function w(e,t,r){return g(e,t,r)}Math.imul||(v=y),a.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?v(this,e,t):r<63?y(this,e,t):r<1024?g(this,e,t):w(this,e,t)},a.prototype.mul=function(e){var t=new a(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},a.prototype.mulf=function(e){var t=new a(null);return t.words=new Array(this.length+e.length),w(this,e,t)},a.prototype.imul=function(e){return this.clone().mulTo(e,this)},a.prototype.imuln=function(e){var t=e<0;t&&(e=-e),i("number"==typeof e),i(e<67108864);for(var r=0,n=0;n>=26,r+=o/67108864|0,r+=a>>>26,this.words[n]=67108863&a}return 0!==r&&(this.words[n]=r,this.length++),t?this.ineg():this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=b(e);if(0===t.length)return new a(1);for(var r=this,n=0;n=0);var t,r=e%26,n=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t=0),n=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,l=0;l=0&&(0!==u||l>=n);l--){var f=0|this.words[l];this.words[l]=u<<26-o|f>>>o,u=f&s}return c&&0!==u&&(c.words[c.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},a.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,n=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var n=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(c/67108864|0),this.words[n+r]=67108863&o}for(;n>26,this.words[n+r]=67108863&o;if(0===s)return this._strip();for(i(-1===s),s=0,n=0;n>26,this.words[n]=67108863&o;return this.negative=1,this._strip()},a.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),i=e,o=0|i.words[i.length-1];0!=(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,c=n.length-i.length;if("mod"!==t){(s=new a(null)).length=c+1,s.words=new Array(s.length);for(var l=0;l=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s._strip(),n._strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:n,mod:o}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:s.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modrn(e.words[0]))}:this._wordDiv(e,t);var n,o,s},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modrn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return t?-n:n},a.prototype.modn=function(e){return this.modrn(e)},a.prototype.idivn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this._strip(),t?this.ineg():this},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n=new a(1),o=new a(0),s=new a(0),c=new a(1),l=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++l;for(var u=r.clone(),f=t.clone();!t.isZero();){for(var h=0,d=1;0==(t.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(n.isOdd()||o.isOdd())&&(n.iadd(u),o.isub(f)),n.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||c.isOdd())&&(s.iadd(u),c.isub(f)),s.iushrn(1),c.iushrn(1);t.cmp(r)>=0?(t.isub(r),n.isub(s),o.isub(c)):(r.isub(t),s.isub(n),c.isub(o))}return{a:s,b:c,gcd:r.iushln(l)}},a.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var n,o=new a(1),s=new a(0),c=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var l=0,u=1;0==(t.words[0]&u)&&l<26;++l,u<<=1);if(l>0)for(t.iushrn(l);l-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s)):(r.isub(t),s.isub(o))}return(n=0===t.cmpn(1)?o:s).cmpn(0)<0&&n.iadd(e),n},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,n=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this._strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:ne.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new O(e)},a.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var _={k256:null,p224:null,p192:null,p25519:null};function x(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function k(){x.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function S(){x.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function T(){x.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function E(){x.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function O(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function C(e){O.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}x.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},x.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},x.prototype.split=function(e,t){e.iushrn(this.n,0,t)},x.prototype.imulK=function(e){return e.imul(this.k)},o(k,x),k.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;i>>22,o=a}o>>>=22,e.words[i-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},k.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(_[e])return _[e];var t;if("k256"===e)t=new k;else if("p224"===e)t=new S;else if("p192"===e)t=new T;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new E}return _[e]=t,t},O.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},O.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},O.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(u(e,e.umod(this.m)._forceRed(this)),e)},O.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},O.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},O.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},O.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},O.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},O.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},O.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},O.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},O.prototype.isqr=function(e){return this.imul(e,e.clone())},O.prototype.sqr=function(e){return this.mul(e,e)},O.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new a(1)).iushrn(2);return this.pow(e,r)}for(var n=this.m.subn(1),o=0;!n.isZero()&&0===n.andln(1);)o++,n.iushrn(1);i(!n.isZero());var s=new a(1).toRed(this),c=s.redNeg(),l=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new a(2*u*u).toRed(this);0!==this.pow(u,l).cmp(c);)u.redIAdd(c);for(var f=this.pow(u,n),h=this.pow(e,n.addn(1).iushrn(1)),d=this.pow(e,n),p=o;0!==d.cmp(s);){for(var m=d,b=0;0!==m.cmp(s);b++)m=m.redSqr();i(b=0;i--){for(var u=t.words[i],f=l-1;f>=0;f--){var h=u>>f&1;o!==n[0]&&(o=this.sqr(o)),0!==h||0!==s?(s<<=1,s|=h,(++c===r||0===i&&0===f)&&(o=this.mul(o,n[s]),c=0,s=0)):c=0}l=26}return o},O.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},O.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new C(e)},o(C,O),C.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},C.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},C.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},C.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},C.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,void 0)},{buffer:185}],184:[function(e,t,r){function n(e){return n="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},n(e)}var i;function o(e){this.rand=e}if(t.exports=function(e){return i||(i=new o(null)),i.generate(e)},t.exports.Rand=o,o.prototype.generate=function(e){return this._rand(e)},o.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r>>24]^u[p>>>16&255]^f[m>>>8&255]^h[255&b]^t[y++],a=l[p>>>24]^u[m>>>16&255]^f[b>>>8&255]^h[255&d]^t[y++],s=l[m>>>24]^u[b>>>16&255]^f[d>>>8&255]^h[255&p]^t[y++],c=l[b>>>24]^u[d>>>16&255]^f[p>>>8&255]^h[255&m]^t[y++],d=o,p=a,m=s,b=c;return o=(n[d>>>24]<<24|n[p>>>16&255]<<16|n[m>>>8&255]<<8|n[255&b])^t[y++],a=(n[p>>>24]<<24|n[m>>>16&255]<<16|n[b>>>8&255]<<8|n[255&d])^t[y++],s=(n[m>>>24]<<24|n[b>>>16&255]<<16|n[d>>>8&255]<<8|n[255&p])^t[y++],c=(n[b>>>24]<<24|n[d>>>16&255]<<16|n[p>>>8&255]<<8|n[255&m])^t[y++],[o>>>=0,a>>>=0,s>>>=0,c>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],c=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],i=[[],[],[],[]],o=[[],[],[],[]],a=0,s=0,c=0;c<256;++c){var l=s^s<<1^s<<2^s<<3^s<<4;l=l>>>8^255&l^99,r[a]=l,n[l]=a;var u=e[a],f=e[u],h=e[f],d=257*e[l]^16843008*l;i[0][a]=d<<24|d>>>8,i[1][a]=d<<16|d>>>16,i[2][a]=d<<8|d>>>24,i[3][a]=d,d=16843009*h^65537*f^257*u^16843008*a,o[0][l]=d<<24|d>>>8,o[1][l]=d<<16|d>>>16,o[2][l]=d<<8|d>>>24,o[3][l]=d,0===a?a=s=1:(a=u^e[e[e[h^u]]],s^=e[e[s]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:i,INV_SUB_MIX:o}}();function l(e){this._key=i(e),this._reset()}l.blockSize=16,l.keySize=32,l.prototype.blockSize=l.blockSize,l.prototype.keySize=l.keySize,l.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),i=[],o=0;o>>24,a=c.SBOX[a>>>24]<<24|c.SBOX[a>>>16&255]<<16|c.SBOX[a>>>8&255]<<8|c.SBOX[255&a],a^=s[o/t|0]<<24):t>6&&o%t==4&&(a=c.SBOX[a>>>24]<<24|c.SBOX[a>>>16&255]<<16|c.SBOX[a>>>8&255]<<8|c.SBOX[255&a]),i[o]=i[o-t]^a}for(var l=[],u=0;u>>24]]^c.INV_SUB_MIX[1][c.SBOX[h>>>16&255]]^c.INV_SUB_MIX[2][c.SBOX[h>>>8&255]]^c.INV_SUB_MIX[3][c.SBOX[255&h]]}this._nRounds=r,this._keySchedule=i,this._invKeySchedule=l},l.prototype.encryptBlockRaw=function(e){return a(e=i(e),this._keySchedule,c.SUB_MIX,c.SBOX,this._nRounds)},l.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},l.prototype.decryptBlock=function(e){var t=(e=i(e))[1];e[1]=e[3],e[3]=t;var r=a(e,this._invKeySchedule,c.INV_SUB_MIX,c.INV_SBOX,this._nRounds),o=n.allocUnsafe(16);return o.writeUInt32BE(r[0],0),o.writeUInt32BE(r[3],4),o.writeUInt32BE(r[2],8),o.writeUInt32BE(r[1],12),o},l.prototype.scrub=function(){o(this._keySchedule),o(this._invKeySchedule),o(this._key)},t.exports.AES=l},{"safe-buffer":494}],187:[function(e,t,r){var n=e("./aes"),i=e("safe-buffer").Buffer,o=e("cipher-base"),a=e("inherits"),s=e("./ghash"),c=e("buffer-xor"),l=e("./incr32");function u(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),i=0;i16)throw new Error("unable to decrypt data");for(var r=-1;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},f.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=p,r.createDecipheriv=d},{"./aes":186,"./authCipher":187,"./modes":199,"./streamCipher":202,"cipher-base":218,evp_bytestokey:368,inherits:387,"safe-buffer":494}],190:[function(e,t,r){var n=e("./modes"),i=e("./authCipher"),o=e("safe-buffer").Buffer,a=e("./streamCipher"),s=e("cipher-base"),c=e("./aes"),l=e("evp_bytestokey");function u(e,t,r){s.call(this),this._cache=new h,this._cipher=new c.AES(t),this._prev=o.from(r),this._mode=e,this._autopadding=!0}e("inherits")(u,s),u.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get();)r=this._mode.encrypt(this,t),n.push(r);return o.concat(n)};var f=o.alloc(16,16);function h(){this.cache=o.allocUnsafe(0)}function d(e,t,r){var s=n[e.toLowerCase()];if(!s)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=o.from(t)),t.length!==s.key/8)throw new TypeError("invalid key length "+t.length);if("string"==typeof r&&(r=o.from(r)),"GCM"!==s.mode&&r.length!==s.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===s.type?new a(s.module,t,r):"auth"===s.type?new i(s.module,t,r):new u(s.module,t,r)}function p(e,t){var r=n[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=l(t,!1,r.key,r.iv);return d(e,i.key,i.iv)}u.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(f))throw this._cipher.scrub(),new Error("data not multiple of block length")},u.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},h.prototype.add=function(e){this.cache=o.concat([this.cache,e])},h.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},h.prototype.flush=function(){for(var e=16-this.cache.length,t=o.allocUnsafe(e),r=-1;++r>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function s(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}s.prototype.ghash=function(e){for(var t=-1;++t0;e--)r[e]=r[e]>>>1|(1&r[e-1])<<31;r[0]=r[0]>>>1,t&&(r[0]=r[0]^225<<24)}this.state=a(n)},s.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},s.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,i],16)),this.ghash(a([0,e,0,t])),this.state},t.exports=s},{"safe-buffer":494}],192:[function(e,t,r){function n(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}t.exports=n},{}],193:[function(e,t,r){var n=e("buffer-xor");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var i=e._cipher.decryptBlock(t);return n(i,r)}},{"buffer-xor":217}],194:[function(e,t,r){var n=e("safe-buffer").Buffer,i=e("buffer-xor");function o(e,t,r){var o=t.length,a=i(t,e._cache);return e._cache=e._cache.slice(o),e._prev=n.concat([e._prev,r?t:a]),a}r.encrypt=function(e,t,r){for(var i,a=n.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=n.allocUnsafe(0)),!(e._cache.length<=t.length)){a=n.concat([a,o(e,t,r)]);break}i=e._cache.length,a=n.concat([a,o(e,t.slice(0,i),r)]),t=t.slice(i)}return a}},{"buffer-xor":217,"safe-buffer":494}],195:[function(e,t,r){var n=e("safe-buffer").Buffer;function i(e,t,r){for(var n,i,a=-1,s=8,c=0;++a>a%8,e._prev=o(e._prev,r?n:i);return c}function o(e,t){var r=e.length,i=-1,o=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++i>7;return o}r.encrypt=function(e,t,r){for(var o=t.length,a=n.allocUnsafe(o),s=-1;++s=0||!r.umod(e.prime1)||!r.umod(e.prime2);)r=new n(i(t));return r}t.exports=a,a.getr=s}).call(this,e("buffer").Buffer)},{"bn.js":207,buffer:216,randombytes:475}],207:[function(e,t,r){arguments[4][181][0].apply(r,arguments)},{buffer:185,dup:181}],208:[function(e,t,r){t.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":209}],209:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],210:[function(e,t,r){t.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],211:[function(e,t,r){var n=e("safe-buffer").Buffer,i=e("create-hash"),o=e("readable-stream"),a=e("inherits"),s=e("./sign"),c=e("./verify"),l=e("./algorithms.json");function u(e){o.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=i(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){o.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hash=i(t.hash),this._tag=t.id,this._signType=t.sign}function h(e){return new u(e)}function d(e){return new f(e)}Object.keys(l).forEach((function(e){l[e].id=n.from(l[e].id,"hex"),l[e.toLowerCase()]=l[e]})),a(u,o.Writable),u.prototype._write=function(e,t,r){this._hash.update(e),r()},u.prototype.update=function(e,t){return"string"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},u.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),n=s(r,e,this._hashType,this._signType,this._tag);return t?n.toString(t):n},a(f,o.Writable),f.prototype._write=function(e,t,r){this._hash.update(e),r()},f.prototype.update=function(e,t){return"string"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},f.prototype.verify=function(e,t,r){"string"==typeof t&&(t=n.from(t,r)),this.end();var i=this._hash.digest();return c(t,i,e,this._signType,this._tag)},t.exports={Sign:h,Verify:d,createSign:h,createVerify:d}},{"./algorithms.json":209,"./sign":212,"./verify":213,"create-hash":331,inherits:387,"readable-stream":491,"safe-buffer":214}],212:[function(e,t,r){var n=e("safe-buffer").Buffer,i=e("create-hmac"),o=e("browserify-rsa"),a=e("elliptic").ec,s=e("bn.js"),c=e("parse-asn1"),l=e("./curves.json");function u(e,t,r,i,a){var s=c(t);if(s.curve){if("ecdsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong private key type");return f(e,s)}if("dsa"===s.type){if("dsa"!==i)throw new Error("wrong private key type");return h(e,s,r)}if("rsa"!==i&&"ecdsa/rsa"!==i)throw new Error("wrong private key type");e=n.concat([a,e]);for(var l=s.modulus.byteLength(),u=[0,1];e.length+u.length+10&&r.ishrn(n),r}function b(e,t){e=(e=m(e,t)).mod(t);var r=n.from(e.toArray());if(r.length=t)throw new Error("invalid sig")}t.exports=c},{"./curves.json":210,"bn.js":183,elliptic:350,"parse-asn1":459,"safe-buffer":214}],214:[function(e,t,r){ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +var n=e("buffer"),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,r),r.Buffer=a),a.prototype=Object.create(i.prototype),o(i,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},{buffer:216}],215:[function(e,t,r){arguments[4][185][0].apply(r,arguments)},{dup:185}],216:[function(e,t,r){(function(t){function n(e){return n="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},n(e)}var i=e("base64-js"),o=e("ieee754");r.Buffer=t,r.SlowBuffer=v,r.INSPECT_MAX_BYTES=50;var a=2147483647;function s(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}function c(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');var r=new Uint8Array(e);return r.__proto__=t.prototype,r}function t(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return h(e)}return l(e,t,r)}function l(e,r,i){if("string"==typeof e)return d(e,r);if(ArrayBuffer.isView(e))return p(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+n(e));if(Z(e,ArrayBuffer)||e&&Z(e.buffer,ArrayBuffer))return m(e,r,i);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var o=e.valueOf&&e.valueOf();if(null!=o&&o!==e)return t.from(o,r,i);var a=b(e);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return t.from(e[Symbol.toPrimitive]("string"),r,i);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+n(e))}function u(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e,t,r){return u(e),e<=0?c(e):void 0!==t?"string"==typeof r?c(e).fill(t,r):c(e).fill(t):c(e)}function h(e){return u(e),c(e<0?0:0|y(e))}function d(e,r){if("string"==typeof r&&""!==r||(r="utf8"),!t.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var n=0|g(e,r),i=c(n),o=i.write(e,r);return o!==n&&(i=i.slice(0,o)),i}function p(e){for(var t=e.length<0?0:0|y(e.length),r=c(t),n=0;n=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function v(e){return+e!=e&&(e=0),t.alloc(+e)}function g(e,r){if(t.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Z(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+n(e));var i=e.length,o=arguments.length>2&&!0===arguments[2];if(!o&&0===i)return 0;for(var a=!1;;)switch(r){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return Y(e).length;default:if(a)return o?-1:q(e).length;r=(""+r).toLowerCase(),a=!0}}function w(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return N(this,t,r);case"utf8":case"utf-8":return M(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return D(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return F(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function _(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function x(e,r,n,i,o){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof r&&(r=t.from(r,i)),t.isBuffer(r))return 0===r.length?-1:k(e,r,n,i,o);if("number"==typeof r)return r&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):k(e,[r],n,i,o);throw new TypeError("val must be string, number or Buffer")}function k(e,t,r,n,i){var o,a=1,s=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,r/=2}function l(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var u=-1;for(o=r;os&&(r=s-c),o=r;o>=0;o--){for(var f=!0,h=0;hi&&(n=i):n=i;var o=t.length;n>o/2&&(n=o/2);for(var a=0;a239?4:l>223?3:l>191?2:1;if(i+f<=r)switch(f){case 1:l<128&&(u=l);break;case 2:128==(192&(o=e[i+1]))&&(c=(31&l)<<6|63&o)>127&&(u=c);break;case 3:o=e[i+1],a=e[i+2],128==(192&o)&&128==(192&a)&&(c=(15&l)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:o=e[i+1],a=e[i+2],s=e[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(c=(15&l)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(u=c)}null===u?(u=65533,f=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=f}return j(n)}r.kMaxLength=a,t.TYPED_ARRAY_SUPPORT=s(),t.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(t.prototype,"parent",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.buffer}}),Object.defineProperty(t.prototype,"offset",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),t.poolSize=8192,t.from=function(e,t,r){return l(e,t,r)},t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,t.alloc=function(e,t,r){return f(e,t,r)},t.allocUnsafe=function(e){return h(e)},t.allocUnsafeSlow=function(e){return h(e)},t.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==t.prototype},t.compare=function(e,r){if(Z(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),Z(r,Uint8Array)&&(r=t.from(r,r.offset,r.byteLength)),!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===r)return 0;for(var n=e.length,i=r.length,o=0,a=Math.min(n,i);ot&&(e+=" ... "),""},t.prototype.compare=function(e,r,i,o,a){if(Z(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),!t.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+n(e));if(void 0===r&&(r=0),void 0===i&&(i=e?e.length:0),void 0===o&&(o=0),void 0===a&&(a=this.length),r<0||i>e.length||o<0||a>this.length)throw new RangeError("out of range index");if(o>=a&&r>=i)return 0;if(o>=a)return-1;if(r>=i)return 1;if(this===e)return 0;for(var s=(a>>>=0)-(o>>>=0),c=(i>>>=0)-(r>>>=0),l=Math.min(s,c),u=this.slice(o,a),f=e.slice(r,i),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return S(this,e,t,r);case"utf8":case"utf-8":return T(this,e,t,r);case"ascii":return E(this,e,t,r);case"latin1":case"binary":return O(this,e,t,r);case"base64":return C(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function j(e){var t=e.length;if(t<=P)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function B(e,r,n,i,o,a){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||re.length)throw new RangeError("Index out of range")}function z(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,t,r,n,i){return t=+t,r>>>=0,i||z(e,t,r,4),o.write(e,t,r,n,23,4),r+4}function H(e,t,r,n,i){return t=+t,r>>>=0,i||z(e,t,r,8),o.write(e,t,r,n,52,8),r+8}t.prototype.slice=function(e,r){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r>>=0,t>>>=0,r||L(e,t,this.length);for(var n=this[e],i=1,o=0;++o>>=0,t>>>=0,r||L(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},t.prototype.readUInt8=function(e,t){return e>>>=0,t||L(e,1,this.length),this[e]},t.prototype.readUInt16LE=function(e,t){return e>>>=0,t||L(e,2,this.length),this[e]|this[e+1]<<8},t.prototype.readUInt16BE=function(e,t){return e>>>=0,t||L(e,2,this.length),this[e]<<8|this[e+1]},t.prototype.readUInt32LE=function(e,t){return e>>>=0,t||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},t.prototype.readUInt32BE=function(e,t){return e>>>=0,t||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},t.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||L(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},t.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||L(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},t.prototype.readInt8=function(e,t){return e>>>=0,t||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},t.prototype.readInt16LE=function(e,t){e>>>=0,t||L(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(e,t){e>>>=0,t||L(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(e,t){return e>>>=0,t||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},t.prototype.readInt32BE=function(e,t){return e>>>=0,t||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},t.prototype.readFloatLE=function(e,t){return e>>>=0,t||L(e,4,this.length),o.read(this,e,!0,23,4)},t.prototype.readFloatBE=function(e,t){return e>>>=0,t||L(e,4,this.length),o.read(this,e,!1,23,4)},t.prototype.readDoubleLE=function(e,t){return e>>>=0,t||L(e,8,this.length),o.read(this,e,!0,52,8)},t.prototype.readDoubleBE=function(e,t){return e>>>=0,t||L(e,8,this.length),o.read(this,e,!1,52,8)},t.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||B(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||B(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},t.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,1,255,0),this[t]=255&e,t+1},t.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},t.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,e,t,r,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+r},t.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);B(this,e,t,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+r},t.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},t.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},t.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||B(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},t.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},t.prototype.writeDoubleLE=function(e,t,r){return H(this,e,t,!0,r)},t.prototype.writeDoubleBE=function(e,t,r){return H(this,e,t,!1,r)},t.prototype.copy=function(e,r,n,i){if(!t.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--a)e[a+r]=this[a+n];else Uint8Array.prototype.set.call(e,this.subarray(n,i),r);return o},t.prototype.fill=function(e,r,n,i){if("string"==typeof e){if("string"==typeof r?(i=r,r=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!t.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===e.length){var o=e.charCodeAt(0);("utf8"===i&&o<128||"latin1"===i)&&(e=o)}}else"number"==typeof e&&(e&=255);if(r<0||this.length>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(a=r;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function X(e){for(var t=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function Y(e){return i.toByteArray($(e))}function K(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function Z(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}}).call(this,e("buffer").Buffer)},{"base64-js":182,buffer:216,ieee754:385}],217:[function(e,t,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;ou;)if((s=c[u++])!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===r)return e||u||0;return!e&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},{"../internals/to-absolute-index":304,"../internals/to-indexed-object":305,"../internals/to-length":307}],225:[function(e,t,r){var n=e("../internals/function-bind-context"),i=e("../internals/indexed-object"),o=e("../internals/to-object"),a=e("../internals/to-length"),s=e("../internals/array-species-create"),c=[].push,l=function(e){var t=1==e,r=2==e,l=3==e,u=4==e,f=6==e,h=5==e||f;return function(d,p,m,b){for(var y,v,g=o(d),w=i(g),_=n(p,m,3),x=a(w.length),k=0,S=b||s,T=t?S(d,x):r?S(d,0):void 0;x>k;k++)if((h||k in w)&&(v=_(y=w[k],k,g),e))if(t)T[k]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return k;case 2:c.call(T,y)}else if(u)return!1;return f?-1:l||u?u:T}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},{"../internals/array-species-create":227,"../internals/function-bind-context":248,"../internals/indexed-object":257,"../internals/to-length":307,"../internals/to-object":308}],226:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/fails"),o=e("../internals/has"),a=Object.defineProperty,s={},c=function(e){throw e};t.exports=function(e,t){if(o(s,e))return s[e];t||(t={});var r=[][e],l=!!o(t,"ACCESSORS")&&t.ACCESSORS,u=o(t,0)?t[0]:c,f=o(t,1)?t[1]:void 0;return s[e]=!!r&&!i((function(){if(l&&!n)return!0;var e={length:-1};l?a(e,1,{enumerable:!0,get:c}):e[1]=1,r.call(e,u,f)}))}},{"../internals/descriptors":240,"../internals/fails":247,"../internals/has":252}],227:[function(e,t,r){var n=e("../internals/is-object"),i=e("../internals/is-array"),o=e("../internals/well-known-symbol")("species");t.exports=function(e,t){var r;return i(e)&&("function"!=typeof(r=e.constructor)||r!==Array&&!i(r.prototype)?n(r)&&null===(r=r[o])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===t?0:t)}},{"../internals/is-array":261,"../internals/is-object":263,"../internals/well-known-symbol":314}],228:[function(e,t,r){var n=e("../internals/an-object");t.exports=function(e,t,r,i){try{return i?t(n(r)[0],r[1]):t(r)}catch(t){var o=e.return;throw void 0!==o&&n(o.call(e)),t}}},{"../internals/an-object":223}],229:[function(e,t,r){var n=e("../internals/well-known-symbol")("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}t.exports=function(e,t){if(!t&&!i)return!1;var r=!1;try{var o={};o[n]=function(){return{next:function(){return{done:r=!0}}}},e(o)}catch(e){}return r}},{"../internals/well-known-symbol":314}],230:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],231:[function(e,t,r){var n=e("../internals/to-string-tag-support"),i=e("../internals/classof-raw"),o=e("../internals/well-known-symbol")("toStringTag"),a="Arguments"==i(function(){return arguments}()),s=function(e,t){try{return e[t]}catch(e){}};t.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=s(t=Object(e),o))?r:a?i(t):"Object"==(n=i(t))&&"function"==typeof t.callee?"Arguments":n}},{"../internals/classof-raw":230,"../internals/to-string-tag-support":310,"../internals/well-known-symbol":314}],232:[function(e,t,r){var n=e("../internals/has"),i=e("../internals/own-keys"),o=e("../internals/object-get-own-property-descriptor"),a=e("../internals/object-define-property");t.exports=function(e,t){for(var r=i(t),s=a.f,c=o.f,l=0;l=74)&&(n=a.match(/Chrome\/(\d+)/))&&(i=n[1]),t.exports=i&&+i},{"../internals/engine-user-agent":243,"../internals/global":251}],245:[function(e,t,r){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],246:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/object-get-own-property-descriptor").f,o=e("../internals/create-non-enumerable-property"),a=e("../internals/redefine"),s=e("../internals/set-global"),c=e("../internals/copy-constructor-properties"),l=e("../internals/is-forced");t.exports=function(e,t){var r,u,f,h,d,p=e.target,m=e.global,b=e.stat;if(r=m?n:b?n[p]||s(p,{}):(n[p]||{}).prototype)for(u in t){if(h=t[u],f=e.noTargetGet?(d=i(r,u))&&d.value:r[u],!l(m?u:p+(b?".":"#")+u,e.forced)&&void 0!==f){if(typeof h==typeof f)continue;c(h,f)}(e.sham||f&&f.sham)&&o(h,"sham",!0),a(r,u,h,e)}}},{"../internals/copy-constructor-properties":232,"../internals/create-non-enumerable-property":236,"../internals/global":251,"../internals/is-forced":262,"../internals/object-get-own-property-descriptor":279,"../internals/redefine":294,"../internals/set-global":296}],247:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],248:[function(e,t,r){var n=e("../internals/a-function");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,i){return e.call(t,r,n,i)}}return function(){return e.apply(t,arguments)}}},{"../internals/a-function":219}],249:[function(e,t,r){var n=e("../internals/path"),i=e("../internals/global"),o=function(e){return"function"==typeof e?e:void 0};t.exports=function(e,t){return arguments.length<2?o(n[e])||o(i[e]):n[e]&&n[e][t]||i[e]&&i[e][t]}},{"../internals/global":251,"../internals/path":290}],250:[function(e,t,r){var n=e("../internals/classof"),i=e("../internals/iterators"),o=e("../internals/well-known-symbol")("iterator");t.exports=function(e){if(null!=e)return e[o]||e["@@iterator"]||i[n(e)]}},{"../internals/classof":231,"../internals/iterators":268,"../internals/well-known-symbol":314}],251:[function(e,t,r){(function(e){var r=function(e){return e&&e.Math==Math&&e};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof e&&e)||Function("return this")()}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],252:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],253:[function(e,t,r){t.exports={}},{}],254:[function(e,t,r){var n=e("../internals/global");t.exports=function(e,t){var r=n.console;r&&r.error&&(1===arguments.length?r.error(e):r.error(e,t))}},{"../internals/global":251}],255:[function(e,t,r){var n=e("../internals/get-built-in");t.exports=n("document","documentElement")},{"../internals/get-built-in":249}],256:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/fails"),o=e("../internals/document-create-element");t.exports=!n&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},{"../internals/descriptors":240,"../internals/document-create-element":241,"../internals/fails":247}],257:[function(e,t,r){var n=e("../internals/fails"),i=e("../internals/classof-raw"),o="".split;t.exports=n((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},{"../internals/classof-raw":230,"../internals/fails":247}],258:[function(e,t,r){var n=e("../internals/shared-store"),i=Function.toString;"function"!=typeof n.inspectSource&&(n.inspectSource=function(e){return i.call(e)}),t.exports=n.inspectSource},{"../internals/shared-store":300}],259:[function(e,t,r){var n,i,o,a=e("../internals/native-weak-map"),s=e("../internals/global"),c=e("../internals/is-object"),l=e("../internals/create-non-enumerable-property"),u=e("../internals/has"),f=e("../internals/shared-key"),h=e("../internals/hidden-keys"),d=s.WeakMap,p=function(e){return o(e)?i(e):n(e,{})},m=function(e){return function(t){var r;if(!c(t)||(r=i(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return r}};if(a){var b=new d,y=b.get,v=b.has,g=b.set;n=function(e,t){return g.call(b,e,t),t},i=function(e){return y.call(b,e)||{}},o=function(e){return v.call(b,e)}}else{var w=f("state");h[w]=!0,n=function(e,t){return l(e,w,t),t},i=function(e){return u(e,w)?e[w]:{}},o=function(e){return u(e,w)}}t.exports={set:n,get:i,has:o,enforce:p,getterFor:m}},{"../internals/create-non-enumerable-property":236,"../internals/global":251,"../internals/has":252,"../internals/hidden-keys":253,"../internals/is-object":263,"../internals/native-weak-map":272,"../internals/shared-key":299}],260:[function(e,t,r){var n=e("../internals/well-known-symbol"),i=e("../internals/iterators"),o=n("iterator"),a=Array.prototype;t.exports=function(e){return void 0!==e&&(i.Array===e||a[o]===e)}},{"../internals/iterators":268,"../internals/well-known-symbol":314}],261:[function(e,t,r){var n=e("../internals/classof-raw");t.exports=Array.isArray||function(e){return"Array"==n(e)}},{"../internals/classof-raw":230}],262:[function(e,t,r){var n=e("../internals/fails"),i=/#|\.prototype\./,o=function(e,t){var r=s[a(e)];return r==l||r!=c&&("function"==typeof t?n(t):!!t)},a=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},s=o.data={},c=o.NATIVE="N",l=o.POLYFILL="P";t.exports=o},{"../internals/fails":247}],263:[function(e,t,r){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],264:[function(e,t,r){t.exports=!1},{}],265:[function(e,t,r){var n=e("../internals/is-object"),i=e("../internals/classof-raw"),o=e("../internals/well-known-symbol")("match");t.exports=function(e){var t;return n(e)&&(void 0!==(t=e[o])?!!t:"RegExp"==i(e))}},{"../internals/classof-raw":230,"../internals/is-object":263,"../internals/well-known-symbol":314}],266:[function(e,t,r){var n=e("../internals/an-object"),i=e("../internals/is-array-iterator-method"),o=e("../internals/to-length"),a=e("../internals/function-bind-context"),s=e("../internals/get-iterator-method"),c=e("../internals/call-with-safe-iteration-closing"),l=function(e,t){this.stopped=e,this.result=t},u=t.exports=function(e,t,r,u,f){var h,d,p,m,b,y,v,g=a(t,r,u?2:1);if(f)h=e;else{if("function"!=typeof(d=s(e)))throw TypeError("Target is not iterable");if(i(d)){for(p=0,m=o(e.length);m>p;p++)if((b=u?g(n(v=e[p])[0],v[1]):g(e[p]))&&b instanceof l)return b;return new l(!1)}h=d.call(e)}for(y=h.next;!(v=y.call(h)).done;)if("object"==typeof(b=c(h,g,v.value,u))&&b&&b instanceof l)return b;return new l(!1)};u.stop=function(e){return new l(!0,e)}},{"../internals/an-object":223,"../internals/call-with-safe-iteration-closing":228,"../internals/function-bind-context":248,"../internals/get-iterator-method":250,"../internals/is-array-iterator-method":260,"../internals/to-length":307}],267:[function(e,t,r){var n,i,o,a=e("../internals/object-get-prototype-of"),s=e("../internals/create-non-enumerable-property"),c=e("../internals/has"),l=e("../internals/well-known-symbol"),u=e("../internals/is-pure"),f=l("iterator"),h=!1,d=function(){return this};[].keys&&("next"in(o=[].keys())?(i=a(a(o)))!==Object.prototype&&(n=i):h=!0),null==n&&(n={}),u||c(n,f)||s(n,f,d),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:h}},{"../internals/create-non-enumerable-property":236,"../internals/has":252,"../internals/is-pure":264,"../internals/object-get-prototype-of":283,"../internals/well-known-symbol":314}],268:[function(e,t,r){arguments[4][253][0].apply(r,arguments)},{dup:253}],269:[function(e,t,r){var n,i,o,a,s,c,l,u,f=e("../internals/global"),h=e("../internals/object-get-own-property-descriptor").f,d=e("../internals/classof-raw"),p=e("../internals/task").set,m=e("../internals/engine-is-ios"),b=f.MutationObserver||f.WebKitMutationObserver,y=f.process,v=f.Promise,g="process"==d(y),w=h(f,"queueMicrotask"),_=w&&w.value;_||(n=function(){var e,t;for(g&&(e=y.domain)&&e.exit();i;){t=i.fn,i=i.next;try{t()}catch(e){throw i?a():o=void 0,e}}o=void 0,e&&e.enter()},g?a=function(){y.nextTick(n)}:b&&!m?(s=!0,c=document.createTextNode(""),new b(n).observe(c,{characterData:!0}),a=function(){c.data=s=!s}):v&&v.resolve?(l=v.resolve(void 0),u=l.then,a=function(){u.call(l,n)}):a=function(){p.call(f,n)}),t.exports=_||function(e){var t={fn:e,next:void 0};o&&(o.next=t),i||(i=t,a()),o=t}},{"../internals/classof-raw":230,"../internals/engine-is-ios":242,"../internals/global":251,"../internals/object-get-own-property-descriptor":279,"../internals/task":303}],270:[function(e,t,r){var n=e("../internals/global");t.exports=n.Promise},{"../internals/global":251}],271:[function(e,t,r){var n=e("../internals/fails");t.exports=!!Object.getOwnPropertySymbols&&!n((function(){return!String(Symbol())}))},{"../internals/fails":247}],272:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/inspect-source"),o=n.WeakMap;t.exports="function"==typeof o&&/native code/.test(i(o))},{"../internals/global":251,"../internals/inspect-source":258}],273:[function(e,t,r){var n=e("../internals/a-function"),i=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};t.exports.f=function(e){return new i(e)}},{"../internals/a-function":219}],274:[function(e,t,r){var n=e("../internals/is-regexp");t.exports=function(e){if(n(e))throw TypeError("The method doesn't accept regular expressions");return e}},{"../internals/is-regexp":265}],275:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/fails"),o=e("../internals/object-keys"),a=e("../internals/object-get-own-property-symbols"),s=e("../internals/object-property-is-enumerable"),c=e("../internals/to-object"),l=e("../internals/indexed-object"),u=Object.assign,f=Object.defineProperty;t.exports=!u||i((function(){if(n&&1!==u({b:1},u(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach((function(e){t[e]=e})),7!=u({},e)[r]||o(u({},t)).join("")!=i}))?function(e,t){for(var r=c(e),i=arguments.length,u=1,f=a.f,h=s.f;i>u;)for(var d,p=l(arguments[u++]),m=f?o(p).concat(f(p)):o(p),b=m.length,y=0;b>y;)d=m[y++],n&&!h.call(p,d)||(r[d]=p[d]);return r}:u},{"../internals/descriptors":240,"../internals/fails":247,"../internals/indexed-object":257,"../internals/object-get-own-property-symbols":282,"../internals/object-keys":285,"../internals/object-property-is-enumerable":286,"../internals/to-object":308}],276:[function(e,t,r){var n,i=e("../internals/an-object"),o=e("../internals/object-define-properties"),a=e("../internals/enum-bug-keys"),s=e("../internals/hidden-keys"),c=e("../internals/html"),l=e("../internals/document-create-element"),u=e("../internals/shared-key"),f=">",h="<",d="prototype",p="script",m=u("IE_PROTO"),b=function(){},y=function(e){return h+p+f+e+h+"/"+p+f},v=function(e){e.write(y("")),e.close();var t=e.parentWindow.Object;return e=null,t},g=function(){var e,t=l("iframe"),r="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(y("document.F=Object")),e.close(),e.F},w=function(){try{n=document.domain&&new ActiveXObject("htmlfile")}catch(e){}w=n?v(n):g();for(var e=a.length;e--;)delete w[d][a[e]];return w()};s[m]=!0,t.exports=Object.create||function(e,t){var r;return null!==e?(b[d]=i(e),r=new b,b[d]=null,r[m]=e):r=w(),void 0===t?r:o(r,t)}},{"../internals/an-object":223,"../internals/document-create-element":241,"../internals/enum-bug-keys":245,"../internals/hidden-keys":253,"../internals/html":255,"../internals/object-define-properties":277,"../internals/shared-key":299}],277:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/object-define-property"),o=e("../internals/an-object"),a=e("../internals/object-keys");t.exports=n?Object.defineProperties:function(e,t){o(e);for(var r,n=a(t),s=n.length,c=0;s>c;)i.f(e,r=n[c++],t[r]);return e}},{"../internals/an-object":223,"../internals/descriptors":240,"../internals/object-define-property":278,"../internals/object-keys":285}],278:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/ie8-dom-define"),o=e("../internals/an-object"),a=e("../internals/to-primitive"),s=Object.defineProperty;r.f=n?s:function(e,t,r){if(o(e),t=a(t,!0),o(r),i)try{return s(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},{"../internals/an-object":223,"../internals/descriptors":240,"../internals/ie8-dom-define":256,"../internals/to-primitive":309}],279:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/object-property-is-enumerable"),o=e("../internals/create-property-descriptor"),a=e("../internals/to-indexed-object"),s=e("../internals/to-primitive"),c=e("../internals/has"),l=e("../internals/ie8-dom-define"),u=Object.getOwnPropertyDescriptor;r.f=n?u:function(e,t){if(e=a(e),t=s(t,!0),l)try{return u(e,t)}catch(e){}if(c(e,t))return o(!i.f.call(e,t),e[t])}},{"../internals/create-property-descriptor":237,"../internals/descriptors":240,"../internals/has":252,"../internals/ie8-dom-define":256,"../internals/object-property-is-enumerable":286,"../internals/to-indexed-object":305,"../internals/to-primitive":309}],280:[function(e,t,r){var n=e("../internals/to-indexed-object"),i=e("../internals/object-get-own-property-names").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(e){return a.slice()}};t.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(n(e))}},{"../internals/object-get-own-property-names":281,"../internals/to-indexed-object":305}],281:[function(e,t,r){var n=e("../internals/object-keys-internal"),i=e("../internals/enum-bug-keys").concat("length","prototype");r.f=Object.getOwnPropertyNames||function(e){return n(e,i)}},{"../internals/enum-bug-keys":245,"../internals/object-keys-internal":284}],282:[function(e,t,r){r.f=Object.getOwnPropertySymbols},{}],283:[function(e,t,r){var n=e("../internals/has"),i=e("../internals/to-object"),o=e("../internals/shared-key"),a=e("../internals/correct-prototype-getter"),s=o("IE_PROTO"),c=Object.prototype;t.exports=a?Object.getPrototypeOf:function(e){return e=i(e),n(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?c:null}},{"../internals/correct-prototype-getter":234,"../internals/has":252,"../internals/shared-key":299,"../internals/to-object":308}],284:[function(e,t,r){var n=e("../internals/has"),i=e("../internals/to-indexed-object"),o=e("../internals/array-includes").indexOf,a=e("../internals/hidden-keys");t.exports=function(e,t){var r,s=i(e),c=0,l=[];for(r in s)!n(a,r)&&n(s,r)&&l.push(r);for(;t.length>c;)n(s,r=t[c++])&&(~o(l,r)||l.push(r));return l}},{"../internals/array-includes":224,"../internals/has":252,"../internals/hidden-keys":253,"../internals/to-indexed-object":305}],285:[function(e,t,r){var n=e("../internals/object-keys-internal"),i=e("../internals/enum-bug-keys");t.exports=Object.keys||function(e){return n(e,i)}},{"../internals/enum-bug-keys":245,"../internals/object-keys-internal":284}],286:[function(e,t,r){var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,o=i&&!n.call({1:2},1);r.f=o?function(e){var t=i(this,e);return!!t&&t.enumerable}:n},{}],287:[function(e,t,r){var n=e("../internals/an-object"),i=e("../internals/a-possible-prototype");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,o){return n(r),i(o),t?e.call(r,o):r.__proto__=o,r}}():void 0)},{"../internals/a-possible-prototype":220,"../internals/an-object":223}],288:[function(e,t,r){var n=e("../internals/descriptors"),i=e("../internals/object-keys"),o=e("../internals/to-indexed-object"),a=e("../internals/object-property-is-enumerable").f,s=function(e){return function(t){for(var r,s=o(t),c=i(s),l=c.length,u=0,f=[];l>u;)r=c[u++],n&&!a.call(s,r)||f.push(e?[r,s[r]]:s[r]);return f}};t.exports={entries:s(!0),values:s(!1)}},{"../internals/descriptors":240,"../internals/object-keys":285,"../internals/object-property-is-enumerable":286,"../internals/to-indexed-object":305}],289:[function(e,t,r){var n=e("../internals/get-built-in"),i=e("../internals/object-get-own-property-names"),o=e("../internals/object-get-own-property-symbols"),a=e("../internals/an-object");t.exports=n("Reflect","ownKeys")||function(e){var t=i.f(a(e)),r=o.f;return r?t.concat(r(e)):t}},{"../internals/an-object":223,"../internals/get-built-in":249,"../internals/object-get-own-property-names":281,"../internals/object-get-own-property-symbols":282}],290:[function(e,t,r){var n=e("../internals/global");t.exports=n},{"../internals/global":251}],291:[function(e,t,r){t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},{}],292:[function(e,t,r){var n=e("../internals/an-object"),i=e("../internals/is-object"),o=e("../internals/new-promise-capability");t.exports=function(e,t){if(n(e),i(t)&&t.constructor===e)return t;var r=o.f(e);return(0,r.resolve)(t),r.promise}},{"../internals/an-object":223,"../internals/is-object":263,"../internals/new-promise-capability":273}],293:[function(e,t,r){var n=e("../internals/redefine");t.exports=function(e,t,r){for(var i in t)n(e,i,t[i],r);return e}},{"../internals/redefine":294}],294:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/create-non-enumerable-property"),o=e("../internals/has"),a=e("../internals/set-global"),s=e("../internals/inspect-source"),c=e("../internals/internal-state"),l=c.get,u=c.enforce,f=String(String).split("String");(t.exports=function(e,t,r,s){var c=!!s&&!!s.unsafe,l=!!s&&!!s.enumerable,h=!!s&&!!s.noTargetGet;"function"==typeof r&&("string"!=typeof t||o(r,"name")||i(r,"name",t),u(r).source=f.join("string"==typeof t?t:"")),e!==n?(c?!h&&e[t]&&(l=!0):delete e[t],l?e[t]=r:i(e,t,r)):l?e[t]=r:a(t,r)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||s(this)}))},{"../internals/create-non-enumerable-property":236,"../internals/global":251,"../internals/has":252,"../internals/inspect-source":258,"../internals/internal-state":259,"../internals/set-global":296}],295:[function(e,t,r){t.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},{}],296:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/create-non-enumerable-property");t.exports=function(e,t){try{i(n,e,t)}catch(r){n[e]=t}return t}},{"../internals/create-non-enumerable-property":236,"../internals/global":251}],297:[function(e,t,r){var n=e("../internals/get-built-in"),i=e("../internals/object-define-property"),o=e("../internals/well-known-symbol"),a=e("../internals/descriptors"),s=o("species");t.exports=function(e){var t=n(e),r=i.f;a&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},{"../internals/descriptors":240,"../internals/get-built-in":249,"../internals/object-define-property":278,"../internals/well-known-symbol":314}],298:[function(e,t,r){var n=e("../internals/object-define-property").f,i=e("../internals/has"),o=e("../internals/well-known-symbol")("toStringTag");t.exports=function(e,t,r){e&&!i(e=r?e:e.prototype,o)&&n(e,o,{configurable:!0,value:t})}},{"../internals/has":252,"../internals/object-define-property":278,"../internals/well-known-symbol":314}],299:[function(e,t,r){var n=e("../internals/shared"),i=e("../internals/uid"),o=n("keys");t.exports=function(e){return o[e]||(o[e]=i(e))}},{"../internals/shared":301,"../internals/uid":311}],300:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/set-global"),o="__core-js_shared__",a=n[o]||i(o,{});t.exports=a},{"../internals/global":251,"../internals/set-global":296}],301:[function(e,t,r){var n=e("../internals/is-pure"),i=e("../internals/shared-store");(t.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.5",mode:n?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},{"../internals/is-pure":264,"../internals/shared-store":300}],302:[function(e,t,r){var n=e("../internals/an-object"),i=e("../internals/a-function"),o=e("../internals/well-known-symbol")("species");t.exports=function(e,t){var r,a=n(e).constructor;return void 0===a||null==(r=n(a)[o])?t:i(r)}},{"../internals/a-function":219,"../internals/an-object":223,"../internals/well-known-symbol":314}],303:[function(e,t,r){var n,i,o,a=e("../internals/global"),s=e("../internals/fails"),c=e("../internals/classof-raw"),l=e("../internals/function-bind-context"),u=e("../internals/html"),f=e("../internals/document-create-element"),h=e("../internals/engine-is-ios"),d=a.location,p=a.setImmediate,m=a.clearImmediate,b=a.process,y=a.MessageChannel,v=a.Dispatch,g=0,w={},_="onreadystatechange",x=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},k=function(e){return function(){x(e)}},S=function(e){x(e.data)},T=function(e){a.postMessage(e+"",d.protocol+"//"+d.host)};p&&m||(p=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return w[++g]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},n(g),g},m=function(e){delete w[e]},"process"==c(b)?n=function(e){b.nextTick(k(e))}:v&&v.now?n=function(e){v.now(k(e))}:y&&!h?(o=(i=new y).port2,i.port1.onmessage=S,n=l(o.postMessage,o,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(T)||"file:"===d.protocol?n=_ in f("script")?function(e){u.appendChild(f("script"))[_]=function(){u.removeChild(this),x(e)}}:function(e){setTimeout(k(e),0)}:(n=T,a.addEventListener("message",S,!1))),t.exports={set:p,clear:m}},{"../internals/classof-raw":230,"../internals/document-create-element":241,"../internals/engine-is-ios":242,"../internals/fails":247,"../internals/function-bind-context":248,"../internals/global":251,"../internals/html":255}],304:[function(e,t,r){var n=e("../internals/to-integer"),i=Math.max,o=Math.min;t.exports=function(e,t){var r=n(e);return r<0?i(r+t,0):o(r,t)}},{"../internals/to-integer":306}],305:[function(e,t,r){var n=e("../internals/indexed-object"),i=e("../internals/require-object-coercible");t.exports=function(e){return n(i(e))}},{"../internals/indexed-object":257,"../internals/require-object-coercible":295}],306:[function(e,t,r){var n=Math.ceil,i=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},{}],307:[function(e,t,r){var n=e("../internals/to-integer"),i=Math.min;t.exports=function(e){return e>0?i(n(e),9007199254740991):0}},{"../internals/to-integer":306}],308:[function(e,t,r){var n=e("../internals/require-object-coercible");t.exports=function(e){return Object(n(e))}},{"../internals/require-object-coercible":295}],309:[function(e,t,r){var n=e("../internals/is-object");t.exports=function(e,t){if(!n(e))return e;var r,i;if(t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;if("function"==typeof(r=e.valueOf)&&!n(i=r.call(e)))return i;if(!t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},{"../internals/is-object":263}],310:[function(e,t,r){var n={};n[e("../internals/well-known-symbol")("toStringTag")]="z",t.exports="[object z]"===String(n)},{"../internals/well-known-symbol":314}],311:[function(e,t,r){var n=0,i=Math.random();t.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},{}],312:[function(e,t,r){var n=e("../internals/native-symbol");t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},{"../internals/native-symbol":271}],313:[function(e,t,r){var n=e("../internals/well-known-symbol");r.f=n},{"../internals/well-known-symbol":314}],314:[function(e,t,r){var n=e("../internals/global"),i=e("../internals/shared"),o=e("../internals/has"),a=e("../internals/uid"),s=e("../internals/native-symbol"),c=e("../internals/use-symbol-as-uid"),l=i("wks"),u=n.Symbol,f=c?u:u&&u.withoutSetter||a;t.exports=function(e){return o(l,e)||(s&&o(u,e)?l[e]=u[e]:l[e]=f("Symbol."+e)),l[e]}},{"../internals/global":251,"../internals/has":252,"../internals/native-symbol":271,"../internals/shared":301,"../internals/uid":311,"../internals/use-symbol-as-uid":312}],315:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/array-iteration").findIndex,o=e("../internals/add-to-unscopables"),a=e("../internals/array-method-uses-to-length"),s="findIndex",c=!0,l=a(s);s in[]&&Array(1)[s]((function(){c=!1})),n({target:"Array",proto:!0,forced:c||!l},{findIndex:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(s)},{"../internals/add-to-unscopables":221,"../internals/array-iteration":225,"../internals/array-method-uses-to-length":226,"../internals/export":246}],316:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/array-iteration").find,o=e("../internals/add-to-unscopables"),a=e("../internals/array-method-uses-to-length"),s="find",c=!0,l=a(s);s in[]&&Array(1)[s]((function(){c=!1})),n({target:"Array",proto:!0,forced:c||!l},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(s)},{"../internals/add-to-unscopables":221,"../internals/array-iteration":225,"../internals/array-method-uses-to-length":226,"../internals/export":246}],317:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/array-includes").includes,o=e("../internals/add-to-unscopables");n({target:"Array",proto:!0,forced:!e("../internals/array-method-uses-to-length")("indexOf",{ACCESSORS:!0,1:0})},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o("includes")},{"../internals/add-to-unscopables":221,"../internals/array-includes":224,"../internals/array-method-uses-to-length":226,"../internals/export":246}],318:[function(e,t,r){var n=e("../internals/to-indexed-object"),i=e("../internals/add-to-unscopables"),o=e("../internals/iterators"),a=e("../internals/internal-state"),s=e("../internals/define-iterator"),c="Array Iterator",l=a.set,u=a.getterFor(c);t.exports=s(Array,"Array",(function(e,t){l(this,{type:c,target:n(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==r?{value:n,done:!1}:"values"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},{"../internals/add-to-unscopables":221,"../internals/define-iterator":238,"../internals/internal-state":259,"../internals/iterators":268,"../internals/to-indexed-object":305}],319:[function(e,t,r){e("../internals/export")({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},{"../internals/export":246}],320:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/object-assign");n({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},{"../internals/export":246,"../internals/object-assign":275}],321:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/to-object"),o=e("../internals/object-keys");n({target:"Object",stat:!0,forced:e("../internals/fails")((function(){o(1)}))},{keys:function(e){return o(i(e))}})},{"../internals/export":246,"../internals/fails":247,"../internals/object-keys":285,"../internals/to-object":308}],322:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/object-to-array").values;n({target:"Object",stat:!0},{values:function(e){return i(e)}})},{"../internals/export":246,"../internals/object-to-array":288}],323:[function(e,t,r){var n,i,o,a,s=e("../internals/export"),c=e("../internals/is-pure"),l=e("../internals/global"),u=e("../internals/get-built-in"),f=e("../internals/native-promise-constructor"),h=e("../internals/redefine"),d=e("../internals/redefine-all"),p=e("../internals/set-to-string-tag"),m=e("../internals/set-species"),b=e("../internals/is-object"),y=e("../internals/a-function"),v=e("../internals/an-instance"),g=e("../internals/classof-raw"),w=e("../internals/inspect-source"),_=e("../internals/iterate"),x=e("../internals/check-correctness-of-iteration"),k=e("../internals/species-constructor"),S=e("../internals/task").set,T=e("../internals/microtask"),E=e("../internals/promise-resolve"),O=e("../internals/host-report-errors"),C=e("../internals/new-promise-capability"),R=e("../internals/perform"),A=e("../internals/internal-state"),M=e("../internals/is-forced"),P=e("../internals/well-known-symbol"),j=e("../internals/engine-v8-version"),I=P("species"),D="Promise",N=A.get,F=A.set,L=A.getterFor(D),B=f,z=l.TypeError,U=l.document,H=l.process,W=u("fetch"),$=C.f,V=$,q="process"==g(H),X=!!(U&&U.createEvent&&l.dispatchEvent),G="unhandledrejection",Y="rejectionhandled",K=0,Z=1,J=2,Q=1,ee=2,te=M(D,(function(){if(w(B)===String(B)){if(66===j)return!0;if(!q&&"function"!=typeof PromiseRejectionEvent)return!0}if(c&&!B.prototype.finally)return!0;if(j>=51&&/native code/.test(B))return!1;var e=B.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[I]=t,!(e.then((function(){}))instanceof t)})),re=te||!x((function(e){B.all(e).catch((function(){}))})),ne=function(e){var t;return!(!b(e)||"function"!=typeof(t=e.then))&&t},ie=function(e,t,r){if(!t.notified){t.notified=!0;var n=t.reactions;T((function(){for(var i=t.value,o=t.state==Z,a=0;n.length>a;){var s,c,l,u=n[a++],f=o?u.ok:u.fail,h=u.resolve,d=u.reject,p=u.domain;try{f?(o||(t.rejection===ee&&ce(e,t),t.rejection=Q),!0===f?s=i:(p&&p.enter(),s=f(i),p&&(p.exit(),l=!0)),s===u.promise?d(z("Promise-chain cycle")):(c=ne(s))?c.call(s,h,d):h(s)):d(i)}catch(e){p&&!l&&p.exit(),d(e)}}t.reactions=[],t.notified=!1,r&&!t.rejection&&ae(e,t)}))}},oe=function(e,t,r){var n,i;X?((n=U.createEvent("Event")).promise=t,n.reason=r,n.initEvent(e,!1,!0),l.dispatchEvent(n)):n={promise:t,reason:r},(i=l["on"+e])?i(n):e===G&&O("Unhandled promise rejection",r)},ae=function(e,t){S.call(l,(function(){var r,n=t.value;if(se(t)&&(r=R((function(){q?H.emit("unhandledRejection",n,e):oe(G,e,n)})),t.rejection=q||se(t)?ee:Q,r.error))throw r.value}))},se=function(e){return e.rejection!==Q&&!e.parent},ce=function(e,t){S.call(l,(function(){q?H.emit("rejectionHandled",e):oe(Y,e,t.value)}))},le=function(e,t,r,n){return function(i){e(t,r,i,n)}},ue=function(e,t,r,n){t.done||(t.done=!0,n&&(t=n),t.value=r,t.state=J,ie(e,t,!0))},fe=function(e,t,r,n){if(!t.done){t.done=!0,n&&(t=n);try{if(e===r)throw z("Promise can't be resolved itself");var i=ne(r);i?T((function(){var n={done:!1};try{i.call(r,le(fe,e,n,t),le(ue,e,n,t))}catch(r){ue(e,n,r,t)}})):(t.value=r,t.state=Z,ie(e,t,!1))}catch(r){ue(e,{done:!1},r,t)}}};te&&(B=function(e){v(this,B,D),y(e),n.call(this);var t=N(this);try{e(le(fe,this,t),le(ue,this,t))}catch(e){ue(this,t,e)}},(n=function(e){F(this,{type:D,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:K,value:void 0})}).prototype=d(B.prototype,{then:function(e,t){var r=L(this),n=$(k(this,B));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=q?H.domain:void 0,r.parent=!0,r.reactions.push(n),r.state!=K&&ie(this,r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),i=function(){var e=new n,t=N(e);this.promise=e,this.resolve=le(fe,e,t),this.reject=le(ue,e,t)},C.f=$=function(e){return e===B||e===o?new i(e):V(e)},c||"function"!=typeof f||(a=f.prototype.then,h(f.prototype,"then",(function(e,t){var r=this;return new B((function(e,t){a.call(r,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof W&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return E(B,W.apply(l,arguments))}}))),s({global:!0,wrap:!0,forced:te},{Promise:B}),p(B,D,!1,!0),m(D),o=u(D),s({target:D,stat:!0,forced:te},{reject:function(e){var t=$(this);return t.reject.call(void 0,e),t.promise}}),s({target:D,stat:!0,forced:c||te},{resolve:function(e){return E(c&&this===o?B:this,e)}}),s({target:D,stat:!0,forced:re},{all:function(e){var t=this,r=$(t),n=r.resolve,i=r.reject,o=R((function(){var r=y(t.resolve),o=[],a=0,s=1;_(e,(function(e){var c=a++,l=!1;o.push(void 0),s++,r.call(t,e).then((function(e){l||(l=!0,o[c]=e,--s||n(o))}),i)})),--s||n(o)}));return o.error&&i(o.value),r.promise},race:function(e){var t=this,r=$(t),n=r.reject,i=R((function(){var i=y(t.resolve);_(e,(function(e){i.call(t,e).then(r.resolve,n)}))}));return i.error&&n(i.value),r.promise}})},{"../internals/a-function":219,"../internals/an-instance":222,"../internals/check-correctness-of-iteration":229,"../internals/classof-raw":230,"../internals/engine-v8-version":244,"../internals/export":246,"../internals/get-built-in":249,"../internals/global":251,"../internals/host-report-errors":254,"../internals/inspect-source":258,"../internals/internal-state":259,"../internals/is-forced":262,"../internals/is-object":263,"../internals/is-pure":264,"../internals/iterate":266,"../internals/microtask":269,"../internals/native-promise-constructor":270,"../internals/new-promise-capability":273,"../internals/perform":291,"../internals/promise-resolve":292,"../internals/redefine":294,"../internals/redefine-all":293,"../internals/set-species":297,"../internals/set-to-string-tag":298,"../internals/species-constructor":302,"../internals/task":303,"../internals/well-known-symbol":314}],324:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/to-absolute-index"),o=String.fromCharCode,a=String.fromCodePoint;n({target:"String",stat:!0,forced:!!a&&1!=a.length},{fromCodePoint:function(e){for(var t,r=[],n=arguments.length,a=0;n>a;){if(t=+arguments[a++],i(t,1114111)!==t)throw RangeError(t+" is not a valid code point");r.push(t<65536?o(t):o(55296+((t-=65536)>>10),t%1024+56320))}return r.join("")}})},{"../internals/export":246,"../internals/to-absolute-index":304}],325:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/not-a-regexp"),o=e("../internals/require-object-coercible");n({target:"String",proto:!0,forced:!e("../internals/correct-is-regexp-logic")("includes")},{includes:function(e){return!!~String(o(this)).indexOf(i(e),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":233,"../internals/export":246,"../internals/not-a-regexp":274,"../internals/require-object-coercible":295}],326:[function(e,t,r){e("../internals/define-well-known-symbol")("asyncIterator")},{"../internals/define-well-known-symbol":239}],327:[function(e,t,r){var n=e("../internals/export"),i=e("../internals/global"),o=e("../internals/get-built-in"),a=e("../internals/is-pure"),s=e("../internals/descriptors"),c=e("../internals/native-symbol"),l=e("../internals/use-symbol-as-uid"),u=e("../internals/fails"),f=e("../internals/has"),h=e("../internals/is-array"),d=e("../internals/is-object"),p=e("../internals/an-object"),m=e("../internals/to-object"),b=e("../internals/to-indexed-object"),y=e("../internals/to-primitive"),v=e("../internals/create-property-descriptor"),g=e("../internals/object-create"),w=e("../internals/object-keys"),_=e("../internals/object-get-own-property-names"),x=e("../internals/object-get-own-property-names-external"),k=e("../internals/object-get-own-property-symbols"),S=e("../internals/object-get-own-property-descriptor"),T=e("../internals/object-define-property"),E=e("../internals/object-property-is-enumerable"),O=e("../internals/create-non-enumerable-property"),C=e("../internals/redefine"),R=e("../internals/shared"),A=e("../internals/shared-key"),M=e("../internals/hidden-keys"),P=e("../internals/uid"),j=e("../internals/well-known-symbol"),I=e("../internals/well-known-symbol-wrapped"),D=e("../internals/define-well-known-symbol"),N=e("../internals/set-to-string-tag"),F=e("../internals/internal-state"),L=e("../internals/array-iteration").forEach,B=A("hidden"),z="Symbol",U="prototype",H=j("toPrimitive"),W=F.set,$=F.getterFor(z),V=Object[U],q=i.Symbol,X=o("JSON","stringify"),G=S.f,Y=T.f,K=x.f,Z=E.f,J=R("symbols"),Q=R("op-symbols"),ee=R("string-to-symbol-registry"),te=R("symbol-to-string-registry"),re=R("wks"),ne=i.QObject,ie=!ne||!ne[U]||!ne[U].findChild,oe=s&&u((function(){return 7!=g(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?function(e,t,r){var n=G(V,t);n&&delete V[t],Y(e,t,r),n&&e!==V&&Y(V,t,n)}:Y,ae=function(e,t){var r=J[e]=g(q[U]);return W(r,{type:z,tag:e,description:t}),s||(r.description=t),r},se=l?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof q},ce=function(e,t,r){e===V&&ce(Q,t,r),p(e);var n=y(t,!0);return p(r),f(J,n)?(r.enumerable?(f(e,B)&&e[B][n]&&(e[B][n]=!1),r=g(r,{enumerable:v(0,!1)})):(f(e,B)||Y(e,B,v(1,{})),e[B][n]=!0),oe(e,n,r)):Y(e,n,r)},le=function(e,t){p(e);var r=b(t),n=w(r).concat(pe(r));return L(n,(function(t){s&&!fe.call(r,t)||ce(e,t,r[t])})),e},ue=function(e,t){return void 0===t?g(e):le(g(e),t)},fe=function(e){var t=y(e,!0),r=Z.call(this,t);return!(this===V&&f(J,t)&&!f(Q,t))&&(!(r||!f(this,t)||!f(J,t)||f(this,B)&&this[B][t])||r)},he=function(e,t){var r=b(e),n=y(t,!0);if(r!==V||!f(J,n)||f(Q,n)){var i=G(r,n);return!i||!f(J,n)||f(r,B)&&r[B][n]||(i.enumerable=!0),i}},de=function(e){var t=K(b(e)),r=[];return L(t,(function(e){f(J,e)||f(M,e)||r.push(e)})),r},pe=function(e){var t=e===V,r=K(t?Q:b(e)),n=[];return L(r,(function(e){!f(J,e)||t&&!f(V,e)||n.push(J[e])})),n};c||(q=function(){if(this instanceof q)throw TypeError("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=P(e),r=function(e){this===V&&r.call(Q,e),f(this,B)&&f(this[B],t)&&(this[B][t]=!1),oe(this,t,v(1,e))};return s&&ie&&oe(V,t,{configurable:!0,set:r}),ae(t,e)},C(q[U],"toString",(function(){return $(this).tag})),C(q,"withoutSetter",(function(e){return ae(P(e),e)})),E.f=fe,T.f=ce,S.f=he,_.f=x.f=de,k.f=pe,I.f=function(e){return ae(j(e),e)},s&&(Y(q[U],"description",{configurable:!0,get:function(){return $(this).description}}),a||C(V,"propertyIsEnumerable",fe,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!c,sham:!c},{Symbol:q}),L(w(re),(function(e){D(e)})),n({target:z,stat:!0,forced:!c},{for:function(e){var t=String(e);if(f(ee,t))return ee[t];var r=q(t);return ee[t]=r,te[r]=t,r},keyFor:function(e){if(!se(e))throw TypeError(e+" is not a symbol");if(f(te,e))return te[e]},useSetter:function(){ie=!0},useSimple:function(){ie=!1}}),n({target:"Object",stat:!0,forced:!c,sham:!s},{create:ue,defineProperty:ce,defineProperties:le,getOwnPropertyDescriptor:he}),n({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:de,getOwnPropertySymbols:pe}),n({target:"Object",stat:!0,forced:u((function(){k.f(1)}))},{getOwnPropertySymbols:function(e){return k.f(m(e))}}),X&&n({target:"JSON",stat:!0,forced:!c||u((function(){var e=q();return"[null]"!=X([e])||"{}"!=X({a:e})||"{}"!=X(Object(e))}))},{stringify:function(e,t,r){for(var n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t,(d(t)||void 0!==e)&&!se(e))return h(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!se(t))return t}),i[1]=t,X.apply(null,i)}}),q[U][H]||O(q[U],H,q[U].valueOf),N(q,z),M[B]=!0},{"../internals/an-object":223,"../internals/array-iteration":225,"../internals/create-non-enumerable-property":236,"../internals/create-property-descriptor":237,"../internals/define-well-known-symbol":239,"../internals/descriptors":240,"../internals/export":246,"../internals/fails":247,"../internals/get-built-in":249,"../internals/global":251,"../internals/has":252,"../internals/hidden-keys":253,"../internals/internal-state":259,"../internals/is-array":261,"../internals/is-object":263,"../internals/is-pure":264,"../internals/native-symbol":271,"../internals/object-create":276,"../internals/object-define-property":278,"../internals/object-get-own-property-descriptor":279,"../internals/object-get-own-property-names":281,"../internals/object-get-own-property-names-external":280,"../internals/object-get-own-property-symbols":282,"../internals/object-keys":285,"../internals/object-property-is-enumerable":286,"../internals/redefine":294,"../internals/set-to-string-tag":298,"../internals/shared":301,"../internals/shared-key":299,"../internals/to-indexed-object":305,"../internals/to-object":308,"../internals/to-primitive":309,"../internals/uid":311,"../internals/use-symbol-as-uid":312,"../internals/well-known-symbol":314,"../internals/well-known-symbol-wrapped":313}],328:[function(e,t,r){(function(e){function t(e){return t="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},t(e)}function n(e){return Array.isArray?Array.isArray(e):"[object Array]"===y(e)}function i(e){return"boolean"==typeof e}function o(e){return null===e}function a(e){return null==e}function s(e){return"number"==typeof e}function c(e){return"string"==typeof e}function l(e){return"symbol"===t(e)}function u(e){return void 0===e}function f(e){return"[object RegExp]"===y(e)}function h(e){return"object"===t(e)&&null!==e}function d(e){return"[object Date]"===y(e)}function p(e){return"[object Error]"===y(e)||e instanceof Error}function m(e){return"function"==typeof e}function b(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===t(e)||void 0===e}function y(e){return Object.prototype.toString.call(e)}r.isArray=n,r.isBoolean=i,r.isNull=o,r.isNullOrUndefined=a,r.isNumber=s,r.isString=c,r.isSymbol=l,r.isUndefined=u,r.isRegExp=f,r.isObject=h,r.isDate=d,r.isError=p,r.isFunction=m,r.isPrimitive=b,r.isBuffer=e.isBuffer}).call(this,{isBuffer:e("../../is-buffer/index.js")})},{"../../is-buffer/index.js":388}],329:[function(e,t,r){(function(r){var n=e("elliptic"),i=e("bn.js");t.exports=function(e){return new a(e)};var o={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};function a(e){this.curveType=o[e],this.curveType||(this.curveType={name:e}),this.curve=new n.ec(this.curveType.name),this.keys=void 0}function s(e,t,n){Array.isArray(e)||(e=e.toArray());var i=new r(e);if(n&&i.lengthr?t=("rmd160"===e?new c:l(e)).update(t).digest():t.lengths?t=e(t):t.length=t?e:""+Array(t+1-n.length).join(r)+e},p={s:d,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),i=r%60;return(t<=0?"+":"-")+d(n,2,"0")+":"+d(i,2,"0")},m:function e(t,r){if(t.date()68?1900:2e3)}],YYYY:[/\d{4}/,o("year")],Z:a,ZZ:a},l=function(e,r,n){try{var i=function(e){for(var r=e.match(t),n=r.length,i=0;i0?a-1:p.getMonth());var v=l||0,g=u||0,w=f||0,_=h||0;return d?new Date(Date.UTC(b,y,m,v,g,w,_+60*d.offset*1e3)):n?new Date(Date.UTC(b,y,m,v,g,w,_)):new Date(b,y,m,v,g,w,_)}catch(e){return new Date("")}};return function(t,r,n){var i=r.prototype,o=i.parse;i.parse=function(t){var r=t.date,i=t.utc,a=t.args;this.$u=i;var s=a[1];if("string"==typeof s){var c=!0===a[2],u=!0===a[3],f=c||u,h=a[2];u&&(h=a[2]),c||(e=h?n.Ls[h]:this.$locale()),this.$d=l(r,s,i),this.init(),h&&!0!==h&&(this.$L=this.locale(h).$L),f&&r!==this.format(s)&&(this.$d=new Date(""))}else if(s instanceof Array)for(var d=s.length,p=1;p<=d;p+=1){a[1]=s[p-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}p===d&&(this.$d=new Date(""))}else o.call(this,t)}}}))},{}],338:[function(e,t,r){function n(e){return n="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},n(e)}!function(e,i){"object"==(void 0===r?"undefined":n(r))&&void 0!==t?t.exports=i():e.dayjs_plugin_utc=i()}(void 0,(function(){return function(e,t,r){var n=(new Date).getTimezoneOffset(),i=t.prototype;r.utc=function(e){return new t({date:e,utc:!0,args:arguments})},i.utc=function(){return r(this.toDate(),{locale:this.$L,utc:!0})},i.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var o=i.parse;i.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),o.call(this,e)};var a=i.init;i.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else a.call(this)};var s=i.utcOffset;i.utcOffset=function(e,t){var r=this.$utils().u;if(r(e))return this.$u?0:r(this.$offset)?s.call(this):this.$offset;var i=Math.abs(e)<=16?60*e:e,o=this;return t?(o.$offset=i,o.$u=0===e,o):(0!==e?(o=this.local().add(i+n,"minute")).$offset=i:o=this.utc(),o)};var c=i.format;i.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return c.call(this,t)},i.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+n;return this.$d.valueOf()-6e4*e},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var l=i.toDate;i.toDate=function(e){return"s"===e&&this.$offset?r(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var u=i.diff;i.diff=function(e,t,n){var i=this.local(),o=r(e).local();return u.call(i,o,t,n)}}}))},{}],339:[function(e,t,r){r.utils=e("./des/utils"),r.Cipher=e("./des/cipher"),r.DES=e("./des/des"),r.CBC=e("./des/cbc"),r.EDE=e("./des/ede")},{"./des/cbc":340,"./des/cipher":341,"./des/des":342,"./des/ede":343,"./des/utils":344}],340:[function(e,t,r){var n=e("minimalistic-assert"),i=e("inherits"),o={};function a(e){n.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;t0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(i,r);return t+=this._buffer(e,t),i},i.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},i.prototype._pad=function(e,t){if(0===t)return!1;for(;t>>1];r=o.r28shl(r,s),i=o.r28shl(i,s),o.pc2(r,i,e.keys,a)}},c.prototype._update=function(e,t,r,n){var i=this._desState,a=o.readUInt32BE(e,t),s=o.readUInt32BE(e,t+4);o.ip(a,s,i.tmp,0),a=i.tmp[0],s=i.tmp[1],"encrypt"===this.type?this._encrypt(i,a,s,i.tmp,0):this._decrypt(i,a,s,i.tmp,0),a=i.tmp[0],s=i.tmp[1],o.writeUInt32BE(r,a,n),o.writeUInt32BE(r,s,n+4)},c.prototype._pad=function(e,t){for(var r=e.length-t,n=t;n>>0,a=h}o.rip(s,a,n,i)},c.prototype._decrypt=function(e,t,r,n,i){for(var a=r,s=t,c=e.keys.length-2;c>=0;c-=2){var l=e.keys[c],u=e.keys[c+1];o.expand(a,e.tmp,0),l^=e.tmp[0],u^=e.tmp[1];var f=o.substitute(l,u),h=a;a=(s^o.permute(f))>>>0,s=h}o.rip(a,s,n,i)}},{"./cipher":341,"./utils":344,inherits:387,"minimalistic-assert":437}],343:[function(e,t,r){var n=e("minimalistic-assert"),i=e("inherits"),o=e("./cipher"),a=e("./des");function s(e,t){n.equal(t.length,24,"Invalid key length");var r=t.slice(0,8),i=t.slice(8,16),o=t.slice(16,24);this.ciphers="encrypt"===e?[a.create({type:"encrypt",key:r}),a.create({type:"decrypt",key:i}),a.create({type:"encrypt",key:o})]:[a.create({type:"decrypt",key:o}),a.create({type:"encrypt",key:i}),a.create({type:"decrypt",key:r})]}function c(e){o.call(this,e);var t=new s(this.type,this.options.key);this._edeState=t}i(c,o),t.exports=c,c.create=function(e){return new c(e)},c.prototype._update=function(e,t,r,n){var i=this._edeState;i.ciphers[0]._update(e,t,r,n),i.ciphers[1]._update(r,n,r,n),i.ciphers[2]._update(r,n,r,n)},c.prototype._pad=a.prototype._pad,c.prototype._unpad=a.prototype._unpad},{"./cipher":341,"./des":342,inherits:387,"minimalistic-assert":437}],344:[function(e,t,r){r.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,n){for(var i=0,o=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)o<<=1,o|=t>>>s+a&1;for(s=1;s<=25;s+=8)o<<=1,o|=e>>>s+a&1}r[n+0]=i>>>0,r[n+1]=o>>>0},r.rip=function(e,t,r,n){for(var i=0,o=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)i<<=1,i|=t>>>s+a&1,i<<=1,i|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},r.pc1=function(e,t,r,n){for(var i=0,o=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1}for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},r.r28shl=function(e,t){return e<>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,i){for(var o=0,a=0,s=n.length>>>1,c=0;c>>n[c]&1;for(c=s;c>>n[c]&1;r[i+0]=o>>>0,r[i+1]=a>>>0},r.expand=function(e,t,r){var n=0,i=0;n=(1&e)<<5|e>>>27;for(var o=23;o>=15;o-=4)n<<=6,n|=e>>>o&63;for(o=11;o>=3;o-=4)i|=e>>>o&63,i<<=6;i|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=i>>>0};var i=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,n=0;n<4;n++)r<<=4,r|=i[64*n+(e>>>18-6*n&63)];for(n=0;n<4;n++)r<<=4,r|=i[256+64*n+(t>>>18-6*n&63)];return r>>>0};var o=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r>>o[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var n=e.toString(2);n.lengthe;)r.ishrn(1);if(r.isEven()&&r.iadd(s),r.testn(1)||r.iadd(c),t.cmp(c)){if(!t.cmp(l))for(;r.mod(u).cmp(f);)r.iadd(d)}else for(;r.mod(o).cmp(h);)r.iadd(d);if(b(p=r.shrn(1))&&b(r)&&y(p)&&y(r)&&a.test(p)&&a.test(r))return r}}},{"bn.js":349,"miller-rabin":435,randombytes:475}],348:[function(e,t,r){t.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],349:[function(e,t,r){arguments[4][181][0].apply(r,arguments)},{buffer:185,dup:181}],350:[function(e,t,r){var n=r;n.version=e("../package.json").version,n.utils=e("./elliptic/utils"),n.rand=e("brorand"),n.curve=e("./elliptic/curve"),n.curves=e("./elliptic/curves"),n.ec=e("./elliptic/ec"),n.eddsa=e("./elliptic/eddsa")},{"../package.json":366,"./elliptic/curve":353,"./elliptic/curves":356,"./elliptic/ec":357,"./elliptic/eddsa":360,"./elliptic/utils":364,brorand:184}],351:[function(e,t,r){var n=e("bn.js"),i=e("../utils"),o=i.getNAF,a=i.getJSF,s=i.assert;function c(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function l(e,t){this.curve=e,this.type=t,this.precomputed=null}t.exports=c,c.prototype.point=function(){throw new Error("Not implemented")},c.prototype.validate=function(){throw new Error("Not implemented")},c.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=o(t,1,this._bitLength),i=(1<=c;t--)l=(l<<1)+n[t];a.push(l)}for(var u=this.jpoint(null,null,null),f=this.jpoint(null,null,null),h=i;h>0;h--){for(c=0;c=0;l--){for(t=0;l>=0&&0===a[l];l--)t++;if(l>=0&&t++,c=c.dblp(t),l<0)break;var u=a[l];s(0!==u),c="affine"===e.type?u>0?c.mixedAdd(i[u-1>>1]):c.mixedAdd(i[-u-1>>1].neg()):u>0?c.add(i[u-1>>1]):c.add(i[-u-1>>1].neg())}return"affine"===e.type?c.toP():c},c.prototype._wnafMulAdd=function(e,t,r,n,i){for(var s=this._wnafT1,c=this._wnafT2,l=this._wnafT3,u=0,f=0;f=1;f-=2){var d=f-1,p=f;if(1===s[d]&&1===s[p]){var m=[t[d],null,null,t[p]];0===t[d].y.cmp(t[p].y)?(m[1]=t[d].add(t[p]),m[2]=t[d].toJ().mixedAdd(t[p].neg())):0===t[d].y.cmp(t[p].y.redNeg())?(m[1]=t[d].toJ().mixedAdd(t[p]),m[2]=t[d].add(t[p].neg())):(m[1]=t[d].toJ().mixedAdd(t[p]),m[2]=t[d].toJ().mixedAdd(t[p].neg()));var b=[-3,-1,-5,-7,0,7,5,1,3],y=a(r[d],r[p]);u=Math.max(y[0].length,u),l[d]=new Array(u),l[p]=new Array(u);for(var v=0;v=0;f--){for(var k=0;f>=0;){var S=!0;for(v=0;v=0&&k++,_=_.dblp(k),f<0)break;for(v=0;v0?T=c[v][E-1>>1]:E<0&&(T=c[v][-E-1>>1].neg()),_="affine"===T.type?_.mixedAdd(T):_.add(T))}}for(f=0;f=Math.ceil((e.bitLength()+1)/t.step)},l.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i":""},l.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},l.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),a=o.redSub(r),s=n.redSub(t),c=i.redMul(a),l=o.redMul(s),u=i.redMul(s),f=a.redMul(o);return this.curve.point(c,l,f,u)},l.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(l=this.curve._mulA(i)).redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(l.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),c=a.redSub(s).redISub(s);e=n.redSub(i).redISub(o).redMul(c),t=a.redMul(l.redSub(o)),r=a.redMul(c)}}else{var l=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),c=l.redSub(s).redSub(s),e=this.curve._mulC(n.redISub(l)).redMul(c),t=this.curve._mulC(l).redMul(i.redISub(o)),r=l.redMul(c)}return this.curve.point(e,t,r)},l.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},l.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),a=i.redSub(n),s=i.redAdd(n),c=r.redAdd(t),l=o.redMul(a),u=s.redMul(c),f=o.redMul(c),h=a.redMul(s);return this.curve.point(l,u,h,f)},l.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(o).redMul(a),c=i.redSub(s),l=i.redAdd(s),u=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(a),f=n.redMul(c).redMul(u);return this.curve.twisted?(t=n.redMul(l).redMul(a.redSub(this.curve._mulA(o))),r=c.redMul(l)):(t=n.redMul(l).redMul(a.redSub(o)),r=this.curve._mulC(c).redMul(l)),this.curve.point(f,t,r)},l.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},l.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},l.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},l.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},l.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()},l.prototype.getY=function(){return this.normalize(),this.y.fromRed()},l.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},l.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},l.prototype.toP=l.prototype.normalize,l.prototype.mixedAdd=l.prototype.add},{"../utils":364,"./base":351,"bn.js":365,inherits:387}],353:[function(e,t,r){var n=r;n.base=e("./base"),n.short=e("./short"),n.mont=e("./mont"),n.edwards=e("./edwards")},{"./base":351,"./edwards":352,"./mont":354,"./short":355}],354:[function(e,t,r){var n=e("bn.js"),i=e("inherits"),o=e("./base"),a=e("../utils");function s(e){o.call(this,"mont",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,t,r){o.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,o),t.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},i(c,o.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new c(this,e,t)},s.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,t){return new c(e,t[0],t[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),i=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z).redMul(r),a=i.redMul(n),s=t.z.redMul(o.redAdd(a).redSqr()),c=t.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,c)},c.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":364,"./base":351,"bn.js":365,inherits:387}],355:[function(e,t,r){var n=e("../utils"),i=e("bn.js"),o=e("inherits"),a=e("./base"),s=n.assert;function c(e){a.call(this,"short",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function l(e,t,r,n){a.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(t,16),this.y=new i(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function u(e,t,r,n){a.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(t,16),this.y=new i(r,16),this.z=new i(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}o(c,a),t.exports=c,c.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new i(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=(t=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(e.lambda)r=new i(e.lambda,16);else{var o=this._getEndoRoots(this.n);0===this.g.mul(o[0]).x.cmp(this.g.x.redMul(t))?r=o[0]:(r=o[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new i(e.a,16),b:new i(e.b,16)}})):this._getEndoBasis(r)}}},c.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:i.mont(e),r=new i(2).toRed(t).redInvm(),n=r.redNeg(),o=new i(3).toRed(t).redNeg().redSqrt().redMul(r);return[n.redAdd(o).fromRed(),n.redSub(o).fromRed()]},c.prototype._getEndoBasis=function(e){for(var t,r,n,o,a,s,c,l,u,f=this.n.ushrn(Math.floor(this.n.bitLength()/2)),h=e,d=this.n.clone(),p=new i(1),m=new i(0),b=new i(0),y=new i(1),v=0;0!==h.cmpn(0);){var g=d.div(h);l=d.sub(g.mul(h)),u=b.sub(g.mul(p));var w=y.sub(g.mul(m));if(!n&&l.cmp(f)<0)t=c.neg(),r=p,n=l.neg(),o=u;else if(n&&2==++v)break;c=l,d=h,h=l,b=p,p=u,y=m,m=w}a=l.neg(),s=u;var _=n.sqr().add(o.sqr());return a.sqr().add(s.sqr()).cmp(_)>=0&&(a=t,s=r),n.negative&&(n=n.neg(),o=o.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:o},{a:a,b:s}]},c.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),c=i.mul(r.b),l=o.mul(n.b);return{k1:e.sub(a).sub(s),k2:c.add(l).neg()}},c.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var o=n.fromRed().isOdd();return(t&&!o||!t&&o)&&(n=n.redNeg()),this.point(e,n)},c.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},c.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},l.prototype.isInfinity=function(){return this.inf},l.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},l.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},l.prototype.getX=function(){return this.x.fromRed()},l.prototype.getY=function(){return this.y.fromRed()},l.prototype.mul=function(e){return e=new i(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},l.prototype.jmulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},l.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},l.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},l.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(u,a.BasePoint),c.prototype.jpoint=function(e,t,r){return new u(this,e,t,r)},u.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},u.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},u.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(i),c=o.redSub(a);if(0===s.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var l=s.redSqr(),u=l.redMul(s),f=n.redMul(l),h=c.redSqr().redIAdd(u).redISub(f).redISub(f),d=c.redMul(f.redISub(h)).redISub(o.redMul(u)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(h,d,p)},u.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=a.redSqr(),l=c.redMul(a),u=r.redMul(c),f=s.redSqr().redIAdd(l).redISub(u).redISub(u),h=s.redMul(u.redISub(f)).redISub(i.redMul(l)),d=this.z.redMul(a);return this.curve.jpoint(f,h,d)},u.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../utils":364,"./base":351,"bn.js":365,inherits:387}],356:[function(e,t,r){var n,i=r,o=e("hash.js"),a=e("./curve"),s=e("./utils").assert;function c(e){"short"===e.type?this.curve=new a.short(e):"edwards"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function l(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new c(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=c,l("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),l("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),l("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),l("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),l("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),l("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),l("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=e("./precomputed/secp256k1")}catch(e){n=void 0}l("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},{"./curve":353,"./precomputed/secp256k1":363,"./utils":364,"hash.js":372}],357:[function(e,t,r){function n(e){return n="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},n(e)}var i=e("bn.js"),o=e("hmac-drbg"),a=e("../utils"),s=e("../curves"),c=e("brorand"),l=a.assert,u=e("./key"),f=e("./signature");function h(e){if(!(this instanceof h))return new h(e);"string"==typeof e&&(l(s.hasOwnProperty(e),"Unknown curve "+e),e=s[e]),e instanceof s.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}t.exports=h,h.prototype.keyPair=function(e){return new u(this,e)},h.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},h.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},h.prototype.genKeyPair=function(e){e||(e={});for(var t=new o({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||c(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var a=new i(t.generate(r));if(!(a.cmp(n)>0))return a.iaddn(1),this.keyFromPrivate(a)}},h.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},h.prototype.sign=function(e,t,r,a){"object"===n(r)&&(a=r,r=null),a||(a={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),c=t.getPrivate().toArray("be",s),l=e.toArray("be",s),u=new o({hash:this.hash,entropy:c,nonce:l,pers:a.pers,persEnc:a.persEnc||"utf8"}),h=this.n.sub(new i(1)),d=0;;d++){var p=a.k?a.k(d):new i(u.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(h)>=0)){var m=this.g.mul(p);if(!m.isInfinity()){var b=m.getX(),y=b.umod(this.n);if(0!==y.cmpn(0)){var v=p.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var g=(m.getY().isOdd()?1:0)|(0!==b.cmp(y)?2:0);return a.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),g^=1),new f({r:y,s:v,recoveryParam:g})}}}}}},h.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n);var o=(t=new f(t,"hex")).r,a=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,c=a.invm(this.n),l=c.mul(e).umod(this.n),u=c.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(l,r.getPublic(),u)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(l,r.getPublic(),u)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},h.prototype.recoverPubKey=function(e,t,r,n){l((3&r)===r,"The recovery param is more than two bits"),t=new f(t,n);var o=this.n,a=new i(e),s=t.r,c=t.s,u=1&r,h=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&h)throw new Error("Unable to find sencond key candinate");s=h?this.curve.pointFromX(s.add(this.curve.n),u):this.curve.pointFromX(s,u);var d=t.r.invm(o),p=o.sub(a).mul(d).umod(o),m=c.mul(d).umod(o);return this.g.mulAdd(p,s,m)},h.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new f(t,n)).recoveryParam)return t.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(e,t,i)}catch(e){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},{"../curves":356,"../utils":364,"./key":358,"./signature":359,"bn.js":365,brorand:184,"hmac-drbg":384}],358:[function(e,t,r){var n=e("bn.js"),i=e("../utils").assert;function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}t.exports=o,o.fromPublic=function(e,t,r){return t instanceof o?t:new o(e,{pub:t,pubEnc:r})},o.fromPrivate=function(e,t,r){return t instanceof o?t:new o(e,{priv:t,privEnc:r})},o.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},o.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},o.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?i(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||i(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},o.prototype.derive=function(e){return e.mul(this.priv).getX()},o.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},o.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},o.prototype.inspect=function(){return""}},{"../utils":364,"bn.js":365}],359:[function(e,t,r){var n=e("bn.js"),i=e("../utils"),o=i.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(o(e.r&&e.s,"Signature without r or s"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function c(e,t){var r=e[t.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var i=0,o=0,a=t.place;o>>=0;return!(i<=127)&&(t.place=a,i)}function l(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}t.exports=a,a.prototype._importDER=function(e,t){e=i.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;var o=c(e,r);if(!1===o)return!1;if(o+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var a=c(e,r);if(!1===a)return!1;var l=e.slice(r.place,a+r.place);if(r.place+=a,2!==e[r.place++])return!1;var u=c(e,r);if(!1===u)return!1;if(e.length!==u+r.place)return!1;var f=e.slice(r.place,u+r.place);if(0===l[0]){if(!(128&l[1]))return!1;l=l.slice(1)}if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}return this.r=new n(l),this.s=new n(f),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=l(t),r=l(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];u(n,t.length),(n=n.concat(t)).push(2),u(n,r.length);var o=n.concat(r),a=[48];return u(a,o.length),a=a.concat(o),i.encode(a,e)}},{"../utils":364,"bn.js":365}],360:[function(e,t,r){var n=e("hash.js"),i=e("../curves"),o=e("../utils"),a=o.assert,s=o.parseBytes,c=e("./key"),l=e("./signature");function u(e){if(a("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof u))return new u(e);e=i[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}t.exports=u,u.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),e).mul(r.priv()),c=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:c,Rencoded:o})},u.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),i=this.hashInt(t.Rencoded(),n.pubBytes(),e),o=this.g.mul(t.S());return t.R().add(n.pub().mul(i)).eq(o)},u.prototype.hashInt=function(){for(var e=this.hash(),t=0;t(i>>1)-1?(i>>1)-c:c,o.isubn(s)):s=0,n[a]=s,o.iushrn(1)}return n}function c(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,i=0;e.cmpn(-n)>0||t.cmpn(-i)>0;){var o,a,s,c=e.andln(3)+n&3,l=t.andln(3)+i&3;3===c&&(c=-1),3===l&&(l=-1),o=0==(1&c)?0:3!=(s=e.andln(7)+n&7)&&5!==s||2!==l?c:-c,r[0].push(o),a=0==(1&l)?0:3!=(s=t.andln(7)+i&7)&&5!==s||2!==c?l:-l,r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r}function l(e,t,r){var n="_"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}}function u(e){return"string"==typeof e?n.toArray(e,"hex"):e}function f(e){return new i(e,"hex","le")}n.assert=o,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=s,n.getJSF=c,n.cachedProperty=l,n.parseBytes=u,n.intFromLE=f},{"bn.js":365,"minimalistic-assert":437,"minimalistic-crypto-utils":438}],365:[function(e,t,r){arguments[4][181][0].apply(r,arguments)},{buffer:185,dup:181}],366:[function(e,t,r){t.exports={_from:"elliptic@^6.5.3",_id:"elliptic@6.5.3",_inBundle:!1,_integrity:"sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",_location:"/elliptic",_phantomChildren:{},_requested:{type:"range",registry:!0,raw:"elliptic@^6.5.3",name:"elliptic",escapedName:"elliptic",rawSpec:"^6.5.3",saveSpec:null,fetchSpec:"^6.5.3"},_requiredBy:["/browserify-sign","/create-ecdh"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",_shasum:"cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6",_spec:"elliptic@^6.5.3",_where:"/mnt/d/dev/git/exceljs/node_modules/browserify-sign",author:{name:"Fedor Indutny",email:"fedor@indutny.com"},bugs:{url:"https://github.com/indutny/elliptic/issues"},bundleDependencies:!1,dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0",inherits:"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},deprecated:!1,description:"EC cryptography",devDependencies:{brfs:"^1.4.3",coveralls:"^3.0.8",grunt:"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.2",jscs:"^3.0.7",jshint:"^2.10.3",mocha:"^6.2.2"},files:["lib"],homepage:"https://github.com/indutny/elliptic",keywords:["EC","Elliptic","curve","Cryptography"],license:"MIT",main:"lib/elliptic.js",name:"elliptic",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/index.js",version:"grunt dist && git add dist/"},version:"6.5.3"}},{}],367:[function(e,t,r){function n(e){return n="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},n(e)}var i=Object.create||T,o=Object.keys||E,a=Function.prototype.bind||O;function s(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=i(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=s,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._maxListeners=void 0;var c,l=10;try{var u={};Object.defineProperty&&Object.defineProperty(u,"x",{value:0}),c=0===u.x}catch(e){c=!1}function f(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function h(e,t,r){if(t)e.call(r);else for(var n=e.length,i=k(e,n),o=0;o0&&c.length>a){c.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+c.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=c.length,"object"===("undefined"==typeof console?"undefined":n(console))&&console.warn&&console.warn("%s: %s",l.name,l.message)}}else c=s[t]=r,++e._eventsCount;return e}function v(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var c=new Error('Unhandled "error" event. ('+t+")");throw c.context=t,c}if(!(r=a[e]))return!1;var l="function"==typeof r;switch(n=arguments.length){case 1:h(r,l,this);break;case 2:d(r,l,this,arguments[1]);break;case 3:p(r,l,this,arguments[1],arguments[2]);break;case 4:m(r,l,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),o=1;o=0;a--)if(r[a]===t||r[a].listener===t){s=r[a].listener,o=a;break}if(o<0)return this;0===o?r.shift():x(r,o),1===r.length&&(n[e]=r[0]),n.removeListener&&this.emit("removeListener",e,s||t)}return this},s.prototype.removeAllListeners=function(e){var t,r,n;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=i(null),this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=i(null):delete r[e]),this;if(0===arguments.length){var a,s=o(r);for(n=0;n=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return w(this,e,!0)},s.prototype.rawListeners=function(e){return w(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):_.call(e,t)},s.prototype.listenerCount=_,s.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],368:[function(e,t,r){var n=e("safe-buffer").Buffer,i=e("md5.js");function o(e,t,r,o){if(n.isBuffer(e)||(e=n.from(e,"binary")),t&&(n.isBuffer(t)||(t=n.from(t,"binary")),8!==t.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var a=r/8,s=n.alloc(a),c=n.alloc(o||0),l=n.alloc(0);a>0||o>0;){var u=new i;u.update(l),u.update(e),t&&u.update(t),l=u.digest();var f=0;if(a>0){var h=s.length-a;f=Math.min(a,l.length),l.copy(s,h,0,f),a-=f}if(f0){var d=c.length-o,p=Math.min(o,l.length-f);l.copy(c,d,f,f+p),o-=p}}return l.fill(0),{key:s,iv:c}}t.exports=o},{"md5.js":434,"safe-buffer":494}],369:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0});var n=e("@fast-csv/format");Object.defineProperty(r,"format",{enumerable:!0,get:function(){return n.format}}),Object.defineProperty(r,"write",{enumerable:!0,get:function(){return n.write}}),Object.defineProperty(r,"writeToStream",{enumerable:!0,get:function(){return n.writeToStream}}),Object.defineProperty(r,"writeToBuffer",{enumerable:!0,get:function(){return n.writeToBuffer}}),Object.defineProperty(r,"writeToString",{enumerable:!0,get:function(){return n.writeToString}}),Object.defineProperty(r,"writeToPath",{enumerable:!0,get:function(){return n.writeToPath}}),Object.defineProperty(r,"CsvFormatterStream",{enumerable:!0,get:function(){return n.CsvFormatterStream}}),Object.defineProperty(r,"FormatterOptions",{enumerable:!0,get:function(){return n.FormatterOptions}});var i=e("@fast-csv/parse");Object.defineProperty(r,"parse",{enumerable:!0,get:function(){return i.parse}}),Object.defineProperty(r,"parseString",{enumerable:!0,get:function(){return i.parseString}}),Object.defineProperty(r,"parseStream",{enumerable:!0,get:function(){return i.parseStream}}),Object.defineProperty(r,"parseFile",{enumerable:!0,get:function(){return i.parseFile}}),Object.defineProperty(r,"ParserOptions",{enumerable:!0,get:function(){return i.ParserOptions}}),Object.defineProperty(r,"CsvParserStream",{enumerable:!0,get:function(){return i.CsvParserStream}})},{"@fast-csv/format":148,"@fast-csv/parse":152}],370:[function(e,t,r){var n=e("safe-buffer").Buffer,i=e("readable-stream").Transform;function o(e,t){if(!n.isBuffer(e)&&"string"!=typeof e)throw new TypeError(t+" must be a string or a buffer")}function a(e){i.call(this),this._block=n.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}e("inherits")(a,i),a.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},a.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},a.prototype.update=function(e,t){if(o(e,"Data"),this._finalized)throw new Error("Digest already called");n.isBuffer(e)||(e=n.from(e,t));for(var r=this._block,i=0;this._blockOffset+e.length-i>=this._blockSize;){for(var a=this._blockOffset;a0;++s)this._length[s]+=c,(c=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*c);return this},a.prototype._update=function(){throw new Error("_update is not implemented")},a.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},a.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=a},{inherits:387,"readable-stream":491,"safe-buffer":371}],371:[function(e,t,r){arguments[4][214][0].apply(r,arguments)},{buffer:216,dup:214}],372:[function(e,t,r){var n=r;n.utils=e("./hash/utils"),n.common=e("./hash/common"),n.sha=e("./hash/sha"),n.ripemd=e("./hash/ripemd"),n.hmac=e("./hash/hmac"),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},{"./hash/common":373,"./hash/hmac":374,"./hash/ripemd":375,"./hash/sha":376,"./hash/utils":383}],373:[function(e,t,r){var n=e("./utils"),i=e("minimalistic-assert");function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}r.BlockHash=o,o.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=e>>>16&255,n[i++]=e>>>8&255,n[i++]=255&e}else for(n[i++]=255&e,n[i++]=e>>>8&255,n[i++]=e>>>16&255,n[i++]=e>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;othis.blockSize&&(e=(new this.Hash).update(e).digest()),i(e.length<=this.blockSize);for(var t=e.length;t>>3}function f(e){return n(e,17)^n(e,19)^e>>>10}r.ft_1=i,r.ch32=o,r.maj32=a,r.p32=s,r.s0_256=c,r.s1_256=l,r.g0_256=u,r.g1_256=f},{"../utils":383}],383:[function(e,t,r){var n=e("minimalistic-assert"),i=e("inherits");function o(e,t){return 55296==(64512&e.charCodeAt(t))&&!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1))}function a(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i>6|192,r[n++]=63&a|128):o(e,i)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++i)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(i=0;i>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function l(e,t){for(var r="",n=0;n>>0}return a}function d(e,t){for(var r=new Array(4*e.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function p(e,t){return e>>>t|e<<32-t}function m(e,t){return e<>>32-t}function b(e,t){return e+t>>>0}function y(e,t,r){return e+t+r>>>0}function v(e,t,r,n){return e+t+r+n>>>0}function g(e,t,r,n,i){return e+t+r+n+i>>>0}function w(e,t,r,n){var i=e[t],o=n+e[t+1]>>>0,a=(o>>0,e[t+1]=o}function _(e,t,r,n){return(t+n>>>0>>0}function x(e,t,r,n){return t+n>>>0}function k(e,t,r,n,i,o,a,s){var c=0,l=t;return c+=(l=l+n>>>0)>>0)>>0)>>0}function S(e,t,r,n,i,o,a,s){return t+n+o+s>>>0}function T(e,t,r,n,i,o,a,s,c,l){var u=0,f=t;return u+=(f=f+n>>>0)>>0)>>0)>>0)>>0}function E(e,t,r,n,i,o,a,s,c,l){return t+n+o+s+l>>>0}function O(e,t,r){return(t<<32-r|e>>>r)>>>0}function C(e,t,r){return(e<<32-r|t>>>r)>>>0}function R(e,t,r){return e>>>r}function A(e,t,r){return(e<<32-r|t>>>r)>>>0}r.inherits=i,r.toArray=a,r.toHex=s,r.htonl=c,r.toHex32=l,r.zero2=u,r.zero8=f,r.join32=h,r.split32=d,r.rotr32=p,r.rotl32=m,r.sum32=b,r.sum32_3=y,r.sum32_4=v,r.sum32_5=g,r.sum64=w,r.sum64_hi=_,r.sum64_lo=x,r.sum64_4_hi=k,r.sum64_4_lo=S,r.sum64_5_hi=T,r.sum64_5_lo=E,r.rotr64_hi=O,r.rotr64_lo=C,r.shr64_hi=R,r.shr64_lo=A},{inherits:387,"minimalistic-assert":437}],384:[function(e,t,r){var n=e("hash.js"),i=e("minimalistic-crypto-utils"),o=e("minimalistic-assert");function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=i.toArray(e.entropy,e.entropyEnc||"hex"),r=i.toArray(e.nonce,e.nonceEnc||"hex"),n=i.toArray(e.pers,e.persEnc||"hex");o(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,n)}t.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(n=r,r=t,t=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var o=[];o.length>1,u=-7,f=r?i-1:0,h=r?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-u)-1,d>>=-u,u+=s;u>0;o=256*o+e[t+f],f+=h,u-=8);for(a=o&(1<<-u)-1,o>>=-u,u+=n;u>0;a=256*a+e[t+f],f+=h,u-=8);if(0===o)o=1-l;else{if(o===c)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),o-=l}return(d?-1:1)*a*Math.pow(2,o-n)},r.write=function(e,t,r,n,i,o){var a,s,c,l=8*o-i-1,u=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=u?(s=0,a=u):a+f>=1?(s=(t*c-1)*Math.pow(2,i),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[r+d]=255&s,d+=p,s/=256,i-=8);for(a=a<0;e[r+d]=255&a,d+=p,a/=256,l-=8);e[r+d-p]|=128*m}},{}],386:[function(e,t,r){(function(e){var r,n,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var o=0,a=new i(u),s=e.document.createTextNode("");a.observe(s,{characterData:!0}),r=function(){s.data=o=++o%2}}else if(e.setImmediate||void 0===e.MessageChannel)r="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var c=new e.MessageChannel;c.port1.onmessage=u,r=function(){c.port2.postMessage(0)}}var l=[];function u(){var e,t;n=!0;for(var r=l.length;r;){for(t=l,l=[],e=-1;++e + * @license MIT + */ +t.exports=function(e){return null!=e&&(n(e)||i(e)||!!e._isBuffer)}},{}],389:[function(e,t,r){var n={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},{}],390:[function(e,t,r){var n=e("./utils"),i=e("./support"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(e){for(var t,r,i,a,s,c,l,u=[],f=0,h=e.length,d=h,p="string"!==n.getTypeOf(e);f>2,s=(3&t)<<4|r>>4,c=d>1?(15&r)<<2|i>>6:64,l=d>2?63&i:64,u.push(o.charAt(a)+o.charAt(s)+o.charAt(c)+o.charAt(l));return u.join("")},r.decode=function(e){var t,r,n,a,s,c,l=0,u=0,f="data:";if(e.substr(0,f.length)===f)throw new Error("Invalid base64 input, it looks like a data url.");var h,d=3*(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length/4;if(e.charAt(e.length-1)===o.charAt(64)&&d--,e.charAt(e.length-2)===o.charAt(64)&&d--,d%1!=0)throw new Error("Invalid base64 input, bad content length.");for(h=i.uint8array?new Uint8Array(0|d):new Array(0|d);l>4,r=(15&a)<<4|(s=o.indexOf(e.charAt(l++)))>>2,n=(3&s)<<6|(c=o.indexOf(e.charAt(l++))),h[u++]=t,64!==s&&(h[u++]=r),64!==c&&(h[u++]=n);return h}},{"./support":419,"./utils":421}],391:[function(e,t,r){var n=e("./external"),i=e("./stream/DataWorker"),o=e("./stream/DataLengthProbe"),a=e("./stream/Crc32Probe");function s(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o=e("./stream/DataLengthProbe"),s.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new o("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},s.createWorkerFrom=function(e,t,r){return e.pipe(new a).pipe(new o("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new o("compressedSize")).withStreamInfo("compression",t)},t.exports=s},{"./external":395,"./stream/Crc32Probe":414,"./stream/DataLengthProbe":415,"./stream/DataWorker":416}],392:[function(e,t,r){var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(e){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":396,"./stream/GenericWorker":417}],393:[function(e,t,r){var n=e("./utils");function i(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}var o=i();function a(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s>>8^i[255&(e^t[s])];return-1^e}function s(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s>>8^i[255&(e^t.charCodeAt(s))];return-1^e}t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?a(0|t,e,e.length,0):s(0|t,e,e.length,0):0}},{"./utils":421}],394:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],395:[function(e,t,r){var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:425}],396:[function(e,t,r){var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),o=e("./utils"),a=e("./stream/GenericWorker"),s=n?"uint8array":"array";function c(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",o.inherits(c,a),c.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(s,e.data),!1)},c.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},c.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},c.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new c("Deflate",e)},r.uncompressWorker=function(){return new c("Inflate",{})}},{"./stream/GenericWorker":417,"./utils":421,pako:439}],397:[function(e,t,r){var n=e("../utils"),i=e("../stream/GenericWorker"),o=e("../utf8"),a=e("../crc32"),s=e("../signature"),c=function(e,t){var r,n="";for(r=0;r>>=8;return n},l=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16},u=function(e,t){return 63&(e||0)},f=function(e,t,r,i,f,h){var d,p,m=e.file,b=e.compression,y=h!==o.utf8encode,v=n.transformTo("string",h(m.name)),g=n.transformTo("string",o.utf8encode(m.name)),w=m.comment,_=n.transformTo("string",h(w)),x=n.transformTo("string",o.utf8encode(w)),k=g.length!==m.name.length,S=x.length!==w.length,T="",E="",O="",C=m.dir,R=m.date,A={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(A.crc32=e.crc32,A.compressedSize=e.compressedSize,A.uncompressedSize=e.uncompressedSize);var M=0;t&&(M|=8),y||!k&&!S||(M|=2048);var P=0,j=0;C&&(P|=16),"UNIX"===f?(j=798,P|=l(m.unixPermissions,C)):(j=20,P|=u(m.dosPermissions)),d=R.getUTCHours(),d<<=6,d|=R.getUTCMinutes(),d<<=5,d|=R.getUTCSeconds()/2,p=R.getUTCFullYear()-1980,p<<=4,p|=R.getUTCMonth()+1,p<<=5,p|=R.getUTCDate(),k&&(E=c(1,1)+c(a(v),4)+g,T+="up"+c(E.length,2)+E),S&&(O=c(1,1)+c(a(_),4)+x,T+="uc"+c(O.length,2)+O);var I="";return I+="\n\0",I+=c(M,2),I+=b.magic,I+=c(d,2),I+=c(p,2),I+=c(A.crc32,4),I+=c(A.compressedSize,4),I+=c(A.uncompressedSize,4),I+=c(v.length,2),I+=c(T.length,2),{fileRecord:s.LOCAL_FILE_HEADER+I+v+T,dirRecord:s.CENTRAL_FILE_HEADER+c(j,2)+I+c(_.length,2)+"\0\0\0\0"+c(P,4)+c(i,4)+v+T+_}},h=function(e,t,r,i,o){var a=n.transformTo("string",o(i));return s.CENTRAL_DIRECTORY_END+"\0\0\0\0"+c(e,2)+c(e,2)+c(t,4)+c(r,4)+c(a.length,2)+a},d=function(e){return s.DATA_DESCRIPTOR+c(e.crc32,4)+c(e.compressedSize,4)+c(e.uncompressedSize,4)};function p(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}n.inherits(p,i),p.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},p.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=f(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},p.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=f(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:d(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},p.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t0?e.substring(0,t):""},m=function(e){return"/"!==e.slice(-1)&&(e+="/"),e},b=function(e,t){return t=void 0!==t?t:s.createFolders,e=m(e),this.files[e]||d.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function y(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var v={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(e){var t,r,n;for(t in this.files)this.files.hasOwnProperty(t)&&(n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n))},filter:function(e){var t=[];return this.forEach((function(r,n){e(r,n)&&t.push(n)})),t},file:function(e,t,r){if(1===arguments.length){if(y(e)){var n=e;return this.filter((function(e,t){return!t.dir&&n.test(e)}))}var i=this.files[this.root+e];return i&&!i.dir?i:null}return e=this.root+e,d.call(this,e,t,r),this},folder:function(e){if(!e)return this;if(y(e))return this.filter((function(t,r){return r.dir&&e.test(t)}));var t=this.root+e,r=b.call(this,t),n=this.clone();return n.root=r.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||("/"!==e.slice(-1)&&(e+="/"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var r=this.filter((function(t,r){return r.name.slice(0,e.length)===e})),n=0;n=0;--o)if(this.data[o]===t&&this.data[o+1]===r&&this.data[o+2]===n&&this.data[o+3]===i)return o-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),o=this.readData(4);return t===o[0]&&r===o[1]&&n===o[2]&&i===o[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":421,"./DataReader":407}],407:[function(e,t,r){var n=e("../utils");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":421}],408:[function(e,t,r){var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":421,"./Uint8ArrayReader":410}],409:[function(e,t,r){var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":421,"./DataReader":407}],410:[function(e,t,r){var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":421,"./ArrayReader":406}],411:[function(e,t,r){var n=e("../utils"),i=e("../support"),o=e("./ArrayReader"),a=e("./StringReader"),s=e("./NodeBufferReader"),c=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new s(e):i.uint8array?new c(n.transformTo("uint8array",e)):new o(n.transformTo("array",e)):new a(e)}},{"../support":419,"../utils":421,"./ArrayReader":406,"./NodeBufferReader":408,"./StringReader":409,"./Uint8ArrayReader":410}],412:[function(e,t,r){r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],413:[function(e,t,r){var n=e("./GenericWorker"),i=e("../utils");function o(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(o,n),o.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=o},{"../utils":421,"./GenericWorker":417}],414:[function(e,t,r){var n=e("./GenericWorker"),i=e("../crc32");function o(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(o,n),o.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=o},{"../crc32":393,"../utils":421,"./GenericWorker":417}],415:[function(e,t,r){var n=e("../utils"),i=e("./GenericWorker");function o(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(o,i),o.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=o},{"../utils":421,"./GenericWorker":417}],416:[function(e,t,r){var n=e("../utils"),i=e("./GenericWorker"),o=16384;function a(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(a,i),a.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},a.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},a.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},a.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=o,t=null,r=Math.min(this.max,this.index+e);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,r);break;case"uint8array":t=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":t=this.data.slice(this.index,r)}return this.index=r,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=a},{"../utils":421,"./GenericWorker":417}],417:[function(e,t,r){function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],418:[function(e,t,r){(function(r){var n=e("../utils"),i=e("./ConvertWorker"),o=e("./GenericWorker"),a=e("../base64"),s=e("../support"),c=e("../external"),l=null;if(s.nodestream)try{l=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function u(e,t,r){switch(e){case"blob":return n.newBlob(n.transformTo("arraybuffer",t),r);case"base64":return a.encode(t);default:return n.transformTo(e,t)}}function f(e,t){var n,i=0,o=null,a=0;for(n=0;n=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;s[254]=s[254]=1;var l=function(e){var t,r,n,o,a,s=e.length,c=0;for(o=0;o>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t},u=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+s[e[r]]>t?r:t},f=function(e){var t,r,i,o,a=e.length,c=new Array(2*a);for(r=0,t=0;t4)c[r++]=65533,t+=o-1;else{for(i&=2===o?31:3===o?15:7;o>1&&t1?c[r++]=65533:i<65536?c[r++]=i:(i-=65536,c[r++]=55296|i>>10&1023,c[r++]=56320|1023&i)}return c.length!==r&&(c.subarray?c=c.subarray(0,r):c.length=r),n.applyFromCharCode(c)};function h(){a.call(this,"utf-8 decode"),this.leftOver=null}function d(){a.call(this,"utf-8 encode")}r.utf8encode=function(e){return i.nodebuffer?o.newBufferFrom(e,"utf-8"):l(e)},r.utf8decode=function(e){return i.nodebuffer?n.transformTo("nodebuffer",e).toString("utf-8"):(e=n.transformTo(i.uint8array?"uint8array":"array",e),f(e))},n.inherits(h,a),h.prototype.processChunk=function(e){var t=n.transformTo(i.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var o=t;(t=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),t.set(o,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=u(t),s=t;a!==t.length&&(i.uint8array?(s=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(s=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(s),meta:e.meta})},h.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=h,n.inherits(d,a),d.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=d},{"./nodejsUtils":403,"./stream/GenericWorker":417,"./support":419,"./utils":421}],421:[function(e,t,r){var n=e("./support"),i=e("./base64"),o=e("./nodejsUtils"),a=e("set-immediate-shim"),s=e("./external");function c(e){return u(e,n.uint8array?new Uint8Array(e.length):new Array(e.length))}function l(e){return e}function u(e,t){for(var r=0;r1;)try{return f.stringifyByChunk(e,n,t)}catch(e){t=Math.floor(t/2)}return f.stringifyByChar(e)}function d(e,t){for(var r=0;r1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e0)this.isSignature(t,o.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error("Corrupted zip: missing "+Math.abs(n)+" bytes.")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=c},{"./reader/readerFor":411,"./signature":412,"./support":419,"./utf8":420,"./utils":421,"./zipEntry":423}],423:[function(e,t,r){var n=e("./reader/readerFor"),i=e("./utils"),o=e("./compressedObject"),a=e("./crc32"),s=e("./utf8"),c=e("./compressions"),l=e("./support"),u=0,f=3,h=function(e){for(var t in c)if(c.hasOwnProperty(t)&&c[t].magic===e)return c[t];return null};function d(e,t){this.options=e,this.loadOptions=t}d.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(t=h(this.compressionMethod)))throw new Error("Corrupted zip : compression "+i.pretty(this.compressionMethod)+" unknown (inner file : "+i.transformTo("string",this.fileName)+")");this.decompressed=new o(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),e===u&&(this.dosPermissions=63&this.externalFileAttributes),e===f&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4-1}function Ke(e,t){var r=this.__data__,n=dt(r,e);return n<0?r.push([e,t]):r[n][1]=t,this}function Ze(e){var t=-1,r=e?e.length:0;for(this.clear();++tl))return!1;var f=o.get(e);if(f&&o.get(t))return f==t;var h=-1,d=!0,p=i&s?new nt:void 0;for(o.set(e,t),o.set(t,e);++h-1&&e%1==0&&e-1&&e%1==0&&e<=u}function lr(e){var t=n(e);return!!e&&("object"==t||"function"==t)}function ur(e){return!!e&&"object"==n(e)}function fr(e){return"symbol"==n(e)||ur(e)&&ve.call(e)==T}var hr=Q?ie(Q):Tt;function dr(e){return null==e?"":Mt(e)}function pr(e,t,r){var n=null==e?void 0:vt(e,t);return void 0===n?r:n}function mr(e,t){return null!=e&&Wt(e,t,wt)}function br(e){return or(e)?ht(e):Ot(e)}function yr(e){return e}function vr(e){return Vt(e)?re(Jt(e)):At(e)}t.exports=er}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],428:[function(e,t,r){function n(e){return n="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},n(e)}var i="[object Boolean]",o=Object.prototype.toString;function a(e){return!0===e||!1===e||s(e)&&o.call(e)==i}function s(e){return!!e&&"object"==n(e)}t.exports=a},{}],429:[function(e,t,r){(function(e){function n(e){return n="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},n(e)}var i=200,o="__lodash_hash_undefined__",a=1,s=2,c=9007199254740991,l="[object Arguments]",u="[object Array]",f="[object AsyncFunction]",h="[object Boolean]",d="[object Date]",p="[object Error]",m="[object Function]",b="[object GeneratorFunction]",y="[object Map]",v="[object Number]",g="[object Null]",w="[object Object]",_="[object Promise]",x="[object Proxy]",k="[object RegExp]",S="[object Set]",T="[object String]",E="[object Symbol]",O="[object Undefined]",C="[object WeakMap]",R="[object ArrayBuffer]",A="[object DataView]",M="[object Float64Array]",P="[object Int8Array]",j="[object Int16Array]",I="[object Int32Array]",D="[object Uint8Array]",N="[object Uint8ClampedArray]",F="[object Uint16Array]",L="[object Uint32Array]",B=/[\\^$.*+?()[\]{}|]/g,z=/^\[object .+?Constructor\]$/,U=/^(?:0|[1-9]\d*)$/,H={};H["[object Float32Array]"]=H[M]=H[P]=H[j]=H[I]=H[D]=H[N]=H[F]=H[L]=!0,H[l]=H[u]=H[R]=H[h]=H[A]=H[d]=H[p]=H[m]=H[y]=H[v]=H[w]=H[k]=H[S]=H[T]=H[C]=!1;var W="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e,$="object"==("undefined"==typeof self?"undefined":n(self))&&self&&self.Object===Object&&self,V=W||$||Function("return this")(),q="object"==(void 0===r?"undefined":n(r))&&r&&!r.nodeType&&r,X=q&&"object"==(void 0===t?"undefined":n(t))&&t&&!t.nodeType&&t,G=X&&X.exports===q,Y=G&&W.process,K=function(){try{return Y&&Y.binding&&Y.binding("util")}catch(e){}}(),Z=K&&K.isTypedArray;function J(e,t){for(var r=-1,n=null==e?0:e.length,i=0,o=[];++r-1}function Ze(e,t){var r=this.__data__,n=pt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}function Je(e){var t=-1,r=null==e?0:e.length;for(this.clear();++tl))return!1;var f=o.get(e);if(f&&o.get(t))return f==t;var h=-1,d=!0,p=r&s?new it:void 0;for(o.set(e,t),o.set(t,e);++h-1&&e%1==0&&e-1&&e%1==0&&e<=c}function qt(e){var t=n(e);return null!=e&&("object"==t||"function"==t)}function Xt(e){return null!=e&&"object"==n(e)}var Gt=Z?re(Z):_t;function Yt(e){return Ut(e)?dt(e):xt(e)}function Kt(){return[]}function Zt(){return!1}t.exports=Wt}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],430:[function(e,t,r){(function(e){function r(e){return r="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},r(e)}var n="[object AsyncFunction]",i="[object Function]",o="[object GeneratorFunction]",a="[object Null]",s="[object Proxy]",c="[object Undefined]",l="object"==(void 0===e?"undefined":r(e))&&e&&e.Object===Object&&e,u="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=l||u||Function("return this")(),h=Object.prototype,d=h.hasOwnProperty,p=h.toString,m=f.Symbol,b=m?m.toStringTag:void 0;function y(e){return null==e?void 0===e?c:a:b&&b in Object(e)?v(e):g(e)}function v(e){var t=d.call(e,b),r=e[b];try{e[b]=void 0;var n=!0}catch(e){}var i=p.call(e);return n&&(t?e[b]=r:delete e[b]),i}function g(e){return p.call(e)}function w(e){if(!_(e))return!1;var t=y(e);return t==i||t==o||t==n||t==s}function _(e){var t=r(e);return null!=e&&("object"==t||"function"==t)}t.exports=w}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],431:[function(e,t,r){function n(e){return null==e}t.exports=n},{}],432:[function(e,t,r){function n(e){return void 0===e}t.exports=n},{}],433:[function(e,t,r){(function(e){function r(e){return r="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},r(e)}var n=200,i="__lodash_hash_undefined__",o=1/0,a="[object Function]",s="[object GeneratorFunction]",c=/[\\^$.*+?()[\]{}|]/g,l=/^\[object .+?Constructor\]$/,u="object"==(void 0===e?"undefined":r(e))&&e&&e.Object===Object&&e,f="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,h=u||f||Function("return this")();function d(e,t){return!(!e||!e.length)&&b(e,t,0)>-1}function p(e,t,r){for(var n=-1,i=e?e.length:0;++n-1}function X(e,t){var r=this.__data__,n=ne(r,e);return n<0?r.push([e,t]):r[n][1]=t,this}function G(e){var t=-1,r=e?e.length:0;for(this.clear();++t=n){var u=t?null:ae(e);if(u)return _(u);s=!1,o=v,l=new ee}else l=t?[]:c;e:for(;++i>>32-t}function l(e,t,r,n,i,o,a){return c(e+(t&r|~t&n)+i+o|0,a)+t|0}function u(e,t,r,n,i,o,a){return c(e+(t&n|r&~n)+i+o|0,a)+t|0}function f(e,t,r,n,i,o,a){return c(e+(t^r^n)+i+o|0,a)+t|0}function h(e,t,r,n,i,o,a){return c(e+(r^(t|~n))+i+o|0,a)+t|0}n(s,i),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,i=this._c,o=this._d;r=l(r,n,i,o,e[0],3614090360,7),o=l(o,r,n,i,e[1],3905402710,12),i=l(i,o,r,n,e[2],606105819,17),n=l(n,i,o,r,e[3],3250441966,22),r=l(r,n,i,o,e[4],4118548399,7),o=l(o,r,n,i,e[5],1200080426,12),i=l(i,o,r,n,e[6],2821735955,17),n=l(n,i,o,r,e[7],4249261313,22),r=l(r,n,i,o,e[8],1770035416,7),o=l(o,r,n,i,e[9],2336552879,12),i=l(i,o,r,n,e[10],4294925233,17),n=l(n,i,o,r,e[11],2304563134,22),r=l(r,n,i,o,e[12],1804603682,7),o=l(o,r,n,i,e[13],4254626195,12),i=l(i,o,r,n,e[14],2792965006,17),r=u(r,n=l(n,i,o,r,e[15],1236535329,22),i,o,e[1],4129170786,5),o=u(o,r,n,i,e[6],3225465664,9),i=u(i,o,r,n,e[11],643717713,14),n=u(n,i,o,r,e[0],3921069994,20),r=u(r,n,i,o,e[5],3593408605,5),o=u(o,r,n,i,e[10],38016083,9),i=u(i,o,r,n,e[15],3634488961,14),n=u(n,i,o,r,e[4],3889429448,20),r=u(r,n,i,o,e[9],568446438,5),o=u(o,r,n,i,e[14],3275163606,9),i=u(i,o,r,n,e[3],4107603335,14),n=u(n,i,o,r,e[8],1163531501,20),r=u(r,n,i,o,e[13],2850285829,5),o=u(o,r,n,i,e[2],4243563512,9),i=u(i,o,r,n,e[7],1735328473,14),r=f(r,n=u(n,i,o,r,e[12],2368359562,20),i,o,e[5],4294588738,4),o=f(o,r,n,i,e[8],2272392833,11),i=f(i,o,r,n,e[11],1839030562,16),n=f(n,i,o,r,e[14],4259657740,23),r=f(r,n,i,o,e[1],2763975236,4),o=f(o,r,n,i,e[4],1272893353,11),i=f(i,o,r,n,e[7],4139469664,16),n=f(n,i,o,r,e[10],3200236656,23),r=f(r,n,i,o,e[13],681279174,4),o=f(o,r,n,i,e[0],3936430074,11),i=f(i,o,r,n,e[3],3572445317,16),n=f(n,i,o,r,e[6],76029189,23),r=f(r,n,i,o,e[9],3654602809,4),o=f(o,r,n,i,e[12],3873151461,11),i=f(i,o,r,n,e[15],530742520,16),r=h(r,n=f(n,i,o,r,e[2],3299628645,23),i,o,e[0],4096336452,6),o=h(o,r,n,i,e[7],1126891415,10),i=h(i,o,r,n,e[14],2878612391,15),n=h(n,i,o,r,e[5],4237533241,21),r=h(r,n,i,o,e[12],1700485571,6),o=h(o,r,n,i,e[3],2399980690,10),i=h(i,o,r,n,e[10],4293915773,15),n=h(n,i,o,r,e[1],2240044497,21),r=h(r,n,i,o,e[8],1873313359,6),o=h(o,r,n,i,e[15],4264355552,10),i=h(i,o,r,n,e[6],2734768916,15),n=h(n,i,o,r,e[13],1309151649,21),r=h(r,n,i,o,e[4],4149444226,6),o=h(o,r,n,i,e[11],3174756917,10),i=h(i,o,r,n,e[2],718787259,15),n=h(n,i,o,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},t.exports=s},{"hash-base":370,inherits:387,"safe-buffer":494}],435:[function(e,t,r){var n=e("bn.js"),i=e("brorand");function o(e){this.rand=e||new i.Rand}t.exports=o,o.create=function(e){return new o(e)},o.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var i=new n(this.rand.generate(r))}while(i.cmp(e)>=0);return i},o.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},o.prototype.test=function(e,t,r){var i=e.bitLength(),o=n.mont(e),a=new n(1).toRed(o);t||(t=Math.max(1,i/48|0));for(var s=e.subn(1),c=0;!s.testn(c);c++);for(var l=e.shrn(c),u=s.toRed(o),f=!0;t>0;t--){var h=this._randrange(new n(2),s);r&&r(h);var d=h.toRed(o).redPow(l);if(0!==d.cmp(a)&&0!==d.cmp(u)){for(var p=1;p0;t--){var u=this._randrange(new n(2),a),f=e.gcd(u);if(0!==f.cmpn(1))return f;var h=u.toRed(i).redPow(c);if(0!==h.cmp(o)&&0!==h.cmp(l)){for(var d=1;d>8,a=255&i;o?r.push(o,a):r.push(a)}return r}function o(e){return 1===e.length?"0"+e:e}function a(e){for(var t="",r=0;r0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==f)throw new Error(a[r]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var l;if(l="string"==typeof t.dictionary?o.string2buf(t.dictionary):"[object ArrayBuffer]"===c.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=n.deflateSetDictionary(this.strm,l))!==f)throw new Error(a[r]);this._dict_set=!0}}function v(e,t){var r=new y(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}function g(e,t){return(t=t||{}).raw=!0,v(e,t)}function w(e,t){return(t=t||{}).gzip=!0,v(e,t)}y.prototype.push=function(e,t){var r,a,s=this.strm,p=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?u:l,"string"==typeof e?s.input=o.string2buf(e):"[object ArrayBuffer]"===c.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new i.Buf8(p),s.next_out=0,s.avail_out=p),(r=n.deflate(s,a))!==h&&r!==f)return this.onEnd(r),this.ended=!0,!1;0!==s.avail_out&&(0!==s.avail_in||a!==u&&a!==d)||("string"===this.options.to?this.onData(o.buf2binstring(i.shrinkBuf(s.output,s.next_out))):this.onData(i.shrinkBuf(s.output,s.next_out)))}while((s.avail_in>0||0===s.avail_out)&&r!==h);return a===u?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===f):a!==d||(this.onEnd(f),s.avail_out=0,!0)},y.prototype.onData=function(e){this.chunks.push(e)},y.prototype.onEnd=function(e){e===f&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=y,r.deflate=v,r.deflateRaw=g,r.gzip=w},{"./utils/common":442,"./utils/strings":443,"./zlib/deflate":447,"./zlib/messages":452,"./zlib/zstream":454}],441:[function(e,t,r){var n=e("./zlib/inflate"),i=e("./utils/common"),o=e("./utils/strings"),a=e("./zlib/constants"),s=e("./zlib/messages"),c=e("./zlib/zstream"),l=e("./zlib/gzheader"),u=Object.prototype.toString;function f(e){if(!(this instanceof f))return new f(e);this.options=i.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new c,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,t.windowBits);if(r!==a.Z_OK)throw new Error(s[r]);if(this.header=new l,n.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=o.string2buf(t.dictionary):"[object ArrayBuffer]"===u.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=n.inflateSetDictionary(this.strm,t.dictionary))!==a.Z_OK))throw new Error(s[r])}function h(e,t){var r=new f(t);if(r.push(e,!0),r.err)throw r.msg||s[r.err];return r.result}function d(e,t){return(t=t||{}).raw=!0,h(e,t)}f.prototype.push=function(e,t){var r,s,c,l,f,h=this.strm,d=this.options.chunkSize,p=this.options.dictionary,m=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?a.Z_FINISH:a.Z_NO_FLUSH,"string"==typeof e?h.input=o.binstring2buf(e):"[object ArrayBuffer]"===u.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new i.Buf8(d),h.next_out=0,h.avail_out=d),(r=n.inflate(h,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&p&&(r=n.inflateSetDictionary(this.strm,p)),r===a.Z_BUF_ERROR&&!0===m&&(r=a.Z_OK,m=!1),r!==a.Z_STREAM_END&&r!==a.Z_OK)return this.onEnd(r),this.ended=!0,!1;h.next_out&&(0!==h.avail_out&&r!==a.Z_STREAM_END&&(0!==h.avail_in||s!==a.Z_FINISH&&s!==a.Z_SYNC_FLUSH)||("string"===this.options.to?(c=o.utf8border(h.output,h.next_out),l=h.next_out-c,f=o.buf2string(h.output,c),h.next_out=l,h.avail_out=d-l,l&&i.arraySet(h.output,h.output,c,l,0),this.onData(f)):this.onData(i.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(m=!0)}while((h.avail_in>0||0===h.avail_out)&&r!==a.Z_STREAM_END);return r===a.Z_STREAM_END&&(s=a.Z_FINISH),s===a.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===a.Z_OK):s!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),h.avail_out=0,!0)},f.prototype.onData=function(e){this.chunks.push(e)},f.prototype.onEnd=function(e){e===a.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=f,r.inflate=h,r.inflateRaw=d,r.ungzip=h},{"./utils/common":442,"./utils/strings":443,"./zlib/constants":445,"./zlib/gzheader":448,"./zlib/inflate":450,"./zlib/messages":452,"./zlib/zstream":454}],442:[function(e,t,r){function n(e){return n="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},n(e)}var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!==n(r))throw new TypeError(r+"must be non-object");for(var i in r)o(r,i)&&(e[i]=r[i])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var o=0;o=252?6:s>=248?5:s>=240?4:s>=224?3:s>=192?2:1;function c(e,t){if(t<65534&&(e.subarray&&o||!e.subarray&&i))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var r="",a=0;a>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t},r.buf2binstring=function(e){return c(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,i=t.length;r4)l[n++]=65533,r+=o-1;else{for(i&=2===o?31:3===o?15:7;o>1&&r1?l[n++]=65533:i<65536?l[n++]=i:(i-=65536,l[n++]=55296|i>>10&1023,l[n++]=56320|1023&i)}return c(l,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{"./common":442}],444:[function(e,t,r){function n(e,t,r,n){for(var i=65535&e|0,o=e>>>16&65535|0,a=0;0!==r;){r-=a=r>2e3?2e3:r;do{o=o+(i=i+t[n++]|0)|0}while(--a);i%=65521,o%=65521}return i|o<<16|0}t.exports=n},{}],445:[function(e,t,r){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],446:[function(e,t,r){function n(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}var i=n();function o(e,t,r,n){var o=i,a=n+r;e^=-1;for(var s=n;s>>8^o[255&(e^t[s])];return-1^e}t.exports=o},{}],447:[function(e,t,r){var n,i=e("../utils/common"),o=e("./trees"),a=e("./adler32"),s=e("./crc32"),c=e("./messages"),l=0,u=1,f=3,h=4,d=5,p=0,m=1,b=-2,y=-3,v=-5,g=-1,w=1,_=2,x=3,k=4,S=0,T=2,E=8,O=9,C=15,R=8,A=286,M=30,P=19,j=2*A+1,I=15,D=3,N=258,F=N+D+1,L=32,B=42,z=69,U=73,H=91,W=103,$=113,V=666,q=1,X=2,G=3,Y=4,K=3;function Z(e,t){return e.msg=c[t],t}function J(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){o._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t,r,n){var o=e.avail_in;return o>n&&(o=n),0===o?0:(e.avail_in-=o,i.arraySet(t,e.input,e.next_in,o,r),1===e.state.wrap?e.adler=a(e.adler,t,o,r):2===e.state.wrap&&(e.adler=s(e.adler,t,o,r)),e.next_in+=o,e.total_in+=o,o)}function oe(e,t){var r,n,i=e.max_chain_length,o=e.strstart,a=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-F?e.strstart-(e.w_size-F):0,l=e.window,u=e.w_mask,f=e.prev,h=e.strstart+N,d=l[o+a-1],p=l[o+a];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(l[(r=t)+a]===p&&l[r+a-1]===d&&l[r]===l[o]&&l[++r]===l[o+1]){o+=2,r++;do{}while(l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&oa){if(e.match_start=t,a=n,n>=s)break;d=l[o+a-1],p=l[o+a]}}}while((t=f[t&u])>c&&0!=--i);return a<=e.lookahead?a:e.lookahead}function ae(e){var t,r,n,o,a,s=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=s+(s-F)){i.arraySet(e.window,e.window,s,s,0),e.match_start-=s,e.strstart-=s,e.block_start-=s,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=s?n-s:0}while(--r);t=r=s;do{n=e.prev[--t],e.prev[t]=n>=s?n-s:0}while(--r);o+=s}if(0===e.strm.avail_in)break;if(r=ie(e.strm,e.window,e.strstart+e.lookahead,o),e.lookahead+=r,e.lookahead+e.insert>=D)for(a=e.strstart-e.insert,e.ins_h=e.window[a],e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===l)return q;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return q;if(e.strstart-e.block_start>=e.w_size-F&&(te(e,!1),0===e.strm.avail_out))return q}return e.insert=0,t===h?(te(e,!0),0===e.strm.avail_out?G:Y):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),q)}function ce(e,t){for(var r,n;;){if(e.lookahead=D&&(e.ins_h=(e.ins_h<=D)if(n=o._tr_tally(e,e.strstart-e.match_start,e.match_length-D),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=D){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=D&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=D-1)),e.prev_length>=D&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-D,n=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-D),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<=D&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){a=e.strstart+N;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=D?(r=o._tr_tally(e,1,e.match_length-D),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return q}return e.insert=0,t===h?(te(e,!0),0===e.strm.avail_out?G:Y):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?q:X}function fe(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===l)return q;break}if(e.match_length=0,r=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return q}return e.insert=0,t===h?(te(e,!0),0===e.strm.avail_out?G:Y):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?q:X}function he(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function de(e){e.window_size=2*e.w_size,Q(e.head),e.max_lazy_match=n[e.level].max_lazy,e.good_match=n[e.level].good_length,e.nice_match=n[e.level].nice_length,e.max_chain_length=n[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=D-1,e.match_available=0,e.ins_h=0}function pe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=E,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*j),this.dyn_dtree=new i.Buf16(2*(2*M+1)),this.bl_tree=new i.Buf16(2*(2*P+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(I+1),this.heap=new i.Buf16(2*A+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*A+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function me(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=T,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?B:$,e.adler=2===t.wrap?0:1,t.last_flush=l,o._tr_init(t),p):Z(e,b)}function be(e){var t=me(e);return t===p&&de(e.state),t}function ye(e,t){return e&&e.state?2!==e.state.wrap?b:(e.state.gzhead=t,p):b}function ve(e,t,r,n,o,a){if(!e)return b;var s=1;if(t===g&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),o<1||o>O||r!==E||n<8||n>15||t<0||t>9||a<0||a>k)return Z(e,b);8===n&&(n=9);var c=new pe;return e.state=c,c.strm=e,c.wrap=s,c.gzhead=null,c.w_bits=n,c.w_size=1<d||t<0)return e?Z(e,b):b;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===V&&t!==h)return Z(e,0===e.avail_out?v:b);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===B)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=_||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=_||i.level<2?4:0),re(i,K),i.status=$);else{var y=E+(i.w_bits-8<<4)<<8;y|=(i.strategy>=_||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(y|=L),y+=31-y%31,i.status=$,ne(i,y),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===z)if(i.gzhead.extra){for(a=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),ee(e),a=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=U)}else i.status=U;if(i.status===U)if(i.gzhead.name){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),ee(e),a=i.pending,i.pending===i.pending_buf_size)){c=1;break}c=i.gzindexa&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),0===c&&(i.gzindex=0,i.status=H)}else i.status=H;if(i.status===H)if(i.gzhead.comment){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),ee(e),a=i.pending,i.pending===i.pending_buf_size)){c=1;break}c=i.gzindexa&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),0===c&&(i.status=W)}else i.status=W;if(i.status===W&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=$)):i.status=$),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&J(t)<=J(r)&&t!==h)return Z(e,v);if(i.status===V&&0!==e.avail_in)return Z(e,v);if(0!==e.avail_in||0!==i.lookahead||t!==l&&i.status!==V){var g=i.strategy===_?fe(i,t):i.strategy===x?ue(i,t):n[i.level].func(i,t);if(g!==G&&g!==Y||(i.status=V),g===q||g===G)return 0===e.avail_out&&(i.last_flush=-1),p;if(g===X&&(t===u?o._tr_align(i):t!==d&&(o._tr_stored_block(i,0,0,!1),t===f&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==h?p:i.wrap<=0?m:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:m)}function _e(e){var t;return e&&e.state?(t=e.state.status)!==B&&t!==z&&t!==U&&t!==H&&t!==W&&t!==$&&t!==V?Z(e,b):(e.state=null,t===$?Z(e,y):p):b}function xe(e,t){var r,n,o,s,c,l,u,f,h=t.length;if(!e||!e.state)return b;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==B||r.lookahead)return b;for(1===s&&(e.adler=a(e.adler,t,h,0)),r.wrap=0,h>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),f=new i.Buf8(r.w_size),i.arraySet(f,t,h-r.w_size,r.w_size,0),t=f,h=r.w_size),c=e.avail_in,l=e.next_in,u=e.input,e.avail_in=h,e.next_in=0,e.input=t,ae(r);r.lookahead>=D;){n=r.strstart,o=r.lookahead-(D-1);do{r.ins_h=(r.ins_h<>>=x=_>>>24,b-=x,0==(x=_>>>16&255))C[s++]=65535&_;else{if(!(16&x)){if(0==(64&x)){_=y[(65535&_)+(m&(1<>>=x,b-=x),b<15&&(m+=O[o++]<>>=x=_>>>24,b-=x,!(16&(x=_>>>16&255))){if(0==(64&x)){_=v[(65535&_)+(m&(1<u){e.msg="invalid distance too far back",r.mode=n;break e}if(m>>>=x,b-=x,S>(x=s-c)){if((x=S-x)>h&&r.sane){e.msg="invalid distance too far back",r.mode=n;break e}if(T=0,E=p,0===d){if(T+=f-x,x2;)C[s++]=E[T++],C[s++]=E[T++],C[s++]=E[T++],k-=3;k&&(C[s++]=E[T++],k>1&&(C[s++]=E[T++]))}else{T=s-S;do{C[s++]=C[T++],C[s++]=C[T++],C[s++]=C[T++],k-=3}while(k>2);k&&(C[s++]=C[T++],k>1&&(C[s++]=C[T++]))}break}}break}}while(o>3,m&=(1<<(b-=k<<3))-1,e.next_in=o,e.next_out=s,e.avail_in=o>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ne(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=x,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(Q),t.distcode=t.distdyn=new n.Buf32(ee),t.sane=1,t.back=-1,p):y}function oe(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):y}function ae(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?y:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,oe(e))):y}function se(e,t){var r,n;return e?(n=new ne,e.state=n,n.window=null,(r=ae(e,t))!==p&&(e.state=null),r):y}function ce(e){return se(e,te)}var le,ue,fe=!0;function he(e){if(fe){var t;for(le=new n.Buf32(512),ue=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(l,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,ue,0,e.work,{bits:5}),fe=!1}e.lencode=le,e.lenbits=9,e.distcode=ue,e.distbits=5}function de(e,t,r,i){var o,a=e.state;return null===a.window&&(a.wsize=1<=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((o=a.wsize-a.wnext)>i&&(o=i),n.arraySet(a.window,t,r-i,o,a.wnext),(i-=o)?(n.arraySet(a.window,t,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=o,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=o(r.check,Ee,2,0),ae=0,se=0,r.mode=k;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&ae)<<8)+(ae>>8))%31){e.msg="incorrect header check",r.mode=Z;break}if((15&ae)!==_){e.msg="unknown compression method",r.mode=Z;break}if(se-=4,_e=8+(15&(ae>>>=4)),0===r.wbits)r.wbits=_e;else if(_e>r.wbits){e.msg="invalid window size",r.mode=Z;break}r.dmax=1<<_e,e.adler=r.check=1,r.mode=512&ae?M:j,ae=0,se=0;break;case k:for(;se<16;){if(0===ie)break e;ie--,ae+=Q[te++]<>8&1),512&r.flags&&(Ee[0]=255&ae,Ee[1]=ae>>>8&255,r.check=o(r.check,Ee,2,0)),ae=0,se=0,r.mode=S;case S:for(;se<32;){if(0===ie)break e;ie--,ae+=Q[te++]<>>8&255,Ee[2]=ae>>>16&255,Ee[3]=ae>>>24&255,r.check=o(r.check,Ee,4,0)),ae=0,se=0,r.mode=T;case T:for(;se<16;){if(0===ie)break e;ie--,ae+=Q[te++]<>8),512&r.flags&&(Ee[0]=255&ae,Ee[1]=ae>>>8&255,r.check=o(r.check,Ee,2,0)),ae=0,se=0,r.mode=E;case E:if(1024&r.flags){for(;se<16;){if(0===ie)break e;ie--,ae+=Q[te++]<>>8&255,r.check=o(r.check,Ee,2,0)),ae=0,se=0}else r.head&&(r.head.extra=null);r.mode=O;case O:if(1024&r.flags&&((ue=r.length)>ie&&(ue=ie),ue&&(r.head&&(_e=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,Q,te,ue,_e)),512&r.flags&&(r.check=o(r.check,Q,ue,te)),ie-=ue,te+=ue,r.length-=ue),r.length))break e;r.length=0,r.mode=C;case C:if(2048&r.flags){if(0===ie)break e;ue=0;do{_e=Q[te+ue++],r.head&&_e&&r.length<65536&&(r.head.name+=String.fromCharCode(_e))}while(_e&&ue>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=j;break;case M:for(;se<32;){if(0===ie)break e;ie--,ae+=Q[te++]<>>=7&se,se-=7&se,r.mode=G;break}for(;se<3;){if(0===ie)break e;ie--,ae+=Q[te++]<>>=1)){case 0:r.mode=D;break;case 1:if(he(r),r.mode=U,t===d){ae>>>=2,se-=2;break e}break;case 2:r.mode=L;break;case 3:e.msg="invalid block type",r.mode=Z}ae>>>=2,se-=2;break;case D:for(ae>>>=7&se,se-=7&se;se<32;){if(0===ie)break e;ie--,ae+=Q[te++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=Z;break}if(r.length=65535&ae,ae=0,se=0,r.mode=N,t===d)break e;case N:r.mode=F;case F:if(ue=r.length){if(ue>ie&&(ue=ie),ue>oe&&(ue=oe),0===ue)break e;n.arraySet(ee,Q,te,ue,ne),ie-=ue,te+=ue,oe-=ue,ne+=ue,r.length-=ue;break}r.mode=j;break;case L:for(;se<14;){if(0===ie)break e;ie--,ae+=Q[te++]<>>=5,se-=5,r.ndist=1+(31&ae),ae>>>=5,se-=5,r.ncode=4+(15&ae),ae>>>=4,se-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Z;break}r.have=0,r.mode=B;case B:for(;r.have>>=3,se-=3}for(;r.have<19;)r.lens[Oe[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,ke={bits:r.lenbits},xe=s(c,r.lens,0,19,r.lencode,0,r.work,ke),r.lenbits=ke.bits,xe){e.msg="invalid code lengths set",r.mode=Z;break}r.have=0,r.mode=z;case z:for(;r.have>>16&255,ye=65535&Te,!((me=Te>>>24)<=se);){if(0===ie)break e;ie--,ae+=Q[te++]<>>=me,se-=me,r.lens[r.have++]=ye;else{if(16===ye){for(Se=me+2;se>>=me,se-=me,0===r.have){e.msg="invalid bit length repeat",r.mode=Z;break}_e=r.lens[r.have-1],ue=3+(3&ae),ae>>>=2,se-=2}else if(17===ye){for(Se=me+3;se>>=me)),ae>>>=3,se-=3}else{for(Se=me+7;se>>=me)),ae>>>=7,se-=7}if(r.have+ue>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Z;break}for(;ue--;)r.lens[r.have++]=_e}}if(r.mode===Z)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Z;break}if(r.lenbits=9,ke={bits:r.lenbits},xe=s(l,r.lens,0,r.nlen,r.lencode,0,r.work,ke),r.lenbits=ke.bits,xe){e.msg="invalid literal/lengths set",r.mode=Z;break}if(r.distbits=6,r.distcode=r.distdyn,ke={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,ke),r.distbits=ke.bits,xe){e.msg="invalid distances set",r.mode=Z;break}if(r.mode=U,t===d)break e;case U:r.mode=H;case H:if(ie>=6&&oe>=258){e.next_out=ne,e.avail_out=oe,e.next_in=te,e.avail_in=ie,r.hold=ae,r.bits=se,a(e,le),ne=e.next_out,ee=e.output,oe=e.avail_out,te=e.next_in,Q=e.input,ie=e.avail_in,ae=r.hold,se=r.bits,r.mode===j&&(r.back=-1);break}for(r.back=0;be=(Te=r.lencode[ae&(1<>>16&255,ye=65535&Te,!((me=Te>>>24)<=se);){if(0===ie)break e;ie--,ae+=Q[te++]<>ve)])>>>16&255,ye=65535&Te,!(ve+(me=Te>>>24)<=se);){if(0===ie)break e;ie--,ae+=Q[te++]<>>=ve,se-=ve,r.back+=ve}if(ae>>>=me,se-=me,r.back+=me,r.length=ye,0===be){r.mode=X;break}if(32&be){r.back=-1,r.mode=j;break}if(64&be){e.msg="invalid literal/length code",r.mode=Z;break}r.extra=15&be,r.mode=W;case W:if(r.extra){for(Se=r.extra;se>>=r.extra,se-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=$;case $:for(;be=(Te=r.distcode[ae&(1<>>16&255,ye=65535&Te,!((me=Te>>>24)<=se);){if(0===ie)break e;ie--,ae+=Q[te++]<>ve)])>>>16&255,ye=65535&Te,!(ve+(me=Te>>>24)<=se);){if(0===ie)break e;ie--,ae+=Q[te++]<>>=ve,se-=ve,r.back+=ve}if(ae>>>=me,se-=me,r.back+=me,64&be){e.msg="invalid distance code",r.mode=Z;break}r.offset=ye,r.extra=15&be,r.mode=V;case V:if(r.extra){for(Se=r.extra;se>>=r.extra,se-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Z;break}r.mode=q;case q:if(0===oe)break e;if(ue=le-oe,r.offset>ue){if((ue=r.offset-ue)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Z;break}ue>r.wnext?(ue-=r.wnext,fe=r.wsize-ue):fe=r.wnext-ue,ue>r.length&&(ue=r.length),pe=r.window}else pe=ee,fe=ne-r.offset,ue=r.length;ue>oe&&(ue=oe),oe-=ue,r.length-=ue;do{ee[ne++]=pe[fe++]}while(--ue);0===r.length&&(r.mode=H);break;case X:if(0===oe)break e;ee[ne++]=r.length,oe--,r.mode=H;break;case G:if(r.wrap){for(;se<32;){if(0===ie)break e;ie--,ae|=Q[te++]<=1&&0===U[P];P--);if(j>P&&(j=P),0===P)return m[b++]=20971520,m[b++]=20971520,v.bits=1,0;for(M=1;M0&&(e===s||1!==P))return-1;for(H[1]=0,R=1;Ro||e===l&&F>a)return 1;for(;;){T=R-D,y[A]S?(E=W[$+y[A]],O=B[z+y[A]]):(E=96,O=0),g=1<>D)+(w-=g)]=T<<24|E<<16|O|0}while(0!==w);for(g=1<>=1;if(0!==g?(L&=g-1,L+=g):L=0,A++,0==--U[R]){if(R===P)break;R=t[r+y[A]]}if(R>j&&(L&x)!==_){for(0===D&&(D=j),k+=M,N=1<<(I=R-D);I+Do||e===l&&F>a)return 1;m[_=L&x]=j<<24|I<<16|k-b|0}}return 0!==L&&(m[k+L]=R-D<<24|64<<16|0),v.bits=j,0}},{"../utils/common":442}],452:[function(e,t,r){t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],453:[function(e,t,r){var n=e("../utils/common"),i=4,o=0,a=1,s=2;function c(e){for(var t=e.length;--t>=0;)e[t]=0}var l=0,u=1,f=2,h=3,d=258,p=29,m=256,b=m+1+p,y=30,v=19,g=2*b+1,w=15,_=16,x=7,k=256,S=16,T=17,E=18,O=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],C=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],R=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],M=512,P=new Array(2*(b+2));c(P);var j=new Array(2*y);c(j);var I=new Array(M);c(I);var D=new Array(d-h+1);c(D);var N=new Array(p);c(N);var F,L,B,z=new Array(y);function U(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function H(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function W(e){return e<256?I[e]:I[256+(e>>>7)]}function $(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function V(e,t,r){e.bi_valid>_-r?(e.bi_buf|=t<>_-e.bi_valid,e.bi_valid+=r-_):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function G(e){16===e.bi_valid?($(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}function Y(e,t){var r,n,i,o,a,s,c=t.dyn_tree,l=t.max_code,u=t.stat_desc.static_tree,f=t.stat_desc.has_stree,h=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(o=0;o<=w;o++)e.bl_count[o]=0;for(c[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;rp&&(o=p,m++),c[2*n+1]=o,n>l||(e.bl_count[o]++,a=0,n>=d&&(a=h[n-d]),s=c[2*n],e.opt_len+=s*(o+a),f&&(e.static_len+=s*(u[2*n+1]+a)));if(0!==m){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,m-=2}while(m>0);for(o=p;0!==o;o--)for(n=e.bl_count[o];0!==n;)(i=e.heap[--r])>l||(c[2*i+1]!==o&&(e.opt_len+=(o-c[2*i+1])*c[2*i],c[2*i+1]=o),n--)}}function K(e,t,r){var n,i,o=new Array(w+1),a=0;for(n=1;n<=w;n++)o[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=X(o[s]++,s))}}function Z(){var e,t,r,n,i,o=new Array(w+1);for(r=0,n=0;n>=7;n8?$(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function ee(e,t,r,i){Q(e),i&&($(e,r),$(e,~r)),n.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}function te(e,t,r,n){var i=2*t,o=2*r;return e[i]>1;r>=1;r--)re(e,o,r);i=c;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],re(e,o,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,o[2*i]=o[2*r]+o[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,o[2*r+1]=o[2*n+1]=i,e.heap[1]=i++,re(e,o,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],Y(e,t),K(o,l,e.bl_count)}function oe(e,t,r){var n,i,o=-1,a=t[1],s=0,c=7,l=4;for(0===a&&(c=138,l=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++s=3&&0===e.bl_tree[2*A[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}function ce(e,t,r,n){var i;for(V(e,t-257,5),V(e,r-1,5),V(e,n-4,4),i=0;i>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return a;for(t=32;t0?(e.strm.data_type===s&&(e.strm.data_type=le(e)),ie(e,e.l_desc),ie(e,e.d_desc),c=se(e),o=e.opt_len+3+7>>>3,(a=e.static_len+3+7>>>3)<=o&&(o=a)):o=a=r+5,r+4<=o&&-1!==t?he(e,t,r,n):e.strategy===i||a===o?(V(e,(u<<1)+(n?1:0),3),ne(e,P,j)):(V(e,(f<<1)+(n?1:0),3),ce(e,e.l_desc.max_code+1,e.d_desc.max_code+1,c+1),ne(e,e.dyn_ltree,e.dyn_dtree)),J(e),n&&Q(e)}function me(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(D[r]+m+1)]++,e.dyn_dtree[2*W(t)]++),e.last_lit===e.lit_bufsize-1}r._tr_init=fe,r._tr_stored_block=he,r._tr_flush_block=pe,r._tr_tally=me,r._tr_align=de},{"../utils/common":442}],454:[function(e,t,r){function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}t.exports=n},{}],455:[function(e,t,r){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},{}],456:[function(e,t,r){var n=e("asn1.js");r.certificate=e("./certificate");var i=n.define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())}));r.RSAPrivateKey=i;var o=n.define("RSAPublicKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())}));r.RSAPublicKey=o;var a=n.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(s),this.key("subjectPublicKey").bitstr())}));r.PublicKey=a;var s=n.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())})),c=n.define("PrivateKeyInfo",(function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(s),this.key("subjectPrivateKey").octstr())}));r.PrivateKey=c;var l=n.define("EncryptedPrivateKeyInfo",(function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())}));r.EncryptedPrivateKey=l;var u=n.define("DSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())}));r.DSAPrivateKey=u,r.DSAparam=n.define("DSAparam",(function(){this.int()}));var f=n.define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(h),this.key("publicKey").optional().explicit(1).bitstr())}));r.ECPrivateKey=f;var h=n.define("ECParameters",(function(){this.choice({namedCurve:this.objid()})}));r.signature=n.define("signature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())}))},{"./certificate":457,"asn1.js":167}],457:[function(e,t,r){var n=e("asn1.js"),i=n.define("Time",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),o=n.define("AttributeTypeValue",(function(){this.seq().obj(this.key("type").objid(),this.key("value").any())})),a=n.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional(),this.key("curve").objid().optional())})),s=n.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(a),this.key("subjectPublicKey").bitstr())})),c=n.define("RelativeDistinguishedName",(function(){this.setof(o)})),l=n.define("RDNSequence",(function(){this.seqof(c)})),u=n.define("Name",(function(){this.choice({rdnSequence:this.use(l)})})),f=n.define("Validity",(function(){this.seq().obj(this.key("notBefore").use(i),this.key("notAfter").use(i))})),h=n.define("Extension",(function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())})),d=n.define("TBSCertificate",(function(){this.seq().obj(this.key("version").explicit(0).int().optional(),this.key("serialNumber").int(),this.key("signature").use(a),this.key("issuer").use(u),this.key("validity").use(f),this.key("subject").use(u),this.key("subjectPublicKeyInfo").use(s),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(h).optional())})),p=n.define("X509Certificate",(function(){this.seq().obj(this.key("tbsCertificate").use(d),this.key("signatureAlgorithm").use(a),this.key("signatureValue").bitstr())}));t.exports=p},{"asn1.js":167}],458:[function(e,t,r){var n=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m,i=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,o=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m,a=e("evp_bytestokey"),s=e("browserify-aes"),c=e("safe-buffer").Buffer;t.exports=function(e,t){var r,l=e.toString(),u=l.match(n);if(u){var f="aes"+u[1],h=c.from(u[2],"hex"),d=c.from(u[3].replace(/[\r\n]/g,""),"base64"),p=a(t,h.slice(0,8),parseInt(u[1],10)).key,m=[],b=s.createDecipheriv(f,p,h);m.push(b.update(d)),m.push(b.final()),r=c.concat(m)}else{var y=l.match(o);r=c.from(y[2].replace(/[\r\n]/g,""),"base64")}return{tag:l.match(i)[1],data:r}}},{"browserify-aes":188,evp_bytestokey:368,"safe-buffer":494}],459:[function(e,t,r){function n(e){return n="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},n(e)}var i=e("./asn1"),o=e("./aesid.json"),a=e("./fixProc"),s=e("browserify-aes"),c=e("pbkdf2"),l=e("safe-buffer").Buffer;function u(e){var t;"object"!==n(e)||l.isBuffer(e)||(t=e.passphrase,e=e.key),"string"==typeof e&&(e=l.from(e));var r,o,s=a(e,t),c=s.tag,u=s.data;switch(c){case"CERTIFICATE":o=i.certificate.decode(u,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(o||(o=i.PublicKey.decode(u,"der")),r=o.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPublicKey.decode(o.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return o.subjectPrivateKey=o.subjectPublicKey,{type:"ec",data:o};case"1.2.840.10040.4.1":return o.algorithm.params.pub_key=i.DSAparam.decode(o.subjectPublicKey.data,"der"),{type:"dsa",data:o.algorithm.params};default:throw new Error("unknown key id "+r)}case"ENCRYPTED PRIVATE KEY":u=f(u=i.EncryptedPrivateKey.decode(u,"der"),t);case"PRIVATE KEY":switch(r=(o=i.PrivateKey.decode(u,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPrivateKey.decode(o.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:o.algorithm.curve,privateKey:i.ECPrivateKey.decode(o.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return o.algorithm.params.priv_key=i.DSAparam.decode(o.subjectPrivateKey,"der"),{type:"dsa",params:o.algorithm.params};default:throw new Error("unknown key id "+r)}case"RSA PUBLIC KEY":return i.RSAPublicKey.decode(u,"der");case"RSA PRIVATE KEY":return i.RSAPrivateKey.decode(u,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:i.DSAPrivateKey.decode(u,"der")};case"EC PRIVATE KEY":return{curve:(u=i.ECPrivateKey.decode(u,"der")).parameters.value,privateKey:u.privateKey};default:throw new Error("unknown key type "+c)}}function f(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,n=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),i=o[e.algorithm.decrypt.cipher.algo.join(".")],a=e.algorithm.decrypt.cipher.iv,u=e.subjectPrivateKey,f=parseInt(i.split("-")[1],10)/8,h=c.pbkdf2Sync(t,r,n,f,"sha1"),d=s.createDecipheriv(i,h,a),p=[];return p.push(d.update(u)),p.push(d.final()),l.concat(p)}t.exports=u,u.signature=i.signature},{"./aesid.json":455,"./asn1":456,"./fixProc":458,"browserify-aes":188,pbkdf2:460,"safe-buffer":494}],460:[function(e,t,r){r.pbkdf2=e("./lib/async"),r.pbkdf2Sync=e("./lib/sync")},{"./lib/async":461,"./lib/sync":464}],461:[function(e,t,r){(function(r,n){var i,o=e("safe-buffer").Buffer,a=e("./precondition"),s=e("./default-encoding"),c=e("./sync"),l=e("./to-buffer"),u=n.crypto&&n.crypto.subtle,f={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},h=[];function d(e){if(n.process&&!n.process.browser)return Promise.resolve(!1);if(!u||!u.importKey||!u.deriveBits)return Promise.resolve(!1);if(void 0!==h[e])return h[e];var t=p(i=i||o.alloc(8),i,10,128,e).then((function(){return!0})).catch((function(){return!1}));return h[e]=t,t}function p(e,t,r,n,i){return u.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then((function(e){return u.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:{name:i}},e,n<<3)})).then((function(e){return o.from(e)}))}function m(e,t){e.then((function(e){r.nextTick((function(){t(null,e)}))}),(function(e){r.nextTick((function(){t(e)}))}))}t.exports=function(e,t,i,o,u,h){"function"==typeof u&&(h=u,u=void 0);var b=f[(u=u||"sha1").toLowerCase()];if(!b||"function"!=typeof n.Promise)return r.nextTick((function(){var r;try{r=c(e,t,i,o,u)}catch(e){return h(e)}h(null,r)}));if(a(i,o),e=l(e,s,"Password"),t=l(t,s,"Salt"),"function"!=typeof h)throw new Error("No callback provided to pbkdf2");m(d(b).then((function(r){return r?p(e,t,i,o,b):c(e,t,i,o,u)})),h)}}).call(this,e("_process"),void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./default-encoding":462,"./precondition":463,"./sync":464,"./to-buffer":465,_process:467,"safe-buffer":494}],462:[function(e,t,r){(function(e){var r;r=e.browser?"utf-8":e.version?parseInt(e.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary":"utf-8",t.exports=r}).call(this,e("_process"))},{_process:467}],463:[function(e,t,r){var n=Math.pow(2,30)-1;t.exports=function(e,t){if("number"!=typeof e)throw new TypeError("Iterations not a number");if(e<0)throw new TypeError("Bad iterations");if("number"!=typeof t)throw new TypeError("Key length not a number");if(t<0||t>n||t!=t)throw new TypeError("Bad key length")}},{}],464:[function(e,t,r){var n=e("create-hash/md5"),i=e("ripemd160"),o=e("sha.js"),a=e("safe-buffer").Buffer,s=e("./precondition"),c=e("./default-encoding"),l=e("./to-buffer"),u=a.alloc(128),f={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function h(e,t,r){var n=d(e),i="sha512"===e||"sha384"===e?128:64;t.length>i?t=n(t):t.length1)for(var r=1;r=t.length){o++;break}var a=t.slice(2,i-1);if(("0002"!==n.toString("hex")&&!r||"0001"!==n.toString("hex")&&r)&&o++,a.length<8&&o++,o)throw new Error("decryption error");return t.slice(i)}function d(e,t){e=u.from(e),t=u.from(t);var r=0,n=e.length;e.length!==t.length&&(r++,n=Math.min(e.length,t.length));for(var i=-1;++id||new a(t).cmp(c.modulus)>=0)throw new Error("decryption error");o=r?l(new a(t),c):s(t,c);var p=u.alloc(d-o.length);if(o=u.concat([p,o],d),4===i)return f(c,o);if(1===i)return h(c,o,r);if(3===i)return o;throw new Error("unknown padding")}},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":206,"create-hash":331,"parse-asn1":459,"safe-buffer":494}],472:[function(e,t,r){var n=e("parse-asn1"),i=e("randombytes"),o=e("create-hash"),a=e("./mgf"),s=e("./xor"),c=e("bn.js"),l=e("./withPublic"),u=e("browserify-rsa"),f=e("safe-buffer").Buffer;function h(e,t){var r=e.modulus.byteLength(),n=t.length,l=o("sha1").update(f.alloc(0)).digest(),u=l.length,h=2*u;if(n>r-h-2)throw new Error("message too long");var d=f.alloc(r-n-h-2),p=r-u-1,m=i(u),b=s(f.concat([l,d,f.alloc(1,1),t],p),a(m,p)),y=s(m,a(b,u));return new c(f.concat([f.alloc(1),y,b],r))}function d(e,t,r){var n,i=t.length,o=e.modulus.byteLength();if(i>o-11)throw new Error("message too long");return n=r?f.alloc(o-i-3,255):p(o-i-3),new c(f.concat([f.from([0,r?1:2]),n,f.alloc(1),t],o))}function p(e){for(var t,r=f.allocUnsafe(e),n=0,o=i(2*e),a=0;n=0)throw new Error("data too long for modulus")}return r?u(o,a):l(o,a)}},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":206,"create-hash":331,"parse-asn1":459,randombytes:475,"safe-buffer":494}],473:[function(e,t,r){var n=e("bn.js"),i=e("safe-buffer").Buffer;function o(e,t){return i.from(e.toRed(n.mont(t.modulus)).redPow(new n(t.publicExponent)).fromRed().toArray())}t.exports=o},{"bn.js":470,"safe-buffer":494}],474:[function(e,t,r){t.exports=function(e,t){for(var r=e.length,n=-1;++no)throw new RangeError("requested too many random bytes");var n=s.allocUnsafe(e);if(e>0)if(e>i)for(var a=0;au||e<0)throw new TypeError("offset must be a uint32");if(e>c||e>t)throw new RangeError("offset out of range")}function h(e,t,r){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>u||e<0)throw new TypeError("size must be a uint32");if(e+t>r||e>c)throw new RangeError("buffer too small")}function d(e,t,r,i){if(!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof t)i=t,t=0,r=e.length;else if("function"==typeof r)i=r,r=e.length-t;else if("function"!=typeof i)throw new TypeError('"cb" argument must be a function');return f(t,e.length),h(r,t,e.length),p(e,t,r,i)}function p(e,r,n,i){if(t.browser){var o=e.buffer,s=new Uint8Array(o,r,n);return l.getRandomValues(s),i?void t.nextTick((function(){i(null,e)})):e}if(!i)return a(n).copy(e,r),e;a(n,(function(t,n){if(t)return i(t);n.copy(e,r),i(null,e)}))}function m(e,t,r){if(void 0===t&&(t=0),!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return f(t,e.length),void 0===r&&(r=e.length-t),h(r,t,e.length),p(e,t,r)}l&&l.getRandomValues||!t.browser?(r.randomFill=d,r.randomFillSync=m):(r.randomFill=i,r.randomFillSync=i)}).call(this,e("_process"),void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(e,t,r){function n(e){return n="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},n(e)}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var o={};function a(e,t,r){function n(e,r,n){return"string"==typeof t?t:t(e,r,n)}r||(r=Error);var a=function(e){function t(t,r,i){return e.call(this,n(t,r,i))||this}return i(t,e),t}(r);a.prototype.name=r.name,a.prototype.code=e,o[e]=a}function s(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}function c(e,t,r){return e.substr(!r||r<0?0:+r,t.length)===t}function l(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}function u(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}a("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),a("ERR_INVALID_ARG_TYPE",(function(e,t,r){var i,o;if("string"==typeof t&&c(t,"not ")?(i="must not be",t=t.replace(/^not /,"")):i="must be",l(e," argument"))o="The ".concat(e," ").concat(i," ").concat(s(t,"type"));else{var a=u(e,".")?"property":"argument";o='The "'.concat(e,'" ').concat(a," ").concat(i," ").concat(s(t,"type"))}return o+=". Received type ".concat(n(r))}),TypeError),a("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),a("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),a("ERR_STREAM_PREMATURE_CLOSE","Premature close"),a("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),a("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),a("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),a("ERR_STREAM_WRITE_AFTER_END","write after end"),a("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),a("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),a("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=o},{}],478:[function(e,t,r){(function(r){var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=l;var i=e("./_stream_readable"),o=e("./_stream_writable");e("inherits")(l,i);for(var a=n(o.prototype),s=0;s0)if("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===s.prototype||(t=l(t)),n)a.endEmitted?S(e,new k):A(e,a,t,!0);else if(a.ended)S(e,new _);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?A(e,a,t,!1):L(e,a)):A(e,a,t,!1)}else n||(a.reading=!1,L(e,a));return!a.ended&&(a.length=P?e=P:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function I(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=j(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function D(e,t){if(f("onEofChunk"),!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,t.sync?N(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,F(e)))}}function N(e){var t=e._readableState;f("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(f("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(F,e))}function F(e){var t=e._readableState;f("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,V(e)}function L(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(B,e,t))}function B(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function H(e){f("readable nexttick read 0"),e.read(0)}function W(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick($,e,t))}function $(e,t){f("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),V(e),t.flowing&&!t.reading&&e.read(0)}function V(e){var t=e._readableState;for(f("flow",t.flowing);t.flowing&&null!==e.read(););}function q(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function X(e){var t=e._readableState;f("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(G,t,e))}function G(e,t){if(f("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function Y(e,t){for(var r=0,n=e.length;r=t.highWaterMark:t.length>0)||t.ended))return f("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?X(this):N(this),null;if(0===(e=I(e,t))&&t.ended)return 0===t.length&&X(this),null;var n,i=t.needReadable;return f("need readable",i),(0===t.length||t.length-e0?q(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&X(this)),null!==n&&this.emit("data",n),n},C.prototype._read=function(e){S(this,new x("_read()"))},C.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,f("pipe count=%d opts=%j",i.pipesCount,t);var a=t&&!1===t.end||e===r.stdout||e===r.stderr?y:c;function s(e,t){f("onunpipe"),e===n&&t&&!1===t.hasUnpiped&&(t.hasUnpiped=!0,h())}function c(){f("onend"),e.end()}i.endEmitted?r.nextTick(a):n.once("end",a),e.on("unpipe",s);var l=z(n);e.on("drain",l);var u=!1;function h(){f("cleanup"),e.removeListener("close",m),e.removeListener("finish",b),e.removeListener("drain",l),e.removeListener("error",p),e.removeListener("unpipe",s),n.removeListener("end",c),n.removeListener("end",y),n.removeListener("data",d),u=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||l()}function d(t){f("ondata");var r=e.write(t);f("dest.write",r),!1===r&&((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==Y(i.pipes,e))&&!u&&(f("false write response, pause",i.awaitDrain),i.awaitDrain++),n.pause())}function p(t){f("onerror",t),y(),e.removeListener("error",p),0===o(e,"error")&&S(e,t)}function m(){e.removeListener("finish",b),y()}function b(){f("onfinish"),e.removeListener("close",m),y()}function y(){f("unpipe"),n.unpipe(e)}return n.on("data",d),E(e,"error",p),e.once("close",m),e.once("finish",b),e.emit("pipe",n),i.flowing||(f("pipe resume"),n.resume()),e},C.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==i.flowing&&this.resume()):"readable"===e&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,f("on readable",i.length,i.reading),i.length?N(this):i.reading||r.nextTick(H,this))),n},C.prototype.addListener=C.prototype.on,C.prototype.removeListener=function(e,t){var n=a.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(U,this),n},C.prototype.removeAllListeners=function(e){var t=a.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||r.nextTick(U,this),t},C.prototype.resume=function(){var e=this._readableState;return e.flowing||(f("resume"),e.flowing=!e.readableListening,W(this,e)),e.paused=!1,this},C.prototype.pause=function(){return f("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(f("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},C.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var i in e.on("end",(function(){if(f("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(i){f("wrapped data"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i||(r.objectMode||i&&i.length)&&(t.push(i)||(n=!0,e.pause()))})),e)void 0===this[i]&&"function"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var o=0;o-1))throw new k(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(O.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(O.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),O.prototype._write=function(e,t,r){r(new y("_write()"))},O.prototype._writev=null,O.prototype.end=function(e,t,r){var n=this._writableState;return"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||W(this,n,r),this},Object.defineProperty(O.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(O.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),O.prototype.destroy=d.destroy,O.prototype._undestroy=d.undestroy,O.prototype._destroy=function(e,t){t(e)}}).call(this,e("_process"),void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../errors":477,"./_stream_duplex":478,"./internal/streams/destroy":485,"./internal/streams/state":489,"./internal/streams/stream":490,_process:467,buffer:216,inherits:387,"util-deprecate":522}],483:[function(e,t,r){(function(r){var n;function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=e("./end-of-stream"),a=Symbol("lastResolve"),s=Symbol("lastReject"),c=Symbol("error"),l=Symbol("ended"),u=Symbol("lastPromise"),f=Symbol("handlePromise"),h=Symbol("stream");function d(e,t){return{value:e,done:t}}function p(e){var t=e[a];if(null!==t){var r=e[h].read();null!==r&&(e[u]=null,e[a]=null,e[s]=null,t(d(r,!1)))}}function m(e){r.nextTick(p,e)}function b(e,t){return function(r,n){e.then((function(){t[l]?r(d(void 0,!0)):t[f](r,n)}),n)}}var y=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((i(n={get stream(){return this[h]},next:function(){var e=this,t=this[c];if(null!==t)return Promise.reject(t);if(this[l])return Promise.resolve(d(void 0,!0));if(this[h].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[c]?n(e[c]):t(d(void 0,!0))}))}));var n,i=this[u];if(i)n=new Promise(b(i,this));else{var o=this[h].read();if(null!==o)return Promise.resolve(d(o,!1));n=new Promise(this[f])}return this[u]=n,n}},Symbol.asyncIterator,(function(){return this})),i(n,"return",(function(){var e=this;return new Promise((function(t,r){e[h].destroy(null,(function(e){e?r(e):t(d(void 0,!0))}))}))})),n),y),g=function(e){var t,r=Object.create(v,(i(t={},h,{value:e,writable:!0}),i(t,a,{value:null,writable:!0}),i(t,s,{value:null,writable:!0}),i(t,c,{value:null,writable:!0}),i(t,l,{value:e._readableState.endEmitted,writable:!0}),i(t,f,{value:function(e,t){var n=r[h].read();n?(r[u]=null,r[a]=null,r[s]=null,e(d(n,!1))):(r[a]=e,r[s]=t)},writable:!0}),t));return r[u]=null,o(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[s];return null!==t&&(r[u]=null,r[a]=null,r[s]=null,t(e)),void(r[c]=e)}var n=r[a];null!==n&&(r[u]=null,r[a]=null,r[s]=null,n(d(void 0,!0))),r[l]=!0})),e.on("readable",m.bind(null,r)),r};t.exports=g}).call(this,e("_process"))},{"./end-of-stream":486,_process:467}],484:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r}},{key:"concat",value:function(e){if(0===this.length)return l.alloc(0);for(var t=l.allocUnsafe(e>>>0),r=this.head,n=0;r;)h(r.data,t,n),n+=r.data.length,r=r.next;return t}},{key:"consume",value:function(e,t){var r;return ei.length?i.length:e;if(o===i.length?n+=i:n+=i.slice(0,e),0==(e-=o)){o===i.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=i.slice(o));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function(e){var t=l.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var i=r.data,o=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,o),0==(e-=o)){o===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(o));break}++n}return this.length-=n,t}},{key:f,value:function(e,t){return u(this,i({},t,{depth:0,customInspect:!1}))}}]),e}()},{buffer:216,util:185}],485:[function(e,t,r){(function(e){function r(t,r){var o=this,s=this._readableState&&this._readableState.destroyed,c=this._writableState&&this._writableState.destroyed;return s||c?(r?r(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(a,this,t)):e.nextTick(a,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!r&&t?o._writableState?o._writableState.errorEmitted?e.nextTick(i,o):(o._writableState.errorEmitted=!0,e.nextTick(n,o,t)):e.nextTick(n,o,t):r?(e.nextTick(i,o),r(t)):e.nextTick(i,o)})),this)}function n(e,t){a(e,t),i(e)}function i(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function o(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function a(e,t){e.emit("error",t)}function s(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit("error",t)}t.exports={destroy:r,undestroy:o,errorOrDestroy:s}}).call(this,e("_process"))},{_process:467}],486:[function(e,t,r){var n=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function i(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),i=0;i0,(function(e){n||(n=e),e&&o.forEach(f),a||(o.forEach(f),i(n))}))}));return t.reduce(h)}t.exports=p},{"../../../errors":477,"./end-of-stream":486}],489:[function(e,t,r){var n=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;function i(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}function o(e,t,r,o){var a=i(t,o,r);if(null!=a){if(!isFinite(a)||Math.floor(a)!==a||a<0)throw new n(o?r:"highWaterMark",a);return Math.floor(a)}return e.objectMode?16:16384}t.exports={getHighWaterMark:o}},{"../../../errors":477}],490:[function(e,t,r){t.exports=e("events").EventEmitter},{events:367}],491:[function(e,t,r){(r=t.exports=e("./lib/_stream_readable.js")).Stream=r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js"),r.finished=e("./lib/internal/streams/end-of-stream.js"),r.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(e,t,r){function n(e){return n="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},n(e)}var i=function(e){var t,r=Object.prototype,i=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var i=t&&t.prototype instanceof y?t:y,o=Object.create(i.prototype),a=new A(n||[]);return o._invoke=E(e,r,a),o}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var h="suspendedStart",d="suspendedYield",p="executing",m="completed",b={};function y(){}function v(){}function g(){}var w={};w[a]=function(){return this};var _=Object.getPrototypeOf,x=_&&_(_(M([])));x&&x!==r&&i.call(x,a)&&(w=x);var k=g.prototype=y.prototype=Object.create(w);function S(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function T(e,t){function r(o,a,s,c){var l=f(e[o],e,a);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"===n(h)&&i.call(h,"__await")?t.resolve(h.__await).then((function(e){r("next",e,s,c)}),(function(e){r("throw",e,s,c)})):t.resolve(h).then((function(e){u.value=e,s(u)}),(function(e){return r("throw",e,s,c)}))}c(l.arg)}var o;function a(e,n){function i(){return new t((function(t,i){r(e,n,t,i)}))}return o=o?o.then(i,i):i()}this._invoke=a}function E(e,t,r){var n=h;return function(i,o){if(n===p)throw new Error("Generator is already running");if(n===m){if("throw"===i)throw o;return P()}for(r.method=i,r.arg=o;;){var a=r.delegate;if(a){var s=O(a,r);if(s){if(s===b)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var c=f(e,t,r);if("normal"===c.type){if(n=r.done?m:d,c.arg===b)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=m,r.method="throw",r.arg=c.arg)}}}function O(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,"throw"===r.method){if(e.iterator.return&&(r.method="return",r.arg=t,O(e,r),"throw"===r.method))return b;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return b}var i=f(n,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,b;var o=i.arg;return o?o.done?(r[e.resultName]=o.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,b):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,b)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function M(e){if(e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function r(){for(;++n=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=i.call(a,"catchLoc"),l=i.call(a,"finallyLoc");if(c&&l){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),b}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;R(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:M(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),b}},e}("object"===(void 0===t?"undefined":n(t))?t.exports:{});try{regeneratorRuntime=i}catch(e){Function("r","regeneratorRuntime = r")(i)}},{}],493:[function(e,t,r){var n=e("buffer").Buffer,i=e("inherits"),o=e("hash-base"),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],c=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],l=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],u=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],f=[0,1518500249,1859775393,2400959708,2840853838],h=[1352829926,1548603684,1836072691,2053994217,0];function d(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function m(e,t,r,n,i,o,a,s){return p(e+(t^r^n)+o+a|0,s)+i|0}function b(e,t,r,n,i,o,a,s){return p(e+(t&r|~t&n)+o+a|0,s)+i|0}function y(e,t,r,n,i,o,a,s){return p(e+((t|~r)^n)+o+a|0,s)+i|0}function v(e,t,r,n,i,o,a,s){return p(e+(t&n|r&~n)+o+a|0,s)+i|0}function g(e,t,r,n,i,o,a,s){return p(e+(t^(r|~n))+o+a|0,s)+i|0}i(d,o),d.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,d=0|this._e,w=0|this._a,_=0|this._b,x=0|this._c,k=0|this._d,S=0|this._e,T=0;T<80;T+=1){var E,O;T<16?(E=m(r,n,i,o,d,e[s[T]],f[0],l[T]),O=g(w,_,x,k,S,e[c[T]],h[0],u[T])):T<32?(E=b(r,n,i,o,d,e[s[T]],f[1],l[T]),O=v(w,_,x,k,S,e[c[T]],h[1],u[T])):T<48?(E=y(r,n,i,o,d,e[s[T]],f[2],l[T]),O=y(w,_,x,k,S,e[c[T]],h[2],u[T])):T<64?(E=v(r,n,i,o,d,e[s[T]],f[3],l[T]),O=b(w,_,x,k,S,e[c[T]],h[3],u[T])):(E=g(r,n,i,o,d,e[s[T]],f[4],l[T]),O=m(w,_,x,k,S,e[c[T]],h[4],u[T])),r=d,d=o,o=p(i,10),i=n,n=E,w=S,S=k,k=p(x,10),x=_,_=O}var C=this._b+i+k|0;this._b=this._c+o+S|0,this._c=this._d+d+w|0,this._d=this._e+r+_|0,this._e=this._a+n+x|0,this._a=C},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},t.exports=d},{buffer:216,"hash-base":370,inherits:387}],494:[function(e,t,r){var n=e("buffer"),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,r),r.Buffer=a),o(i,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},{buffer:216}],495:[function(e,t,r){(function(r){function n(e){return n="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},n(e)}var i,o=e("buffer"),a=o.Buffer,s={};for(i in o)o.hasOwnProperty(i)&&"SlowBuffer"!==i&&"Buffer"!==i&&(s[i]=o[i]);var c=s.Buffer={};for(i in a)a.hasOwnProperty(i)&&"allocUnsafe"!==i&&"allocUnsafeSlow"!==i&&(c[i]=a[i]);if(s.Buffer.prototype=a.prototype,c.from&&c.from!==Uint8Array.from||(c.from=function(e,t,r){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+n(e));if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+n(e));return a(e,t,r)}),c.alloc||(c.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+n(e));if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=a(e);return t&&0!==t.length?"string"==typeof r?i.fill(t,r):i.fill(t):i.fill(0),i}),!s.kStringMaxLength)try{s.kStringMaxLength=r.binding("buffer").kStringMaxLength}catch(e){}s.constants||(s.constants={MAX_LENGTH:s.kMaxLength},s.kStringMaxLength&&(s.constants.MAX_STRING_LENGTH=s.kStringMaxLength)),t.exports=s}).call(this,e("_process"))},{_process:467,buffer:216}],496:[function(e,t,r){function n(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=u(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw o}}}}function i(e){return i="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},i(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r",lt:"<",quot:'"',apos:"'"},M=-1,P=-2,j=0,I=1,D=2,N=3,F=4,L=5,B=6,z=7,U=8,H=9,W=10,$=11,V=12,q=13,X=14,G=15,Y=16,K=17,Z=18,J=19,Q=20,ee=21,te=22,re=23,ne=24,ie=25,oe=26,ae=27,se=28,ce=29,le=30,ue=31,fe=32,he=33,de=34,pe=35,me=36,be=37,ye=38,ve=39,ge=40,we=41,_e=42,xe=43,ke=44,Se=9,Te=10,Ee=13,Oe=32,Ce=33,Re=34,Ae=38,Me=39,Pe=45,je=47,Ie=59,De=60,Ne=61,Fe=62,Le=63,Be=91,ze=93,Ue=133,He=8232,We=function(e){return e===Re||e===Me},$e=[Re,Me],Ve=[].concat($e,[Be,Fe]),qe=[].concat($e,[De,ze]),Xe=[Ne,Le].concat(c(_)),Ge=[].concat(c(_),[Fe,Ae,De]);function Ye(e,t,r){switch(t){case"xml":r!==O&&e.fail("xml prefix must be bound to ".concat(O,"."));break;case"xmlns":r!==C&&e.fail("xmlns prefix must be bound to ".concat(C,"."))}switch(r){case C:e.fail(""===t?"the default namespace may not be set to ".concat(r,"."):'may not assign a prefix (even "xmlns") to the URI '.concat(C,"."));break;case O:switch(t){case"xml":break;case"":e.fail("the default namespace may not be set to ".concat(r,"."));break;default:e.fail("may not assign the xml namespace to another prefix.")}}}function Ke(e,t){for(var r=0,n=Object.keys(t);r0&&(r+=":"),r+="".concat(this.line,":").concat(this.column)),r.length>0&&(r+=": "),new Error(r+e)}},{key:"fail",value:function(e){var t=this.makeError(e),r=this.errorHandler;if(void 0===r)throw t;return r(t),this}},{key:"write",value:function(e){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");var t=!1;null===e?(t=!0,e=""):"object"===i(e)&&(e=e.toString()),void 0!==this.carriedFromPrevious&&(e="".concat(this.carriedFromPrevious).concat(e),this.carriedFromPrevious=void 0);var r=e.length,n=e.charCodeAt(r-1);!t&&(n===Ee||n>=55296&&n<=56319)&&(this.carriedFromPrevious=e[r-1],r--,e=e.slice(0,r));var o=this.stateTable;for(this.chunk=e,this.i=0;this.i=e.length)return M;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>=Oe||r===Se)return r;switch(r){case Te:return this.line++,this.column=0,this.positionAtNewLine=this.position,Te;case Ee:return e.charCodeAt(t+1)===Te&&(this.i=t+2),this.line++,this.column=0,this.positionAtNewLine=this.position,P;default:return this.fail("disallowed character."),r}}if(r>56319)return r>=57344&&r<=65533||this.fail("disallowed character."),r;var n=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,n>1114111&&this.fail("disallowed character."),n}},{key:"getCode11",value:function(){var e=this.chunk,t=this.i;if(this.prevI=t,this.i=t+1,t>=e.length)return M;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>31&&r<127||r>159&&r!==He||r===Se)return r;switch(r){case Te:return this.line++,this.column=0,this.positionAtNewLine=this.position,Te;case Ee:var n=e.charCodeAt(t+1);n!==Te&&n!==Ue||(this.i=t+2);case Ue:case He:return this.line++,this.column=0,this.positionAtNewLine=this.position,P;default:return this.fail("disallowed character."),r}}if(r>56319)return r>=57344&&r<=65533||this.fail("disallowed character."),r;var i=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,i>1114111&&this.fail("disallowed character."),i}},{key:"getCodeNorm",value:function(){var e=this.getCode();return e===P?Te:e}},{key:"unget",value:function(){this.i=this.prevI,this.column--}},{key:"captureTo",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode(),i=n===P,o=i?Te:n;if(o===M||e.includes(o))return this.text+=r.slice(t,this.prevI),o;i&&(this.text+="".concat(r.slice(t,this.prevI),"\n"),t=this.i)}}},{key:"captureToChar",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode();switch(n){case P:this.text+="".concat(r.slice(t,this.prevI),"\n"),t=this.i,n=Te;break;case M:return this.text+=r.slice(t),!1}if(n===e)return this.text+=r.slice(t,this.prevI),!0}}},{key:"captureNameChars",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCode();if(r===M)return this.name+=e.slice(t),M;if(!w(r))return this.name+=e.slice(t,this.prevI),r===P?Te:r}}},{key:"skipSpaces",value:function(){for(;;){var e=this.getCodeNorm();if(e===M||!y(e))return e}}},{key:"setXMLVersion",value:function(e){this.currentXMLVersion=e,"1.0"===e?(this.isChar=v,this.getCode=this.getCode10):(this.isChar=k,this.getCode=this.getCode11)}},{key:"sBegin",value:function(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=I}},{key:"sBeginWhitespace",value:function(){var e=this.i,t=this.skipSpaces();switch(this.prevI!==e&&(this.xmlDeclPossible=!1),t){case De:if(this.state=G,0!==this.text.length)throw new Error("no-empty text at start");break;case M:break;default:this.unget(),this.state=q,this.xmlDeclPossible=!1}}},{key:"sDoctype",value:function(){var e,t=this.captureTo(Ve);switch(t){case Fe:null===(e=this.doctypeHandler)||void 0===e||e.call(this,this.text),this.text="",this.state=q,this.doctype=!0;break;case M:break;default:this.text+=String.fromCodePoint(t),t===Be?this.state=F:We(t)&&(this.state=N,this.q=t)}}},{key:"sDoctypeQuote",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.q=null,this.state=D)}},{key:"sDTD",value:function(){var e=this.captureTo(qe);e!==M&&(this.text+=String.fromCodePoint(e),e===ze?this.state=D:e===De?this.state=B:We(e)&&(this.state=L,this.q=e))}},{key:"sDTDQuoted",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.state=F,this.q=null)}},{key:"sDTDOpenWaka",value:function(){var e=this.getCodeNorm();switch(this.text+=String.fromCodePoint(e),e){case Ce:this.state=z,this.openWakaBang="";break;case Le:this.state=$;break;default:this.state=F}}},{key:"sDTDOpenWakaBang",value:function(){var e=String.fromCodePoint(this.getCodeNorm()),t=this.openWakaBang+=e;this.text+=e,"-"!==t&&(this.state="--"===t?U:F,this.openWakaBang="")}},{key:"sDTDComment",value:function(){this.captureToChar(Pe)&&(this.text+="-",this.state=H)}},{key:"sDTDCommentEnding",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),this.state=e===Pe?W:U}},{key:"sDTDCommentEnded",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),e===Fe?this.state=F:(this.fail("malformed comment."),this.state=U)}},{key:"sDTDPI",value:function(){this.captureToChar(Le)&&(this.text+="?",this.state=V)}},{key:"sDTDPIEnding",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),e===Fe&&(this.state=F)}},{key:"sText",value:function(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}},{key:"sEntity",value:function(){var e=this.i,t=this.chunk;e:for(;;)switch(this.getCode()){case P:this.entity+="".concat(t.slice(e,this.prevI),"\n"),e=this.i;break;case Ie:var r=this.entityReturnState,n=this.entity+t.slice(e,this.prevI);this.state=r;var i=void 0;""===n?(this.fail("empty entity name."),i="&;"):(i=this.parseEntity(n),this.entity=""),r===q&&void 0===this.textHandler||(this.text+=i);break e;case M:this.entity+=t.slice(e);break e}}},{key:"sOpenWaka",value:function(){var e=this.getCode();if(g(e))this.state=de,this.unget(),this.xmlDeclPossible=!1;else switch(e){case je:this.state=xe,this.xmlDeclPossible=!1;break;case Ce:this.state=Y,this.openWakaBang="",this.xmlDeclPossible=!1;break;case Le:this.state=re;break;default:this.fail("disallowed character in tag name"),this.state=q,this.xmlDeclPossible=!1}}},{key:"sOpenWakaBang",value:function(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=Q,this.openWakaBang="";break;case"--":this.state=K,this.openWakaBang="";break;case"DOCTYPE":this.state=D,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}},{key:"sComment",value:function(){this.captureToChar(Pe)&&(this.state=Z)}},{key:"sCommentEnding",value:function(){var e,t=this.getCodeNorm();t===Pe?(this.state=J,null===(e=this.commentHandler)||void 0===e||e.call(this,this.text),this.text=""):(this.text+="-".concat(String.fromCodePoint(t)),this.state=K)}},{key:"sCommentEnded",value:function(){var e=this.getCodeNorm();e!==Fe?(this.fail("malformed comment."),this.text+="--".concat(String.fromCodePoint(e)),this.state=K):this.state=q}},{key:"sCData",value:function(){this.captureToChar(ze)&&(this.state=ee)}},{key:"sCDataEnding",value:function(){var e=this.getCodeNorm();e===ze?this.state=te:(this.text+="]".concat(String.fromCodePoint(e)),this.state=Q)}},{key:"sCDataEnding2",value:function(){var e,t=this.getCodeNorm();switch(t){case Fe:null===(e=this.cdataHandler)||void 0===e||e.call(this,this.text),this.text="",this.state=q;break;case ze:this.text+="]";break;default:this.text+="]]".concat(String.fromCodePoint(t)),this.state=Q}}},{key:"sPIFirstChar",value:function(){var e=this.getCodeNorm();this.nameStartCheck(e)?(this.piTarget+=String.fromCodePoint(e),this.state=ne):e===Le||y(e)?(this.fail("processing instruction without a target."),this.state=e===Le?oe:ie):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e),this.state=ne)}},{key:"sPIRest",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCodeNorm();if(r===M)return void(this.piTarget+=e.slice(t));if(!this.nameCheck(r)){this.piTarget+=e.slice(t,this.prevI);var n=r===Le;n||y(r)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=n?he:ae):this.state=n?oe:ie:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(r));break}}}},{key:"sPIBody",value:function(){if(0===this.text.length){var e=this.getCodeNorm();e===Le?this.state=oe:y(e)||(this.text=String.fromCodePoint(e))}else this.captureToChar(Le)&&(this.state=oe)}},{key:"sPIEnding",value:function(){var e,t=this.getCodeNorm();if(t===Fe){var r=this.piTarget;"xml"===r.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(e=this.piHandler)||void 0===e||e.call(this,{target:r,body:this.text}),this.piTarget=this.text="",this.state=q}else t===Le?this.text+="?":(this.text+="?".concat(String.fromCodePoint(t)),this.state=ie);this.xmlDeclPossible=!1}},{key:"sXMLDeclNameStart",value:function(){var e=this.skipSpaces();e!==Le?e!==M&&(this.state=se,this.name=String.fromCodePoint(e)):this.state=he}},{key:"sXMLDeclName",value:function(){var e=this.captureTo(Xe);if(e===Le)return this.state=he,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(y(e)||e===Ne){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail("expected the name ".concat(this.xmlDeclExpects[0],"."));break;default:this.fail("expected one of ".concat(this.xmlDeclExpects.join(", ")))}this.state=e===Ne?le:ce}}},{key:"sXMLDeclEq",value:function(){var e=this.getCodeNorm();if(e===Le)return this.state=he,void this.fail("XML declaration is incomplete.");y(e)||(e!==Ne&&this.fail("value required."),this.state=le)}},{key:"sXMLDeclValueStart",value:function(){var e=this.getCodeNorm();if(e===Le)return this.state=he,void this.fail("XML declaration is incomplete.");y(e)||(We(e)?this.q=e:(this.fail("value must be quoted."),this.q=Oe),this.state=ue)}},{key:"sXMLDeclValue",value:function(){var e=this.captureTo([this.q,Le]);if(e===Le)return this.state=he,this.text="",void this.fail("XML declaration is incomplete.");if(e!==M){var t=this.text;switch(this.text="",this.name){case"version":this.xmlDeclExpects=["encoding","standalone"];var r=t;this.xmlDecl.version=r,/^1\.[0-9]+$/.test(r)?this.opt.forceXMLVersion||this.setXMLVersion(r):this.fail("version number must match /^1\\.[0-9]+$/.");break;case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(t)||this.fail("encoding value must match \t/^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=t;break;case"standalone":"yes"!==t&&"no"!==t&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=t}this.name="",this.state=fe}}},{key:"sXMLDeclSeparator",value:function(){var e=this.getCodeNorm();e!==Le?(y(e)||(this.fail("whitespace required."),this.unget()),this.state=ae):this.state=he}},{key:"sXMLDeclEnding",value:function(){var e;this.getCodeNorm()===Fe?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(e=this.xmldeclHandler)||void 0===e||e.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=q):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}},{key:"sOpenTag",value:function(){var e,t=this.captureNameChars();if(t!==M){var r=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=r.ns=Object.create(null)),null===(e=this.openTagStartHandler)||void 0===e||e.call(this,r),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),t){case Fe:this.openTag();break;case je:this.state=pe;break;default:y(t)||this.fail("disallowed character in tag name."),this.state=me}}}},{key:"sOpenTagSlash",value:function(){this.getCode()===Fe?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=me)}},{key:"sAttrib",value:function(){var e=this.skipSpaces();e!==M&&(g(e)?(this.unget(),this.state=be):e===Fe?this.openTag():e===je?this.state=pe:this.fail("disallowed character in attribute name."))}},{key:"sAttribName",value:function(){var e=this.captureNameChars();e===Ne?this.state=ve:y(e)?this.state=ye:e===Fe?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):e!==M&&this.fail("disallowed character in attribute name.")}},{key:"sAttribNameSawWhite",value:function(){var e=this.skipSpaces();switch(e){case M:return;case Ne:this.state=ve;break;default:this.fail("attribute without value."),this.text="",this.name="",e===Fe?this.openTag():g(e)?(this.unget(),this.state=be):(this.fail("disallowed character in attribute name."),this.state=me)}}},{key:"sAttribValue",value:function(){var e=this.getCodeNorm();We(e)?(this.q=e,this.state=ge):y(e)||(this.fail("unquoted attribute value."),this.state=_e,this.unget())}},{key:"sAttribValueQuoted",value:function(){for(var e=this.q,t=this.chunk,r=this.i;;)switch(this.getCode()){case e:return this.pushAttrib(this.name,this.text+t.slice(r,this.prevI)),this.name=this.text="",this.q=null,void(this.state=we);case Ae:return this.text+=t.slice(r,this.prevI),this.state=X,void(this.entityReturnState=ge);case Te:case P:case Se:this.text+="".concat(t.slice(r,this.prevI)," "),r=this.i;break;case De:return this.text+=t.slice(r,this.prevI),void this.fail("disallowed character.");case M:return void(this.text+=t.slice(r))}}},{key:"sAttribValueClosed",value:function(){var e=this.getCodeNorm();y(e)?this.state=me:e===Fe?this.openTag():e===je?this.state=pe:g(e)?(this.fail("no whitespace between attributes."),this.unget(),this.state=be):this.fail("disallowed character in attribute name.")}},{key:"sAttribValueUnquoted",value:function(){var e=this.captureTo(Ge);switch(e){case Ae:this.state=X,this.entityReturnState=_e;break;case De:this.fail("disallowed character.");break;case M:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",e===Fe?this.openTag():this.state=me}}},{key:"sCloseTag",value:function(){var e=this.captureNameChars();e===Fe?this.closeTag():y(e)?this.state=ke:e!==M&&this.fail("disallowed character in closing tag.")}},{key:"sCloseTagSawWhite",value:function(){switch(this.skipSpaces()){case Fe:this.closeTag();break;case M:break;default:this.fail("disallowed character in closing tag.")}}},{key:"handleTextInRoot",value:function(){var e=this.i,t=this.forbiddenState,r=this.chunk,n=this.textHandler;e:for(;;)switch(this.getCode()){case De:if(this.state=G,void 0!==n){var i=this.text,o=r.slice(e,this.prevI);0!==i.length?(n(i+o),this.text=""):0!==o.length&&n(o)}t=Qe;break e;case Ae:this.state=X,this.entityReturnState=q,void 0!==n&&(this.text+=r.slice(e,this.prevI)),t=Qe;break e;case ze:switch(t){case Qe:t=et;break;case et:t=tt;break;case tt:break;default:throw new Error("impossible state")}break;case Fe:t===tt&&this.fail('the string "]]>" is disallowed in char data.'),t=Qe;break;case P:void 0!==n&&(this.text+="".concat(r.slice(e,this.prevI),"\n")),e=this.i,t=Qe;break;case M:void 0!==n&&(this.text+=r.slice(e));break e;default:t=Qe}this.forbiddenState=t}},{key:"handleTextOutsideRoot",value:function(){var e=this.i,t=this.chunk,r=this.textHandler,n=!1;e:for(;;){var i=this.getCode();switch(i){case De:if(this.state=G,void 0!==r){var o=this.text,a=t.slice(e,this.prevI);0!==o.length?(r(o+a),this.text=""):0!==a.length&&r(a)}break e;case Ae:this.state=X,this.entityReturnState=q,void 0!==r&&(this.text+=t.slice(e,this.prevI)),n=!0;break e;case P:void 0!==r&&(this.text+="".concat(t.slice(e,this.prevI),"\n")),e=this.i;break;case M:void 0!==r&&(this.text+=t.slice(e));break e;default:y(i)||(n=!0)}}n&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}},{key:"pushAttribNS",value:function(e,t){var r,n=this.qname(e),i=n.prefix,o=n.local,a={name:e,prefix:i,local:o,value:t};if(this.attribList.push(a),null===(r=this.attributeHandler)||void 0===r||r.call(this,a),"xmlns"===i){var s=t.trim();"1.0"===this.currentXMLVersion&&""===s&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[o]=s,Ye(this,o,s)}else if("xmlns"===e){var c=t.trim();this.topNS[""]=c,Ye(this,"",c)}}},{key:"pushAttribPlain",value:function(e,t){var r,n={name:e,value:t};this.attribList.push(n),null===(r=this.attributeHandler)||void 0===r||r.call(this,n)}},{key:"end",value:function(){var e,t;this.sawRoot||this.fail("document must contain a root element.");for(var r=this.tags;r.length>0;){var n=r.pop();this.fail("unclosed tag: ".concat(n.name))}this.state!==j&&this.state!==q&&this.fail("unexpected end.");var i=this.text;return 0!==i.length&&(null===(e=this.textHandler)||void 0===e||e.call(this,i),this.text=""),this._closed=!0,null===(t=this.endHandler)||void 0===t||t.call(this),this._init(),this}},{key:"resolve",value:function(e){var t,r,n=this.topNS[e];if(void 0!==n)return n;for(var i=this.tags,o=i.length-1;o>=0;o--)if(void 0!==(n=i[o].ns[e]))return n;return void 0!==(n=this.ns[e])?n:null===(r=(t=this.opt).resolvePrefix)||void 0===r?void 0:r.call(t,e)}},{key:"qname",value:function(e){var t=e.indexOf(":");if(-1===t)return{prefix:"",local:e};var r=e.slice(t+1),n=e.slice(0,t);return(""===n||""===r||r.includes(":"))&&this.fail("malformed name: ".concat(e,".")),{prefix:n,local:r}}},{key:"processAttribsNS",value:function(){var e,t=this.attribList,r=this.tag,i=this.qname(r.name),o=i.prefix,a=i.local;r.prefix=o,r.local=a;var s=r.uri=null!==(e=this.resolve(o))&&void 0!==e?e:"";if(""!==o&&("xmlns"===o&&this.fail('tags may not have "xmlns" as prefix.'),""===s&&(this.fail("unbound namespace prefix: ".concat(JSON.stringify(o),".")),r.uri=o)),0!==t.length){var c,l=r.attributes,u=new Set,f=n(t);try{for(f.s();!(c=f.n()).done;){var h=c.value,d=h.name,p=h.prefix,m=h.local,b=void 0,y=void 0;""===p?(b="xmlns"===d?C:"",y=d):(void 0===(b=this.resolve(p))&&(this.fail("unbound namespace prefix: ".concat(JSON.stringify(p),".")),b=p),y="{".concat(b,"}").concat(m)),u.has(y)&&this.fail("duplicate attribute: ".concat(y,".")),u.add(y),h.uri=b,l[d]=h}}catch(e){f.e(e)}finally{f.f()}this.attribList=[]}}},{key:"processAttribsPlain",value:function(){var e,t=this.attribList,r=this.tag.attributes,i=n(t);try{for(i.s();!(e=i.n()).done;){var o=e.value,a=o.name,s=o.value;void 0!==r[a]&&this.fail("duplicate attribute: ".concat(a,".")),r[a]=s}}catch(e){i.e(e)}finally{i.f()}this.attribList=[]}},{key:"openTag",value:function(){var e;this.processAttribs();var t=this.tags,r=this.tag;r.isSelfClosing=!1,null===(e=this.openTagHandler)||void 0===e||e.call(this,r),t.push(r),this.state=q,this.name=""}},{key:"openSelfClosingTag",value:function(){var e,t,r;this.processAttribs();var n=this.tags,i=this.tag;i.isSelfClosing=!0,null===(e=this.openTagHandler)||void 0===e||e.call(this,i),null===(t=this.closeTagHandler)||void 0===t||t.call(this,i),null===(this.tag=null!==(r=n[n.length-1])&&void 0!==r?r:null)&&(this.closedRoot=!0),this.state=q,this.name=""}},{key:"closeTag",value:function(){var e=this.tags,t=this.name;if(this.state=q,this.name="",""===t)return this.fail("weird empty close tag."),void(this.text+="");for(var r=this.closeTagHandler,n=e.length;n-- >0;){var i=this.tag=e.pop();if(this.topNS=i.ns,null==r||r(i),i.name===t)break;this.fail("unexpected close tag.")}0===n?this.closedRoot=!0:n<0&&(this.fail("unmatched closing tag: ".concat(t,".")),this.text+=""))}},{key:"parseEntity",value:function(e){if("#"!==e[0]){var t=this.ENTITIES[e];return void 0!==t?t:(this.fail(this.isName(e)?"undefined entity.":"disallowed character in entity name."),"&".concat(e,";"))}var r=NaN;return"x"===e[1]&&/^#x[0-9a-f]+$/i.test(e)?r=parseInt(e.slice(2),16):/^#[0-9]+$/.test(e)&&(r=parseInt(e.slice(1),10)),this.isChar(r)?String.fromCodePoint(r):(this.fail("malformed character entity."),"&".concat(e,";"))}},{key:"closed",get:function(){return this._closed}},{key:"position",get:function(){return this.chunkPosition+this.i}},{key:"columnIndex",get:function(){return this.position-this.positionAtNewLine}}]),e}();r.SaxesParser=nt},{"xmlchars/xml/1.0/ed5":541,"xmlchars/xml/1.1/ed2":542,"xmlchars/xmlns/1.0/ed3":543}],497:[function(e,t,r){(function(e){t.exports="function"==typeof e?e:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}}).call(this,e("timers").setImmediate)},{timers:521}],498:[function(e,t,r){var n=e("safe-buffer").Buffer;function i(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}i.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=n.from(e,t));for(var r=this._block,i=this._blockSize,o=e.length,a=this._len,s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},{"safe-buffer":494}],499:[function(e,t,r){var n=t.exports=function(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=e("./sha"),n.sha1=e("./sha1"),n.sha224=e("./sha224"),n.sha256=e("./sha256"),n.sha384=e("./sha384"),n.sha512=e("./sha512")},{"./sha":500,"./sha1":501,"./sha224":502,"./sha256":503,"./sha384":504,"./sha512":505}],500:[function(e,t,r){var n=e("inherits"),i=e("./hash"),o=e("safe-buffer").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function c(){this.init(),this._w=s,i.call(this,64,56)}function l(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function f(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(c,i),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t=this._w,r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,s=0|this._e,c=0;c<16;++c)t[c]=e.readInt32BE(4*c);for(;c<80;++c)t[c]=t[c-3]^t[c-8]^t[c-14]^t[c-16];for(var h=0;h<80;++h){var d=~~(h/20),p=l(r)+f(d,n,i,o)+s+t[h]+a[d]|0;s=o,o=i,i=u(n),n=r,r=p}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0},c.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=c},{"./hash":498,inherits:387,"safe-buffer":494}],501:[function(e,t,r){var n=e("inherits"),i=e("./hash"),o=e("safe-buffer").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function c(){this.init(),this._w=s,i.call(this,64,56)}function l(e){return e<<1|e>>>31}function u(e){return e<<5|e>>>27}function f(e){return e<<30|e>>>2}function h(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(c,i),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t=this._w,r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,s=0|this._e,c=0;c<16;++c)t[c]=e.readInt32BE(4*c);for(;c<80;++c)t[c]=l(t[c-3]^t[c-8]^t[c-14]^t[c-16]);for(var d=0;d<80;++d){var p=~~(d/20),m=u(r)+h(p,n,i,o)+s+t[d]+a[p]|0;s=o,o=i,i=f(n),n=r,r=m}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0},c.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=c},{"./hash":498,inherits:387,"safe-buffer":494}],502:[function(e,t,r){var n=e("inherits"),i=e("./sha256"),o=e("./hash"),a=e("safe-buffer").Buffer,s=new Array(64);function c(){this.init(),this._w=s,o.call(this,64,56)}n(c,i),c.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},c.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=c},{"./hash":498,"./sha256":503,inherits:387,"safe-buffer":494}],503:[function(e,t,r){var n=e("inherits"),i=e("./hash"),o=e("safe-buffer").Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function c(){this.init(),this._w=s,i.call(this,64,56)}function l(e,t,r){return r^e&(t^r)}function u(e,t,r){return e&t|r&(e|t)}function f(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function h(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function d(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}function p(e){return(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10}n(c,i),c.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},c.prototype._update=function(e){for(var t=this._w,r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,s=0|this._e,c=0|this._f,m=0|this._g,b=0|this._h,y=0;y<16;++y)t[y]=e.readInt32BE(4*y);for(;y<64;++y)t[y]=p(t[y-2])+t[y-7]+d(t[y-15])+t[y-16]|0;for(var v=0;v<64;++v){var g=b+h(s)+l(s,c,m)+a[v]+t[v]|0,w=f(r)+u(r,n,i)|0;b=m,m=c,c=s,s=o+g|0,o=i,i=n,n=r,r=g+w|0}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0,this._f=c+this._f|0,this._g=m+this._g|0,this._h=b+this._h|0},c.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=c},{"./hash":498,inherits:387,"safe-buffer":494}],504:[function(e,t,r){var n=e("inherits"),i=e("./sha512"),o=e("./hash"),a=e("safe-buffer").Buffer,s=new Array(160);function c(){this.init(),this._w=s,o.call(this,128,112)}n(c,i),c.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},c.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},t.exports=c},{"./hash":498,"./sha512":505,inherits:387,"safe-buffer":494}],505:[function(e,t,r){var n=e("inherits"),i=e("./hash"),o=e("safe-buffer").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function c(){this.init(),this._w=s,i.call(this,128,112)}function l(e,t,r){return r^e&(t^r)}function u(e,t,r){return e&t|r&(e|t)}function f(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function h(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function b(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0>>0?1:0}n(c,i),c.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},c.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,c=0|this._fh,v=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,x=0|this._cl,k=0|this._dl,S=0|this._el,T=0|this._fl,E=0|this._gl,O=0|this._hl,C=0;C<32;C+=2)t[C]=e.readInt32BE(4*C),t[C+1]=e.readInt32BE(4*C+4);for(;C<160;C+=2){var R=t[C-30],A=t[C-30+1],M=d(R,A),P=p(A,R),j=m(R=t[C-4],A=t[C-4+1]),I=b(A,R),D=t[C-14],N=t[C-14+1],F=t[C-32],L=t[C-32+1],B=P+N|0,z=M+D+y(B,P)|0;z=(z=z+j+y(B=B+I|0,I)|0)+F+y(B=B+L|0,L)|0,t[C]=z,t[C+1]=B}for(var U=0;U<160;U+=2){z=t[U],B=t[U+1];var H=u(r,n,i),W=u(w,_,x),$=f(r,w),V=f(w,r),q=h(s,S),X=h(S,s),G=a[U],Y=a[U+1],K=l(s,c,v),Z=l(S,T,E),J=O+X|0,Q=g+q+y(J,O)|0;Q=(Q=(Q=Q+K+y(J=J+Z|0,Z)|0)+G+y(J=J+Y|0,Y)|0)+z+y(J=J+B|0,B)|0;var ee=V+W|0,te=$+H+y(ee,V)|0;g=v,O=E,v=c,E=T,c=s,T=S,s=o+Q+y(S=k+J|0,k)|0,o=i,k=x,i=n,x=_,n=r,_=w,r=Q+te+y(w=J+ee|0,J)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+x|0,this._dl=this._dl+k|0,this._el=this._el+S|0,this._fl=this._fl+T|0,this._gl=this._gl+E|0,this._hl=this._hl+O|0,this._ah=this._ah+r+y(this._al,w)|0,this._bh=this._bh+n+y(this._bl,_)|0,this._ch=this._ch+i+y(this._cl,x)|0,this._dh=this._dh+o+y(this._dl,k)|0,this._eh=this._eh+s+y(this._el,S)|0,this._fh=this._fh+c+y(this._fl,T)|0,this._gh=this._gh+v+y(this._gl,E)|0,this._hh=this._hh+g+y(this._hl,O)|0},c.prototype._hash=function(){var e=o.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},t.exports=c},{"./hash":498,inherits:387,"safe-buffer":494}],506:[function(e,t,r){t.exports=i;var n=e("events").EventEmitter;function i(){n.call(this)}e("inherits")(i,n),i.Readable=e("readable-stream/readable.js"),i.Writable=e("readable-stream/writable.js"),i.Duplex=e("readable-stream/duplex.js"),i.Transform=e("readable-stream/transform.js"),i.PassThrough=e("readable-stream/passthrough.js"),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on("data",i),e.on("drain",o),e._isStdio||t&&!1===t.end||(r.on("end",s),r.on("close",c));var a=!1;function s(){a||(a=!0,e.end())}function c(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function l(e){if(u(),0===n.listenerCount(this,"error"))throw e}function u(){r.removeListener("data",i),e.removeListener("drain",o),r.removeListener("end",s),r.removeListener("close",c),r.removeListener("error",l),e.removeListener("error",l),r.removeListener("end",u),r.removeListener("close",u),e.removeListener("close",u)}return r.on("error",l),e.on("error",l),r.on("end",u),r.on("close",u),e.on("close",u),e.emit("pipe",r),e}},{events:367,inherits:387,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],507:[function(e,t,r){t.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(e,t,r){var n=e("process-nextick-args"),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=f;var o=Object.create(e("core-util-is"));o.inherits=e("inherits");var a=e("./_stream_readable"),s=e("./_stream_writable");o.inherits(f,a);for(var c=i(s.prototype),l=0;l0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=f(t)),n?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):S(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?S(e,a,t,!1):j(e,a)):S(e,a,t,!1))):n||(a.reading=!1)),E(a)}function S(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&M(e)),j(e,t)}function T(e,t){var r;return h(t)||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function E(e){return!e.ended&&(e.needReadable||e.length=O?e=O:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function R(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=C(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function A(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,M(e)}}function M(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(m("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(P,e):P(e))}function P(e){m("emit readable"),e.emit("readable"),B(e)}function j(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(I,e,t))}function I(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=U(e,t.buffer,t.decoder),r);var r}function U(e,t,r){var n;return eo.length?o.length:e;if(a===o.length?i+=o:i+=o.slice(0,e),0==(e-=a)){a===o.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++n}return t.length-=n,i}function W(e,t){var r=l.allocUnsafe(e),n=t.head,i=1;for(n.data.copy(r),e-=n.data.length;n=n.next;){var o=n.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0==(e-=a)){a===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++i}return t.length-=i,r}function $(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(V,t,e))}function V(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function q(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return m("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?$(this):M(this),null;if(0===(e=R(e,t))&&t.ended)return 0===t.length&&$(this),null;var n,i=t.needReadable;return m("need readable",i),(0===t.length||t.length-e0?z(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&$(this)),null!==n&&this.emit("data",n),n},x.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},x.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,m("pipe count=%d opts=%j",o.pipesCount,t);var a=t&&!1===t.end||e===r.stdout||e===r.stderr?g:l;function c(e,t){m("onunpipe"),e===n&&t&&!1===t.hasUnpiped&&(t.hasUnpiped=!0,h())}function l(){m("onend"),e.end()}o.endEmitted?i.nextTick(a):n.once("end",a),e.on("unpipe",c);var u=D(n);e.on("drain",u);var f=!1;function h(){m("cleanup"),e.removeListener("close",y),e.removeListener("finish",v),e.removeListener("drain",u),e.removeListener("error",b),e.removeListener("unpipe",c),n.removeListener("end",l),n.removeListener("end",g),n.removeListener("data",p),f=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||u()}var d=!1;function p(t){m("ondata"),d=!1,!1!==e.write(t)||d||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==q(o.pipes,e))&&!f&&(m("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function b(t){m("onerror",t),g(),e.removeListener("error",b),0===s(e,"error")&&e.emit("error",t)}function y(){e.removeListener("finish",v),g()}function v(){m("onfinish"),e.removeListener("close",y),g()}function g(){m("unpipe"),n.unpipe(e)}return n.on("data",p),w(e,"error",b),e.once("close",y),e.once("finish",v),e.emit("pipe",n),o.flowing||(m("pipe resume"),n.resume()),e},x.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o-1?i:o.nextTick;w.WritableState=g;var l=Object.create(e("core-util-is"));l.inherits=e("inherits");var u={deprecate:e("util-deprecate")},f=e("./internal/streams/stream"),h=e("safe-buffer").Buffer,d=n.Uint8Array||function(){};function p(e){return h.from(e)}function m(e){return h.isBuffer(e)||e instanceof d}var b,y=e("./internal/streams/destroy");function v(){}function g(t,r){s=s||e("./_stream_duplex"),t=t||{};var n=r instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var i=t.highWaterMark,o=t.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var l=!1===t.decodeStrings;this.decodeStrings=!l,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){C(r,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function w(t){if(s=s||e("./_stream_duplex"),!(b.call(w,this)||this instanceof s))return new w(t);this._writableState=new g(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),f.call(this)}function _(e,t){var r=new Error("write after end");e.emit("error",r),o.nextTick(t,r)}function x(e,t,r,n){var i=!0,a=!1;return null===r?a=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),o.nextTick(n,a),i=!1),i}function k(e,t,r){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,r)),t}function S(e,t,r,n,i,o){if(!r){var a=k(t,n,i);n!==a&&(r=!0,i="buffer",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(w.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),w.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},w.prototype._writev=null,w.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||N(this,n,r)},Object.defineProperty(w.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),w.prototype.destroy=y.destroy,w.prototype._undestroy=y.undestroy,w.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,e("_process"),void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{"./_stream_duplex":508,"./internal/streams/destroy":514,"./internal/streams/stream":515,_process:467,"core-util-is":328,inherits:387,"process-nextick-args":466,"safe-buffer":494,timers:521,"util-deprecate":522}],513:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=e("safe-buffer").Buffer,o=e("util");function a(e,t,r){e.copy(t,r)}t.exports=function(){function e(){n(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var t=i.allocUnsafe(e>>>0),r=this.head,n=0;r;)a(r.data,t,n),n+=r.data.length,r=r.next;return t},e}(),o&&o.inspect&&o.inspect.custom&&(t.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},{"safe-buffer":494,util:185}],514:[function(e,t,r){var n=e("process-nextick-args");function i(e,t){var r=this,i=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return i||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(a,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(n.nextTick(a,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)})),this)}function o(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function a(e,t){e.emit("error",t)}t.exports={destroy:i,undestroy:o}},{"process-nextick-args":466}],515:[function(e,t,r){arguments[4][490][0].apply(r,arguments)},{dup:490,events:367}],516:[function(e,t,r){t.exports=e("./readable").PassThrough},{"./readable":517}],517:[function(e,t,r){(r=t.exports=e("./lib/_stream_readable.js")).Stream=r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(e,t,r){t.exports=e("./readable").Transform},{"./readable":517}],519:[function(e,t,r){t.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(e,t,r){var n=e("safe-buffer").Buffer,i=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}function a(e){var t=o(e);if("string"!=typeof t&&(n.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}function s(e){var t;switch(this.encoding=a(e),this.encoding){case"utf16le":this.text=p,this.end=m,t=4;break;case"utf8":this.fillLast=f,t=4;break;case"base64":this.text=b,this.end=y,t=3;break;default:return this.write=v,void(this.end=g)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function c(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function l(e,t,r){var n=t.length-1;if(n=0?(i>0&&(e.lastNeed=i-1),i):--n=0?(i>0&&(e.lastNeed=i-2),i):--n=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}function u(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}function f(e){var t=this.lastTotal-this.lastNeed,r=u(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function h(e,t){var r=l(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)}function d(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"�":t}function p(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function m(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function b(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function y(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function v(e){return e.toString(this.encoding)}function g(e){return e&&e.length?this.write(e):""}r.StringDecoder=s,s.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r.setImmediate="function"==typeof t?t:function(e){var t=c++,n=!(arguments.length<2)&&a.call(arguments,1);return s[t]=!0,i((function(){s[t]&&(n?e.apply(null,n):e.call(null),r.clearImmediate(t))})),t},r.clearImmediate="function"==typeof n?n:function(e){delete s[e]}}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":467,timers:521}],522:[function(e,t,r){(function(e){function r(e,t){if(n("noDeprecation"))return e;var r=!1;function i(){if(!r){if(n("throwDeprecation"))throw new Error(t);n("traceDeprecation")?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}return i}function n(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&"true"===String(r).toLowerCase()}t.exports=r}).call(this,void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],523:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],524:[function(e,t,r){function n(e){return n="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},n(e)}t.exports=function(e){return e&&"object"===n(e)&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},{}],525:[function(e,t,r){(function(t,n){function i(e){return i="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},i(e)}var o=/%[sdj%]/g;r.format=function(e){if(!k(e)){for(var t=[],r=0;r=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),s=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(t)?n.showHidden=t:t&&r._extend(n,t),T(n.showHidden)&&(n.showHidden=!1),T(n.depth)&&(n.depth=2),T(n.colors)&&(n.colors=!1),T(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),h(n,e,n.depth)}function l(e,t){var r=c.styles[t];return r?"["+c.colors[r][0]+"m"+e+"["+c.colors[r][1]+"m":e}function u(e,t){return e}function f(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}function h(e,t,n){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return k(i)||(i=h(e,i,n)),i}var o=d(e,t);if(o)return o;var a=Object.keys(t),s=f(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),R(t)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return p(t);if(0===a.length){if(A(t)){var c=t.name?": "+t.name:"";return e.stylize("[Function"+c+"]","special")}if(E(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(C(t))return e.stylize(Date.prototype.toString.call(t),"date");if(R(t))return p(t)}var l,u="",g=!1,w=["{","}"];return v(t)&&(g=!0,w=["[","]"]),A(t)&&(u=" [Function"+(t.name?": "+t.name:"")+"]"),E(t)&&(u=" "+RegExp.prototype.toString.call(t)),C(t)&&(u=" "+Date.prototype.toUTCString.call(t)),R(t)&&(u=" "+p(t)),0!==a.length||g&&0!=t.length?n<0?E(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),l=g?m(e,t,n,s,a):a.map((function(r){return b(e,t,n,s,r,g)})),e.seen.pop(),y(l,u,w)):w[0]+u+w[1]}function d(e,t){if(T(t))return e.stylize("undefined","undefined");if(k(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return x(t)?e.stylize(""+t,"number"):g(t)?e.stylize(""+t,"boolean"):w(t)?e.stylize("null","null"):void 0}function p(e){return"["+Error.prototype.toString.call(e)+"]"}function m(e,t,r,n,i){for(var o=[],a=0,s=t.length;a-1&&(s=o?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),T(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function y(e,t,r){return e.reduce((function(e,t){return t.indexOf("\n"),e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}function v(e){return Array.isArray(e)}function g(e){return"boolean"==typeof e}function w(e){return null===e}function _(e){return null==e}function x(e){return"number"==typeof e}function k(e){return"string"==typeof e}function S(e){return"symbol"===i(e)}function T(e){return void 0===e}function E(e){return O(e)&&"[object RegExp]"===P(e)}function O(e){return"object"===i(e)&&null!==e}function C(e){return O(e)&&"[object Date]"===P(e)}function R(e){return O(e)&&("[object Error]"===P(e)||e instanceof Error)}function A(e){return"function"==typeof e}function M(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===i(e)||void 0===e}function P(e){return Object.prototype.toString.call(e)}function j(e){return e<10?"0"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(T(a)&&(a=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!s[e])if(new RegExp("\\b"+e+"\\b","i").test(a)){var n=t.pid;s[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,n,t)}}else s[e]=function(){};return s[e]},r.inspect=c,c.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},c.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=v,r.isBoolean=g,r.isNull=w,r.isNullOrUndefined=_,r.isNumber=x,r.isString=k,r.isSymbol=S,r.isUndefined=T,r.isRegExp=E,r.isObject=O,r.isDate=C,r.isError=R,r.isFunction=A,r.isPrimitive=M,r.isBuffer=e("./support/isBuffer");var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function D(){var e=new Date,t=[j(e.getHours()),j(e.getMinutes()),j(e.getSeconds())].join(":");return[e.getDate(),I[e.getMonth()],t].join(" ")}function N(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){console.log("%s - %s",D(),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!O(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,e("_process"),void 0!==yn?yn:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":524,_process:467,inherits:523}],526:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"v1",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(r,"v3",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(r,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(r,"v5",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(r,"NIL",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(r,"version",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(r,"validate",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(r,"stringify",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(r,"parse",{enumerable:!0,get:function(){return f.default}});var n=h(e("./v1.js")),i=h(e("./v3.js")),o=h(e("./v4.js")),a=h(e("./v5.js")),s=h(e("./nil.js")),c=h(e("./version.js")),l=h(e("./validate.js")),u=h(e("./stringify.js")),f=h(e("./parse.js"));function h(e){return e&&e.__esModule?e:{default:e}}},{"./nil.js":528,"./parse.js":529,"./stringify.js":533,"./v1.js":534,"./v3.js":535,"./v4.js":537,"./v5.js":538,"./validate.js":539,"./version.js":540}],527:[function(e,t,r){function n(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r>5]>>>i%32&255,a=parseInt(n.charAt(o>>>4&15)+n.charAt(15&o),16);t.push(a)}return t}function o(e){return 14+(e+64>>>9<<4)+1}function a(e,t){e[t>>5]|=128<>5]|=(255&e[n/8])<>16)+(t>>16)+(r>>16)<<16|65535&r}function l(e,t){return e<>>32-t}function u(e,t,r,n,i,o){return c(l(c(c(t,e),c(n,o)),i),r)}function f(e,t,r,n,i,o,a){return u(t&r|~t&n,e,t,i,o,a)}function h(e,t,r,n,i,o,a){return u(t&n|r&~n,e,t,i,o,a)}function d(e,t,r,n,i,o,a){return u(t^r^n,e,t,i,o,a)}function p(e,t,r,n,i,o,a){return u(r^(t|~n),e,t,i,o,a)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var m=n;r.default=m},{}],528:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n="00000000-0000-0000-0000-000000000000";r.default=n},{}],529:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(e("./validate.js"));function i(e){return e&&e.__esModule?e:{default:e}}function o(e){if(!(0,n.default)(e))throw TypeError("Invalid UUID");var t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}var a=o;r.default=a},{"./validate.js":539}],530:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;r.default=n},{}],531:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=o;var n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),i=new Uint8Array(16);function o(){if(!n)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(i)}},{}],532:[function(e,t,r){function n(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function i(e,t){return e<>>32-t}function o(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var o=unescape(encodeURIComponent(e));e=[];for(var a=0;a>>0;_=w,w=g,g=i(v,30)>>>0,v=y,y=S}r[0]=r[0]+y>>>0,r[1]=r[1]+v>>>0,r[2]=r[2]+g>>>0,r[3]=r[3]+w>>>0,r[4]=r[4]+_>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var a=o;r.default=a},{}],533:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(e("./validate.js"));function i(e){return e&&e.__esModule?e:{default:e}}for(var o=[],a=0;a<256;++a)o.push((a+256).toString(16).substr(1));function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(o[e[t+0]]+o[e[t+1]]+o[e[t+2]]+o[e[t+3]]+"-"+o[e[t+4]]+o[e[t+5]]+"-"+o[e[t+6]]+o[e[t+7]]+"-"+o[e[t+8]]+o[e[t+9]]+"-"+o[e[t+10]]+o[e[t+11]]+o[e[t+12]]+o[e[t+13]]+o[e[t+14]]+o[e[t+15]]).toLowerCase();if(!(0,n.default)(r))throw TypeError("Stringified UUID is invalid");return r}var c=s;r.default=c},{"./validate.js":539}],534:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,i,o=s(e("./rng.js")),a=s(e("./stringify.js"));function s(e){return e&&e.__esModule?e:{default:e}}var c=0,l=0;function u(e,t,r){var s=t&&r||0,u=t||new Array(16),f=(e=e||{}).node||n,h=void 0!==e.clockseq?e.clockseq:i;if(null==f||null==h){var d=e.random||(e.rng||o.default)();null==f&&(f=n=[1|d[0],d[1],d[2],d[3],d[4],d[5]]),null==h&&(h=i=16383&(d[6]<<8|d[7]))}var p=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:l+1,b=p-c+(m-l)/1e4;if(b<0&&void 0===e.clockseq&&(h=h+1&16383),(b<0||p>c)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");c=p,l=m,i=h;var y=(1e4*(268435455&(p+=122192928e5))+m)%4294967296;u[s++]=y>>>24&255,u[s++]=y>>>16&255,u[s++]=y>>>8&255,u[s++]=255&y;var v=p/4294967296*1e4&268435455;u[s++]=v>>>8&255,u[s++]=255&v,u[s++]=v>>>24&15|16,u[s++]=v>>>16&255,u[s++]=h>>>8|128,u[s++]=255&h;for(var g=0;g<6;++g)u[s+g]=f[g];return t||(0,a.default)(u)}var f=u;r.default=f},{"./rng.js":531,"./stringify.js":533}],535:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=o(e("./v35.js")),i=o(e("./md5.js"));function o(e){return e&&e.__esModule?e:{default:e}}var a=(0,n.default)("v3",48,i.default);r.default=a},{"./md5.js":527,"./v35.js":536}],536:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=l,r.URL=r.DNS=void 0;var n=o(e("./stringify.js")),i=o(e("./parse.js"));function o(e){return e&&e.__esModule?e:{default:e}}function a(e){e=unescape(encodeURIComponent(e));for(var t=[],r=0;r=a&&e<=55295||e===i||e===o||e===n||e>=57344&&e<=65533||e>=65536&&e<=1114111}function c(e){return e===a||e===i||e===o||e===n}function l(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function u(e){return l(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}r.S_LIST=[a,i,o,n],r.isChar=s,r.isS=c,r.isNameStartChar=l,r.isNameChar=u},{}],542:[function(e,t,r){ +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(r,"__esModule",{value:!0}),r.CHAR="-퟿-�𐀀-􏿿",r.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",r.S=" \t\r\n",r.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",r.NAME_CHAR="-"+r.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",r.CHAR_RE=new RegExp("^["+r.CHAR+"]$","u"),r.RESTRICTED_CHAR_RE=new RegExp("^["+r.RESTRICTED_CHAR+"]$","u"),r.S_RE=new RegExp("^["+r.S+"]+$","u"),r.NAME_START_CHAR_RE=new RegExp("^["+r.NAME_START_CHAR+"]$","u"),r.NAME_CHAR_RE=new RegExp("^["+r.NAME_CHAR+"]$","u"),r.NAME_RE=new RegExp("^["+r.NAME_START_CHAR+"]["+r.NAME_CHAR+"]*$","u"),r.NMTOKEN_RE=new RegExp("^["+r.NAME_CHAR+"]+$","u");var n=9,i=10,o=13,a=32;function s(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function c(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}function l(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function u(e){return e===a||e===i||e===o||e===n}function f(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function h(e){return f(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}r.S_LIST=[a,i,o,n],r.isChar=s,r.isRestrictedChar=c,r.isCharAndNotRestricted=l,r.isS=u,r.isNameStartChar=f,r.isNameChar=h},{}],543:[function(e,t,r){function n(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function i(e){return n(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256} +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(r,"__esModule",{value:!0}),r.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",r.NC_NAME_CHAR="-"+r.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",r.NC_NAME_START_CHAR_RE=new RegExp("^["+r.NC_NAME_START_CHAR+"]$","u"),r.NC_NAME_CHAR_RE=new RegExp("^["+r.NC_NAME_CHAR+"]$","u"),r.NC_NAME_RE=new RegExp("^["+r.NC_NAME_START_CHAR+"]["+r.NC_NAME_CHAR+"]*$","u"),r.isNCNameStartChar=n,r.isNCNameChar=i},{}]},{},[15])(15)}(wn);var _n=wn.exports;async function xn(e,t){t&&(t instanceof ArrayBuffer&&(t=new Blob([t])),function(e,t){let r=document.createElement("a");r.download=e,r.style.display="none",r.href=t,document.body.appendChild(r),r.click(),document.body.removeChild(r)}(e,URL.createObjectURL(t)))}function kn(e){return kn="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},kn(e)}var Sn=/^\s+/,Tn=/\s+$/;function En(e,t){if(t=t||{},(e=e||"")instanceof En)return e;if(!(this instanceof En))return new En(e,t);var r=function(e){var t={r:0,g:0,b:0},r=1,n=null,i=null,o=null,a=!1,s=!1;"string"==typeof e&&(e=function(e){e=e.replace(Sn,"").replace(Tn,"").toLowerCase();var t,r=!1;if(Wn[e])e=Wn[e],r=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=ri.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=ri.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=ri.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=ri.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=ri.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=ri.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=ri.hex8.exec(e))return{r:Gn(t[1]),g:Gn(t[2]),b:Gn(t[3]),a:Jn(t[4]),format:r?"name":"hex8"};if(t=ri.hex6.exec(e))return{r:Gn(t[1]),g:Gn(t[2]),b:Gn(t[3]),format:r?"name":"hex"};if(t=ri.hex4.exec(e))return{r:Gn(t[1]+""+t[1]),g:Gn(t[2]+""+t[2]),b:Gn(t[3]+""+t[3]),a:Jn(t[4]+""+t[4]),format:r?"name":"hex8"};if(t=ri.hex3.exec(e))return{r:Gn(t[1]+""+t[1]),g:Gn(t[2]+""+t[2]),b:Gn(t[3]+""+t[3]),format:r?"name":"hex"};return!1}(e));"object"==kn(e)&&(ni(e.r)&&ni(e.g)&&ni(e.b)?(c=e.r,l=e.g,u=e.b,t={r:255*qn(c,255),g:255*qn(l,255),b:255*qn(u,255)},a=!0,s="%"===String(e.r).substr(-1)?"prgb":"rgb"):ni(e.h)&&ni(e.s)&&ni(e.v)?(n=Kn(e.s),i=Kn(e.v),t=function(e,t,r){e=6*qn(e,360),t=qn(t,100),r=qn(r,100);var n=Math.floor(e),i=e-n,o=r*(1-t),a=r*(1-i*t),s=r*(1-(1-i)*t),c=n%6,l=[r,a,o,o,s,r][c],u=[s,r,r,a,o,o][c],f=[o,o,s,r,r,a][c];return{r:255*l,g:255*u,b:255*f}}(e.h,n,i),a=!0,s="hsv"):ni(e.h)&&ni(e.s)&&ni(e.l)&&(n=Kn(e.s),o=Kn(e.l),t=function(e,t,r){var n,i,o;function a(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e}if(e=qn(e,360),t=qn(t,100),r=qn(r,100),0===t)n=i=o=r;else{var s=r<.5?r*(1+t):r+t-r*t,c=2*r-s;n=a(c,s,e+1/3),i=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*n,g:255*i,b:255*o}}(e.h,n,o),a=!0,s="hsl"),e.hasOwnProperty("a")&&(r=e.a));var c,l,u;return r=Vn(r),{ok:a,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||r.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}function On(e,t,r){e=qn(e,255),t=qn(t,255),r=qn(r,255);var n,i,o=Math.max(e,t,r),a=Math.min(e,t,r),s=(o+a)/2;if(o==a)n=i=0;else{var c=o-a;switch(i=s>.5?c/(2-o-a):c/(o+a),o){case e:n=(t-r)/c+(t>1)+720)%360;--t;)n.h=(n.h+i)%360,o.push(En(n));return o}function Hn(e,t){t=t||6;for(var r=En(e).toHsv(),n=r.h,i=r.s,o=r.v,a=[],s=1/t;t--;)a.push(En({h:n,s:i,v:o})),o=(o+s)%1;return a}En.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,r,n=this.toRgb();return e=n.r/255,t=n.g/255,r=n.b/255,.2126*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},setAlpha:function(e){return this._a=Vn(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=Cn(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=Cn(this._r,this._g,this._b),t=Math.round(360*e.h),r=Math.round(100*e.s),n=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+r+"%, "+n+"%)":"hsva("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var e=On(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=On(this._r,this._g,this._b),t=Math.round(360*e.h),r=Math.round(100*e.s),n=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+r+"%, "+n+"%)":"hsla("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(e){return Rn(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,r,n,i){var o=[Yn(Math.round(e).toString(16)),Yn(Math.round(t).toString(16)),Yn(Math.round(r).toString(16)),Yn(Zn(n))];if(i&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*qn(this._r,255))+"%",g:Math.round(100*qn(this._g,255))+"%",b:Math.round(100*qn(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*qn(this._r,255))+"%, "+Math.round(100*qn(this._g,255))+"%, "+Math.round(100*qn(this._b,255))+"%)":"rgba("+Math.round(100*qn(this._r,255))+"%, "+Math.round(100*qn(this._g,255))+"%, "+Math.round(100*qn(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&($n[Rn(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+An(this._r,this._g,this._b,this._a),r=t,n=this._gradientType?"GradientType = 1, ":"";if(e){var i=En(e);r="#"+An(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+t+",endColorstr="+r+")"},toString:function(e){var t=!!e;e=e||this._format;var r=!1,n=this._a<1&&this._a>=0;return t||!n||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(r=this.toRgbString()),"prgb"===e&&(r=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(r=this.toHexString()),"hex3"===e&&(r=this.toHexString(!0)),"hex4"===e&&(r=this.toHex8String(!0)),"hex8"===e&&(r=this.toHex8String()),"name"===e&&(r=this.toName()),"hsl"===e&&(r=this.toHslString()),"hsv"===e&&(r=this.toHsvString()),r||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return En(this.toString())},_applyModification:function(e,t){var r=e.apply(null,[this].concat([].slice.call(t)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(In,arguments)},brighten:function(){return this._applyModification(Dn,arguments)},darken:function(){return this._applyModification(Nn,arguments)},desaturate:function(){return this._applyModification(Mn,arguments)},saturate:function(){return this._applyModification(Pn,arguments)},greyscale:function(){return this._applyModification(jn,arguments)},spin:function(){return this._applyModification(Fn,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(Un,arguments)},complement:function(){return this._applyCombination(Ln,arguments)},monochromatic:function(){return this._applyCombination(Hn,arguments)},splitcomplement:function(){return this._applyCombination(zn,arguments)},triad:function(){return this._applyCombination(Bn,[3])},tetrad:function(){return this._applyCombination(Bn,[4])}},En.fromRatio=function(e,t){if("object"==kn(e)){var r={};for(var n in e)e.hasOwnProperty(n)&&(r[n]="a"===n?e[n]:Kn(e[n]));e=r}return En(e,t)},En.equals=function(e,t){return!(!e||!t)&&En(e).toRgbString()==En(t).toRgbString()},En.random=function(){return En.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},En.mix=function(e,t,r){r=0===r?0:r||50;var n=En(e).toRgb(),i=En(t).toRgb(),o=r/100;return En({r:(i.r-n.r)*o+n.r,g:(i.g-n.g)*o+n.g,b:(i.b-n.b)*o+n.b,a:(i.a-n.a)*o+n.a})},En.readability=function(e,t){var r=En(e),n=En(t);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)},En.isReadable=function(e,t,r){var n,i,o=En.readability(e,t);switch(i=!1,(n=function(e){var t,r;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==r&&"large"!==r&&(r="small");return{level:t,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":i=o>=4.5;break;case"AAlarge":i=o>=3;break;case"AAAsmall":i=o>=7}return i},En.mostReadable=function(e,t,r){var n,i,o,a,s=null,c=0;i=(r=r||{}).includeFallbackColors,o=r.level,a=r.size;for(var l=0;lc&&(c=n,s=En(t[l]));return En.isReadable(e,s,{level:o,size:a})||!i?s:(r.includeFallbackColors=!1,En.mostReadable(e,["#fff","#000"],r))};var Wn=En.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},$n=En.hexNames=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}(Wn);function Vn(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function qn(e,t){(function(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)})(e)&&(e="100%");var r=function(e){return"string"==typeof e&&-1!=e.indexOf("%")}(e);return e=Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function Xn(e){return Math.min(1,Math.max(0,e))}function Gn(e){return parseInt(e,16)}function Yn(e){return 1==e.length?"0"+e:""+e}function Kn(e){return e<=1&&(e=100*e+"%"),e}function Zn(e){return Math.round(255*parseFloat(e)).toString(16)}function Jn(e){return Gn(e)/255}var Qn,ei,ti,ri=(ei="[\\s|\\(]+("+(Qn="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+Qn+")[,|\\s]+("+Qn+")\\s*\\)?",ti="[\\s|\\(]+("+Qn+")[,|\\s]+("+Qn+")[,|\\s]+("+Qn+")[,|\\s]+("+Qn+")\\s*\\)?",{CSS_UNIT:new RegExp(Qn),rgb:new RegExp("rgb"+ei),rgba:new RegExp("rgba"+ti),hsl:new RegExp("hsl"+ei),hsla:new RegExp("hsla"+ti),hsv:new RegExp("hsv"+ei),hsva:new RegExp("hsva"+ti),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function ni(e){return!!ri.CSS_UNIT.exec(e)}var ii={exports:{}}; +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */!function(e,t){(function(){var r,n="Expected a function",i="__lodash_hash_undefined__",o="__lodash_placeholder__",a=16,s=32,c=64,l=128,u=256,f=1/0,h=9007199254740991,d=NaN,p=4294967295,m=[["ary",l],["bind",1],["bindKey",2],["curry",8],["curryRight",a],["flip",512],["partial",s],["partialRight",c],["rearg",u]],b="[object Arguments]",y="[object Array]",v="[object Boolean]",g="[object Date]",w="[object Error]",_="[object Function]",x="[object GeneratorFunction]",k="[object Map]",S="[object Number]",T="[object Object]",E="[object Promise]",O="[object RegExp]",C="[object Set]",R="[object String]",A="[object Symbol]",M="[object WeakMap]",P="[object ArrayBuffer]",j="[object DataView]",I="[object Float32Array]",D="[object Float64Array]",N="[object Int8Array]",F="[object Int16Array]",L="[object Int32Array]",B="[object Uint8Array]",z="[object Uint8ClampedArray]",U="[object Uint16Array]",H="[object Uint32Array]",W=/\b__p \+= '';/g,$=/\b(__p \+=) '' \+/g,V=/(__e\(.*?\)|\b__t\)) \+\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,X=/[&<>"']/g,G=RegExp(q.source),Y=RegExp(X.source),K=/<%-([\s\S]+?)%>/g,Z=/<%([\s\S]+?)%>/g,J=/<%=([\s\S]+?)%>/g,Q=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ee=/^\w*$/,te=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,re=/[\\^$.*+?()[\]{}|]/g,ne=RegExp(re.source),ie=/^\s+/,oe=/\s/,ae=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,se=/\{\n\/\* \[wrapped with (.+)\] \*/,ce=/,? & /,le=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ue=/[()=,{}\[\]\/\s]/,fe=/\\(\\)?/g,he=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,de=/\w*$/,pe=/^[-+]0x[0-9a-f]+$/i,me=/^0b[01]+$/i,be=/^\[object .+?Constructor\]$/,ye=/^0o[0-7]+$/i,ve=/^(?:0|[1-9]\d*)$/,ge=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,we=/($^)/,_e=/['\n\r\u2028\u2029\\]/g,xe="\\ud800-\\udfff",ke="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Se="\\u2700-\\u27bf",Te="a-z\\xdf-\\xf6\\xf8-\\xff",Ee="A-Z\\xc0-\\xd6\\xd8-\\xde",Oe="\\ufe0e\\ufe0f",Ce="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Re="['’]",Ae="["+xe+"]",Me="["+Ce+"]",Pe="["+ke+"]",je="\\d+",Ie="["+Se+"]",De="["+Te+"]",Ne="[^"+xe+Ce+je+Se+Te+Ee+"]",Fe="\\ud83c[\\udffb-\\udfff]",Le="[^"+xe+"]",Be="(?:\\ud83c[\\udde6-\\uddff]){2}",ze="[\\ud800-\\udbff][\\udc00-\\udfff]",Ue="["+Ee+"]",He="\\u200d",We="(?:"+De+"|"+Ne+")",$e="(?:"+Ue+"|"+Ne+")",Ve="(?:['’](?:d|ll|m|re|s|t|ve))?",qe="(?:['’](?:D|LL|M|RE|S|T|VE))?",Xe="(?:"+Pe+"|"+Fe+")"+"?",Ge="["+Oe+"]?",Ye=Ge+Xe+("(?:"+He+"(?:"+[Le,Be,ze].join("|")+")"+Ge+Xe+")*"),Ke="(?:"+[Ie,Be,ze].join("|")+")"+Ye,Ze="(?:"+[Le+Pe+"?",Pe,Be,ze,Ae].join("|")+")",Je=RegExp(Re,"g"),Qe=RegExp(Pe,"g"),et=RegExp(Fe+"(?="+Fe+")|"+Ze+Ye,"g"),tt=RegExp([Ue+"?"+De+"+"+Ve+"(?="+[Me,Ue,"$"].join("|")+")",$e+"+"+qe+"(?="+[Me,Ue+We,"$"].join("|")+")",Ue+"?"+We+"+"+Ve,Ue+"+"+qe,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",je,Ke].join("|"),"g"),rt=RegExp("["+He+xe+ke+Oe+"]"),nt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,it=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ot=-1,at={};at[I]=at[D]=at[N]=at[F]=at[L]=at[B]=at[z]=at[U]=at[H]=!0,at[b]=at[y]=at[P]=at[v]=at[j]=at[g]=at[w]=at[_]=at[k]=at[S]=at[T]=at[O]=at[C]=at[R]=at[M]=!1;var st={};st[b]=st[y]=st[P]=st[j]=st[v]=st[g]=st[I]=st[D]=st[N]=st[F]=st[L]=st[k]=st[S]=st[T]=st[O]=st[C]=st[R]=st[A]=st[B]=st[z]=st[U]=st[H]=!0,st[w]=st[_]=st[M]=!1;var ct={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},lt=parseFloat,ut=parseInt,ft="object"==typeof yn&&yn&&yn.Object===Object&&yn,ht="object"==typeof self&&self&&self.Object===Object&&self,dt=ft||ht||Function("return this")(),pt=t&&!t.nodeType&&t,mt=pt&&e&&!e.nodeType&&e,bt=mt&&mt.exports===pt,yt=bt&&ft.process,vt=function(){try{var e=mt&&mt.require&&mt.require("util").types;return e||yt&&yt.binding&&yt.binding("util")}catch(e){}}(),gt=vt&&vt.isArrayBuffer,wt=vt&&vt.isDate,_t=vt&&vt.isMap,xt=vt&&vt.isRegExp,kt=vt&&vt.isSet,St=vt&&vt.isTypedArray;function Tt(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)}function Et(e,t,r,n){for(var i=-1,o=null==e?0:e.length;++i-1}function Pt(e,t,r){for(var n=-1,i=null==e?0:e.length;++n-1;);return r}function tr(e,t){for(var r=e.length;r--&&Ut(t,e[r],0)>-1;);return r}var rr=qt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),nr=qt({"&":"&","<":"<",">":">",'"':""","'":"'"});function ir(e){return"\\"+ct[e]}function or(e){return rt.test(e)}function ar(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function sr(e,t){return function(r){return e(t(r))}}function cr(e,t){for(var r=-1,n=e.length,i=0,a=[];++r",""":'"',"'":"'"});var mr=function e(t){var oe,xe=(t=null==t?dt:mr.defaults(dt.Object(),t,mr.pick(dt,it))).Array,ke=t.Date,Se=t.Error,Te=t.Function,Ee=t.Math,Oe=t.Object,Ce=t.RegExp,Re=t.String,Ae=t.TypeError,Me=xe.prototype,Pe=Te.prototype,je=Oe.prototype,Ie=t["__core-js_shared__"],De=Pe.toString,Ne=je.hasOwnProperty,Fe=0,Le=(oe=/[^.]+$/.exec(Ie&&Ie.keys&&Ie.keys.IE_PROTO||""))?"Symbol(src)_1."+oe:"",Be=je.toString,ze=De.call(Oe),Ue=dt._,He=Ce("^"+De.call(Ne).replace(re,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),We=bt?t.Buffer:r,$e=t.Symbol,Ve=t.Uint8Array,qe=We?We.allocUnsafe:r,Xe=sr(Oe.getPrototypeOf,Oe),Ge=Oe.create,Ye=je.propertyIsEnumerable,Ke=Me.splice,Ze=$e?$e.isConcatSpreadable:r,et=$e?$e.iterator:r,rt=$e?$e.toStringTag:r,ct=function(){try{var e=ho(Oe,"defineProperty");return e({},"",{}),e}catch(e){}}(),ft=t.clearTimeout!==dt.clearTimeout&&t.clearTimeout,ht=ke&&ke.now!==dt.Date.now&&ke.now,pt=t.setTimeout!==dt.setTimeout&&t.setTimeout,mt=Ee.ceil,yt=Ee.floor,vt=Oe.getOwnPropertySymbols,Lt=We?We.isBuffer:r,qt=t.isFinite,br=Me.join,yr=sr(Oe.keys,Oe),vr=Ee.max,gr=Ee.min,wr=ke.now,_r=t.parseInt,xr=Ee.random,kr=Me.reverse,Sr=ho(t,"DataView"),Tr=ho(t,"Map"),Er=ho(t,"Promise"),Or=ho(t,"Set"),Cr=ho(t,"WeakMap"),Rr=ho(Oe,"create"),Ar=Cr&&new Cr,Mr={},Pr=Bo(Sr),jr=Bo(Tr),Ir=Bo(Er),Dr=Bo(Or),Nr=Bo(Cr),Fr=$e?$e.prototype:r,Lr=Fr?Fr.valueOf:r,Br=Fr?Fr.toString:r;function zr(e){if(rs(e)&&!Va(e)&&!(e instanceof $r)){if(e instanceof Wr)return e;if(Ne.call(e,"__wrapped__"))return zo(e)}return new Wr(e)}var Ur=function(){function e(){}return function(t){if(!ts(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Hr(){}function Wr(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function $r(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Vr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function ln(e,t,n,i,o,a){var s,c=1&t,l=2&t,u=4&t;if(n&&(s=o?n(e,i,o,a):n(e)),s!==r)return s;if(!ts(e))return e;var f=Va(e);if(f){if(s=function(e){var t=e.length,r=new e.constructor(t);t&&"string"==typeof e[0]&&Ne.call(e,"index")&&(r.index=e.index,r.input=e.input);return r}(e),!c)return Ai(e,s)}else{var h=bo(e),d=h==_||h==x;if(Ya(e))return Si(e,c);if(h==T||h==b||d&&!o){if(s=l||d?{}:vo(e),!c)return l?function(e,t){return Mi(e,mo(e),t)}(e,function(e,t){return e&&Mi(t,js(t),e)}(s,e)):function(e,t){return Mi(e,po(e),t)}(e,on(s,e))}else{if(!st[h])return o?e:{};s=function(e,t,r){var n=e.constructor;switch(t){case P:return Ti(e);case v:case g:return new n(+e);case j:return function(e,t){var r=t?Ti(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case I:case D:case N:case F:case L:case B:case z:case U:case H:return Ei(e,r);case k:return new n;case S:case R:return new n(e);case O:return function(e){var t=new e.constructor(e.source,de.exec(e));return t.lastIndex=e.lastIndex,t}(e);case C:return new n;case A:return i=e,Lr?Oe(Lr.call(i)):{}}var i}(e,h,c)}}a||(a=new Yr);var p=a.get(e);if(p)return p;a.set(e,s),ss(e)?e.forEach((function(r){s.add(ln(r,t,n,r,e,a))})):ns(e)&&e.forEach((function(r,i){s.set(i,ln(r,t,n,i,e,a))}));var m=f?r:(u?l?oo:io:l?js:Ps)(e);return Ot(m||e,(function(r,i){m&&(r=e[i=r]),tn(s,i,ln(r,t,n,i,e,a))})),s}function un(e,t,n){var i=n.length;if(null==e)return!i;for(e=Oe(e);i--;){var o=n[i],a=t[o],s=e[o];if(s===r&&!(o in e)||!a(s))return!1}return!0}function fn(e,t,i){if("function"!=typeof e)throw new Ae(n);return Po((function(){e.apply(r,i)}),t)}function hn(e,t,r,n){var i=-1,o=Mt,a=!0,s=e.length,c=[],l=t.length;if(!s)return c;r&&(t=jt(t,Zt(r))),n?(o=Pt,a=!1):t.length>=200&&(o=Qt,a=!1,t=new Gr(t));e:for(;++i-1},qr.prototype.set=function(e,t){var r=this.__data__,n=rn(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Xr.prototype.clear=function(){this.size=0,this.__data__={hash:new Vr,map:new(Tr||qr),string:new Vr}},Xr.prototype.delete=function(e){var t=uo(this,e).delete(e);return this.size-=t?1:0,t},Xr.prototype.get=function(e){return uo(this,e).get(e)},Xr.prototype.has=function(e){return uo(this,e).has(e)},Xr.prototype.set=function(e,t){var r=uo(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},Gr.prototype.add=Gr.prototype.push=function(e){return this.__data__.set(e,i),this},Gr.prototype.has=function(e){return this.__data__.has(e)},Yr.prototype.clear=function(){this.__data__=new qr,this.size=0},Yr.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Yr.prototype.get=function(e){return this.__data__.get(e)},Yr.prototype.has=function(e){return this.__data__.has(e)},Yr.prototype.set=function(e,t){var r=this.__data__;if(r instanceof qr){var n=r.__data__;if(!Tr||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Xr(n)}return r.set(e,t),this.size=r.size,this};var dn=Ii(_n),pn=Ii(xn,!0);function mn(e,t){var r=!0;return dn(e,(function(e,n,i){return r=!!t(e,n,i)})),r}function bn(e,t,n){for(var i=-1,o=e.length;++i0&&r(s)?t>1?vn(s,t-1,r,n,i):It(i,s):n||(i[i.length]=s)}return i}var gn=Di(),wn=Di(!0);function _n(e,t){return e&&gn(e,t,Ps)}function xn(e,t){return e&&wn(e,t,Ps)}function kn(e,t){return At(t,(function(t){return Ja(e[t])}))}function Sn(e,t){for(var n=0,i=(t=wi(t,e)).length;null!=e&&nt}function Cn(e,t){return null!=e&&Ne.call(e,t)}function Rn(e,t){return null!=e&&t in Oe(e)}function An(e,t,n){for(var i=n?Pt:Mt,o=e[0].length,a=e.length,s=a,c=xe(a),l=1/0,u=[];s--;){var f=e[s];s&&t&&(f=jt(f,Zt(t))),l=gr(f.length,l),c[s]=!n&&(t||o>=120&&f.length>=120)?new Gr(s&&f):r}f=e[0];var h=-1,d=c[0];e:for(;++h=s?c:c*("desc"==r[n]?-1:1)}return e.index-t.index}(e,t,r)}))}function qn(e,t,r){for(var n=-1,i=t.length,o={};++n-1;)s!==e&&Ke.call(s,c,1),Ke.call(e,c,1);return e}function Gn(e,t){for(var r=e?t.length:0,n=r-1;r--;){var i=t[r];if(r==n||i!==o){var o=i;wo(i)?Ke.call(e,i,1):hi(e,i)}}return e}function Yn(e,t){return e+yt(xr()*(t-e+1))}function Kn(e,t){var r="";if(!e||t<1||t>h)return r;do{t%2&&(r+=e),(t=yt(t/2))&&(e+=e)}while(t);return r}function Zn(e,t){return jo(Co(e,t,ic),e+"")}function Jn(e){return Zr(Us(e))}function Qn(e,t){var r=Us(e);return No(r,cn(t,0,r.length))}function ei(e,t,n,i){if(!ts(e))return e;for(var o=-1,a=(t=wi(t,e)).length,s=a-1,c=e;null!=c&&++oi?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=xe(i);++n>>1,a=e[o];null!==a&&!ls(a)&&(r?a<=t:a=200){var l=t?null:Ki(e);if(l)return lr(l);a=!1,i=Qt,c=new Gr}else c=t?[]:s;e:for(;++n=i?e:ii(e,t,n)}var ki=ft||function(e){return dt.clearTimeout(e)};function Si(e,t){if(t)return e.slice();var r=e.length,n=qe?qe(r):new e.constructor(r);return e.copy(n),n}function Ti(e){var t=new e.constructor(e.byteLength);return new Ve(t).set(new Ve(e)),t}function Ei(e,t){var r=t?Ti(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function Oi(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,a=ls(e),s=t!==r,c=null===t,l=t==t,u=ls(t);if(!c&&!u&&!a&&e>t||a&&s&&l&&!c&&!u||i&&s&&l||!n&&l||!o)return 1;if(!i&&!a&&!u&&e1?n[o-1]:r,s=o>2?n[2]:r;for(a=e.length>3&&"function"==typeof a?(o--,a):r,s&&_o(n[0],n[1],s)&&(a=o<3?r:a,o=1),t=Oe(t);++i-1?o[a?t[s]:s]:r}}function zi(e){return no((function(t){var i=t.length,o=i,a=Wr.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if("function"!=typeof s)throw new Ae(n);if(a&&!c&&"wrapper"==so(s))var c=new Wr([],!0)}for(o=c?o:i;++o1&&g.reverse(),h&&uc))return!1;var u=a.get(e),f=a.get(t);if(u&&f)return u==t&&f==e;var h=-1,d=!0,p=2&n?new Gr:r;for(a.set(e,t),a.set(t,e);++h-1&&e%1==0&&e1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(ae,"{\n/* [wrapped with "+t+"] */\n")}(n,function(e,t){return Ot(m,(function(r){var n="_."+r[0];t&r[1]&&!Mt(e,n)&&e.push(n)})),e.sort()}(function(e){var t=e.match(se);return t?t[1].split(ce):[]}(n),r)))}function Do(e){var t=0,n=0;return function(){var i=wr(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function No(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n1?e[t-1]:r;return n="function"==typeof n?(e.pop(),n):r,aa(e,n)}));function da(e){var t=zr(e);return t.__chain__=!0,t}function pa(e,t){return t(e)}var ma=no((function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return sn(t,e)};return!(t>1||this.__actions__.length)&&i instanceof $r&&wo(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:pa,args:[o],thisArg:r}),new Wr(i,this.__chain__).thru((function(e){return t&&!e.length&&e.push(r),e}))):this.thru(o)}));var ba=Pi((function(e,t,r){Ne.call(e,r)?++e[r]:an(e,r,1)}));var ya=Bi($o),va=Bi(Vo);function ga(e,t){return(Va(e)?Ot:dn)(e,lo(t,3))}function wa(e,t){return(Va(e)?Ct:pn)(e,lo(t,3))}var _a=Pi((function(e,t,r){Ne.call(e,r)?e[r].push(t):an(e,r,[t])}));var xa=Zn((function(e,t,r){var n=-1,i="function"==typeof t,o=Xa(e)?xe(e.length):[];return dn(e,(function(e){o[++n]=i?Tt(t,e,r):Mn(e,t,r)})),o})),ka=Pi((function(e,t,r){an(e,r,t)}));function Sa(e,t){return(Va(e)?jt:zn)(e,lo(t,3))}var Ta=Pi((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]}));var Ea=Zn((function(e,t){if(null==e)return[];var r=t.length;return r>1&&_o(e,t[0],t[1])?t=[]:r>2&&_o(t[0],t[1],t[2])&&(t=[t[0]]),Vn(e,vn(t,1),[])})),Oa=ht||function(){return dt.Date.now()};function Ca(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,Ji(e,l,r,r,r,r,t)}function Ra(e,t){var i;if("function"!=typeof t)throw new Ae(n);return e=ms(e),function(){return--e>0&&(i=t.apply(this,arguments)),e<=1&&(t=r),i}}var Aa=Zn((function(e,t,r){var n=1;if(r.length){var i=cr(r,co(Aa));n|=s}return Ji(e,n,t,r,i)})),Ma=Zn((function(e,t,r){var n=3;if(r.length){var i=cr(r,co(Ma));n|=s}return Ji(t,n,e,r,i)}));function Pa(e,t,i){var o,a,s,c,l,u,f=0,h=!1,d=!1,p=!0;if("function"!=typeof e)throw new Ae(n);function m(t){var n=o,i=a;return o=a=r,f=t,c=e.apply(i,n)}function b(e){var n=e-u;return u===r||n>=t||n<0||d&&e-f>=s}function y(){var e=Oa();if(b(e))return v(e);l=Po(y,function(e){var r=t-(e-u);return d?gr(r,s-(e-f)):r}(e))}function v(e){return l=r,p&&o?m(e):(o=a=r,c)}function g(){var e=Oa(),n=b(e);if(o=arguments,a=this,u=e,n){if(l===r)return function(e){return f=e,l=Po(y,t),h?m(e):c}(u);if(d)return ki(l),l=Po(y,t),m(u)}return l===r&&(l=Po(y,t)),c}return t=ys(t)||0,ts(i)&&(h=!!i.leading,s=(d="maxWait"in i)?vr(ys(i.maxWait)||0,t):s,p="trailing"in i?!!i.trailing:p),g.cancel=function(){l!==r&&ki(l),f=0,o=u=a=l=r},g.flush=function(){return l===r?c:v(Oa())},g}var ja=Zn((function(e,t){return fn(e,1,t)})),Ia=Zn((function(e,t,r){return fn(e,ys(t)||0,r)}));function Da(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new Ae(n);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=e.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(Da.Cache||Xr),r}function Na(e){if("function"!=typeof e)throw new Ae(n);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Da.Cache=Xr;var Fa=_i((function(e,t){var r=(t=1==t.length&&Va(t[0])?jt(t[0],Zt(lo())):jt(vn(t,1),Zt(lo()))).length;return Zn((function(n){for(var i=-1,o=gr(n.length,r);++i=t})),$a=Pn(function(){return arguments}())?Pn:function(e){return rs(e)&&Ne.call(e,"callee")&&!Ye.call(e,"callee")},Va=xe.isArray,qa=gt?Zt(gt):function(e){return rs(e)&&En(e)==P};function Xa(e){return null!=e&&es(e.length)&&!Ja(e)}function Ga(e){return rs(e)&&Xa(e)}var Ya=Lt||yc,Ka=wt?Zt(wt):function(e){return rs(e)&&En(e)==g};function Za(e){if(!rs(e))return!1;var t=En(e);return t==w||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!os(e)}function Ja(e){if(!ts(e))return!1;var t=En(e);return t==_||t==x||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Qa(e){return"number"==typeof e&&e==ms(e)}function es(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=h}function ts(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function rs(e){return null!=e&&"object"==typeof e}var ns=_t?Zt(_t):function(e){return rs(e)&&bo(e)==k};function is(e){return"number"==typeof e||rs(e)&&En(e)==S}function os(e){if(!rs(e)||En(e)!=T)return!1;var t=Xe(e);if(null===t)return!0;var r=Ne.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&De.call(r)==ze}var as=xt?Zt(xt):function(e){return rs(e)&&En(e)==O};var ss=kt?Zt(kt):function(e){return rs(e)&&bo(e)==C};function cs(e){return"string"==typeof e||!Va(e)&&rs(e)&&En(e)==R}function ls(e){return"symbol"==typeof e||rs(e)&&En(e)==A}var us=St?Zt(St):function(e){return rs(e)&&es(e.length)&&!!at[En(e)]};var fs=Xi(Bn),hs=Xi((function(e,t){return e<=t}));function ds(e){if(!e)return[];if(Xa(e))return cs(e)?hr(e):Ai(e);if(et&&e[et])return function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[et]());var t=bo(e);return(t==k?ar:t==C?lr:Us)(e)}function ps(e){return e?(e=ys(e))===f||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ms(e){var t=ps(e),r=t%1;return t==t?r?t-r:t:0}function bs(e){return e?cn(ms(e),0,p):0}function ys(e){if("number"==typeof e)return e;if(ls(e))return d;if(ts(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ts(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Kt(e);var r=me.test(e);return r||ye.test(e)?ut(e.slice(2),r?2:8):pe.test(e)?d:+e}function vs(e){return Mi(e,js(e))}function gs(e){return null==e?"":ui(e)}var ws=ji((function(e,t){if(To(t)||Xa(t))Mi(t,Ps(t),e);else for(var r in t)Ne.call(t,r)&&tn(e,r,t[r])})),_s=ji((function(e,t){Mi(t,js(t),e)})),xs=ji((function(e,t,r,n){Mi(t,js(t),e,n)})),ks=ji((function(e,t,r,n){Mi(t,Ps(t),e,n)})),Ss=no(sn);var Ts=Zn((function(e,t){e=Oe(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&_o(t[0],t[1],o)&&(i=1);++n1),t})),Mi(e,oo(e),r),n&&(r=ln(r,7,to));for(var i=t.length;i--;)hi(r,t[i]);return r}));var Fs=no((function(e,t){return null==e?{}:function(e,t){return qn(e,t,(function(t,r){return Cs(e,r)}))}(e,t)}));function Ls(e,t){if(null==e)return{};var r=jt(oo(e),(function(e){return[e]}));return t=lo(t),qn(e,r,(function(e,r){return t(e,r[0])}))}var Bs=Zi(Ps),zs=Zi(js);function Us(e){return null==e?[]:Jt(e,Ps(e))}var Hs=Fi((function(e,t,r){return t=t.toLowerCase(),e+(r?Ws(t):t)}));function Ws(e){return Zs(gs(e).toLowerCase())}function $s(e){return(e=gs(e))&&e.replace(ge,rr).replace(Qe,"")}var Vs=Fi((function(e,t,r){return e+(r?"-":"")+t.toLowerCase()})),qs=Fi((function(e,t,r){return e+(r?" ":"")+t.toLowerCase()})),Xs=Ni("toLowerCase");var Gs=Fi((function(e,t,r){return e+(r?"_":"")+t.toLowerCase()}));var Ys=Fi((function(e,t,r){return e+(r?" ":"")+Zs(t)}));var Ks=Fi((function(e,t,r){return e+(r?" ":"")+t.toUpperCase()})),Zs=Ni("toUpperCase");function Js(e,t,n){return e=gs(e),(t=n?r:t)===r?function(e){return nt.test(e)}(e)?function(e){return e.match(tt)||[]}(e):function(e){return e.match(le)||[]}(e):e.match(t)||[]}var Qs=Zn((function(e,t){try{return Tt(e,r,t)}catch(e){return Za(e)?e:new Se(e)}})),ec=no((function(e,t){return Ot(t,(function(t){t=Lo(t),an(e,t,Aa(e[t],e))})),e}));function tc(e){return function(){return e}}var rc=zi(),nc=zi(!0);function ic(e){return e}function oc(e){return Nn("function"==typeof e?e:ln(e,1))}var ac=Zn((function(e,t){return function(r){return Mn(r,e,t)}})),sc=Zn((function(e,t){return function(r){return Mn(e,r,t)}}));function cc(e,t,r){var n=Ps(t),i=kn(t,n);null!=r||ts(t)&&(i.length||!n.length)||(r=t,t=e,e=this,i=kn(t,Ps(t)));var o=!(ts(r)&&"chain"in r&&!r.chain),a=Ja(e);return Ot(i,(function(r){var n=t[r];e[r]=n,a&&(e.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=e(this.__wrapped__);return(r.__actions__=Ai(this.__actions__)).push({func:n,args:arguments,thisArg:e}),r.__chain__=t,r}return n.apply(e,It([this.value()],arguments))})})),e}function lc(){}var uc=$i(jt),fc=$i(Rt),hc=$i(Ft);function dc(e){return xo(e)?Vt(Lo(e)):function(e){return function(t){return Sn(t,e)}}(e)}var pc=qi(),mc=qi(!0);function bc(){return[]}function yc(){return!1}var vc=Wi((function(e,t){return e+t}),0),gc=Yi("ceil"),wc=Wi((function(e,t){return e/t}),1),_c=Yi("floor");var xc,kc=Wi((function(e,t){return e*t}),1),Sc=Yi("round"),Tc=Wi((function(e,t){return e-t}),0);return zr.after=function(e,t){if("function"!=typeof t)throw new Ae(n);return e=ms(e),function(){if(--e<1)return t.apply(this,arguments)}},zr.ary=Ca,zr.assign=ws,zr.assignIn=_s,zr.assignInWith=xs,zr.assignWith=ks,zr.at=Ss,zr.before=Ra,zr.bind=Aa,zr.bindAll=ec,zr.bindKey=Ma,zr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Va(e)?e:[e]},zr.chain=da,zr.chunk=function(e,t,n){t=(n?_o(e,t,n):t===r)?1:vr(ms(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,a=0,s=xe(mt(i/t));oo?0:o+n),(i=i===r||i>o?o:ms(i))<0&&(i+=o),i=n>i?0:bs(i);n>>0)?(e=gs(e))&&("string"==typeof t||null!=t&&!as(t))&&!(t=ui(t))&&or(e)?xi(hr(e),0,n):e.split(t,n):[]},zr.spread=function(e,t){if("function"!=typeof e)throw new Ae(n);return t=null==t?0:vr(ms(t),0),Zn((function(r){var n=r[t],i=xi(r,0,t);return n&&It(i,n),Tt(e,this,i)}))},zr.tail=function(e){var t=null==e?0:e.length;return t?ii(e,1,t):[]},zr.take=function(e,t,n){return e&&e.length?ii(e,0,(t=n||t===r?1:ms(t))<0?0:t):[]},zr.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ii(e,(t=i-(t=n||t===r?1:ms(t)))<0?0:t,i):[]},zr.takeRightWhile=function(e,t){return e&&e.length?pi(e,lo(t,3),!1,!0):[]},zr.takeWhile=function(e,t){return e&&e.length?pi(e,lo(t,3)):[]},zr.tap=function(e,t){return t(e),e},zr.throttle=function(e,t,r){var i=!0,o=!0;if("function"!=typeof e)throw new Ae(n);return ts(r)&&(i="leading"in r?!!r.leading:i,o="trailing"in r?!!r.trailing:o),Pa(e,t,{leading:i,maxWait:t,trailing:o})},zr.thru=pa,zr.toArray=ds,zr.toPairs=Bs,zr.toPairsIn=zs,zr.toPath=function(e){return Va(e)?jt(e,Lo):ls(e)?[e]:Ai(Fo(gs(e)))},zr.toPlainObject=vs,zr.transform=function(e,t,r){var n=Va(e),i=n||Ya(e)||us(e);if(t=lo(t,4),null==r){var o=e&&e.constructor;r=i?n?new o:[]:ts(e)&&Ja(o)?Ur(Xe(e)):{}}return(i?Ot:_n)(e,(function(e,n,i){return t(r,e,n,i)})),r},zr.unary=function(e){return Ca(e,1)},zr.union=ra,zr.unionBy=na,zr.unionWith=ia,zr.uniq=function(e){return e&&e.length?fi(e):[]},zr.uniqBy=function(e,t){return e&&e.length?fi(e,lo(t,2)):[]},zr.uniqWith=function(e,t){return t="function"==typeof t?t:r,e&&e.length?fi(e,r,t):[]},zr.unset=function(e,t){return null==e||hi(e,t)},zr.unzip=oa,zr.unzipWith=aa,zr.update=function(e,t,r){return null==e?e:di(e,t,gi(r))},zr.updateWith=function(e,t,n,i){return i="function"==typeof i?i:r,null==e?e:di(e,t,gi(n),i)},zr.values=Us,zr.valuesIn=function(e){return null==e?[]:Jt(e,js(e))},zr.without=sa,zr.words=Js,zr.wrap=function(e,t){return La(gi(t),e)},zr.xor=ca,zr.xorBy=la,zr.xorWith=ua,zr.zip=fa,zr.zipObject=function(e,t){return yi(e||[],t||[],tn)},zr.zipObjectDeep=function(e,t){return yi(e||[],t||[],ei)},zr.zipWith=ha,zr.entries=Bs,zr.entriesIn=zs,zr.extend=_s,zr.extendWith=xs,cc(zr,zr),zr.add=vc,zr.attempt=Qs,zr.camelCase=Hs,zr.capitalize=Ws,zr.ceil=gc,zr.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ys(n))==n?n:0),t!==r&&(t=(t=ys(t))==t?t:0),cn(ys(e),t,n)},zr.clone=function(e){return ln(e,4)},zr.cloneDeep=function(e){return ln(e,5)},zr.cloneDeepWith=function(e,t){return ln(e,5,t="function"==typeof t?t:r)},zr.cloneWith=function(e,t){return ln(e,4,t="function"==typeof t?t:r)},zr.conformsTo=function(e,t){return null==t||un(e,t,Ps(t))},zr.deburr=$s,zr.defaultTo=function(e,t){return null==e||e!=e?t:e},zr.divide=wc,zr.endsWith=function(e,t,n){e=gs(e),t=ui(t);var i=e.length,o=n=n===r?i:cn(ms(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},zr.eq=Ua,zr.escape=function(e){return(e=gs(e))&&Y.test(e)?e.replace(X,nr):e},zr.escapeRegExp=function(e){return(e=gs(e))&&ne.test(e)?e.replace(re,"\\$&"):e},zr.every=function(e,t,n){var i=Va(e)?Rt:mn;return n&&_o(e,t,n)&&(t=r),i(e,lo(t,3))},zr.find=ya,zr.findIndex=$o,zr.findKey=function(e,t){return Bt(e,lo(t,3),_n)},zr.findLast=va,zr.findLastIndex=Vo,zr.findLastKey=function(e,t){return Bt(e,lo(t,3),xn)},zr.floor=_c,zr.forEach=ga,zr.forEachRight=wa,zr.forIn=function(e,t){return null==e?e:gn(e,lo(t,3),js)},zr.forInRight=function(e,t){return null==e?e:wn(e,lo(t,3),js)},zr.forOwn=function(e,t){return e&&_n(e,lo(t,3))},zr.forOwnRight=function(e,t){return e&&xn(e,lo(t,3))},zr.get=Os,zr.gt=Ha,zr.gte=Wa,zr.has=function(e,t){return null!=e&&yo(e,t,Cn)},zr.hasIn=Cs,zr.head=Xo,zr.identity=ic,zr.includes=function(e,t,r,n){e=Xa(e)?e:Us(e),r=r&&!n?ms(r):0;var i=e.length;return r<0&&(r=vr(i+r,0)),cs(e)?r<=i&&e.indexOf(t,r)>-1:!!i&&Ut(e,t,r)>-1},zr.indexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var i=null==r?0:ms(r);return i<0&&(i=vr(n+i,0)),Ut(e,t,i)},zr.inRange=function(e,t,n){return t=ps(t),n===r?(n=t,t=0):n=ps(n),function(e,t,r){return e>=gr(t,r)&&e=-9007199254740991&&e<=h},zr.isSet=ss,zr.isString=cs,zr.isSymbol=ls,zr.isTypedArray=us,zr.isUndefined=function(e){return e===r},zr.isWeakMap=function(e){return rs(e)&&bo(e)==M},zr.isWeakSet=function(e){return rs(e)&&"[object WeakSet]"==En(e)},zr.join=function(e,t){return null==e?"":br.call(e,t)},zr.kebabCase=Vs,zr.last=Zo,zr.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ms(n))<0?vr(i+o,0):gr(o,i-1)),t==t?function(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,o):zt(e,Wt,o,!0)},zr.lowerCase=qs,zr.lowerFirst=Xs,zr.lt=fs,zr.lte=hs,zr.max=function(e){return e&&e.length?bn(e,ic,On):r},zr.maxBy=function(e,t){return e&&e.length?bn(e,lo(t,2),On):r},zr.mean=function(e){return $t(e,ic)},zr.meanBy=function(e,t){return $t(e,lo(t,2))},zr.min=function(e){return e&&e.length?bn(e,ic,Bn):r},zr.minBy=function(e,t){return e&&e.length?bn(e,lo(t,2),Bn):r},zr.stubArray=bc,zr.stubFalse=yc,zr.stubObject=function(){return{}},zr.stubString=function(){return""},zr.stubTrue=function(){return!0},zr.multiply=kc,zr.nth=function(e,t){return e&&e.length?$n(e,ms(t)):r},zr.noConflict=function(){return dt._===this&&(dt._=Ue),this},zr.noop=lc,zr.now=Oa,zr.pad=function(e,t,r){e=gs(e);var n=(t=ms(t))?fr(e):0;if(!t||n>=t)return e;var i=(t-n)/2;return Vi(yt(i),r)+e+Vi(mt(i),r)},zr.padEnd=function(e,t,r){e=gs(e);var n=(t=ms(t))?fr(e):0;return t&&nt){var i=e;e=t,t=i}if(n||e%1||t%1){var o=xr();return gr(e+o*(t-e+lt("1e-"+((o+"").length-1))),t)}return Yn(e,t)},zr.reduce=function(e,t,r){var n=Va(e)?Dt:Xt,i=arguments.length<3;return n(e,lo(t,4),r,i,dn)},zr.reduceRight=function(e,t,r){var n=Va(e)?Nt:Xt,i=arguments.length<3;return n(e,lo(t,4),r,i,pn)},zr.repeat=function(e,t,n){return t=(n?_o(e,t,n):t===r)?1:ms(t),Kn(gs(e),t)},zr.replace=function(){var e=arguments,t=gs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},zr.result=function(e,t,n){var i=-1,o=(t=wi(t,e)).length;for(o||(o=1,e=r);++ih)return[];var r=p,n=gr(e,p);t=lo(t),e-=p;for(var i=Yt(n,t);++r=a)return e;var c=n-fr(i);if(c<1)return i;var l=s?xi(s,0,c).join(""):e.slice(0,c);if(o===r)return l+i;if(s&&(c+=l.length-c),as(o)){if(e.slice(c).search(o)){var u,f=l;for(o.global||(o=Ce(o.source,gs(de.exec(o))+"g")),o.lastIndex=0;u=o.exec(f);)var h=u.index;l=l.slice(0,h===r?c:h)}}else if(e.indexOf(ui(o),c)!=c){var d=l.lastIndexOf(o);d>-1&&(l=l.slice(0,d))}return l+i},zr.unescape=function(e){return(e=gs(e))&&G.test(e)?e.replace(q,pr):e},zr.uniqueId=function(e){var t=++Fe;return gs(e)+t},zr.upperCase=Ks,zr.upperFirst=Zs,zr.each=ga,zr.eachRight=wa,zr.first=Xo,cc(zr,(xc={},_n(zr,(function(e,t){Ne.call(zr.prototype,t)||(xc[t]=e)})),xc),{chain:!1}),zr.VERSION="4.17.21",Ot(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){zr[e].placeholder=zr})),Ot(["drop","take"],(function(e,t){$r.prototype[e]=function(n){n=n===r?1:vr(ms(n),0);var i=this.__filtered__&&!t?new $r(this):this.clone();return i.__filtered__?i.__takeCount__=gr(n,i.__takeCount__):i.__views__.push({size:gr(n,p),type:e+(i.__dir__<0?"Right":"")}),i},$r.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),Ot(["filter","map","takeWhile"],(function(e,t){var r=t+1,n=1==r||3==r;$r.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:lo(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}})),Ot(["head","last"],(function(e,t){var r="take"+(t?"Right":"");$r.prototype[e]=function(){return this[r](1).value()[0]}})),Ot(["initial","tail"],(function(e,t){var r="drop"+(t?"":"Right");$r.prototype[e]=function(){return this.__filtered__?new $r(this):this[r](1)}})),$r.prototype.compact=function(){return this.filter(ic)},$r.prototype.find=function(e){return this.filter(e).head()},$r.prototype.findLast=function(e){return this.reverse().find(e)},$r.prototype.invokeMap=Zn((function(e,t){return"function"==typeof e?new $r(this):this.map((function(r){return Mn(r,e,t)}))})),$r.prototype.reject=function(e){return this.filter(Na(lo(e)))},$r.prototype.slice=function(e,t){e=ms(e);var n=this;return n.__filtered__&&(e>0||t<0)?new $r(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=ms(t))<0?n.dropRight(-t):n.take(t-e)),n)},$r.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},$r.prototype.toArray=function(){return this.take(p)},_n($r.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=zr[i?"take"+("last"==t?"Right":""):t],a=i||/^find/.test(t);o&&(zr.prototype[t]=function(){var t=this.__wrapped__,s=i?[1]:arguments,c=t instanceof $r,l=s[0],u=c||Va(t),f=function(e){var t=o.apply(zr,It([e],s));return i&&h?t[0]:t};u&&n&&"function"==typeof l&&1!=l.length&&(c=u=!1);var h=this.__chain__,d=!!this.__actions__.length,p=a&&!h,m=c&&!d;if(!a&&u){t=m?t:new $r(this);var b=e.apply(t,s);return b.__actions__.push({func:pa,args:[f],thisArg:r}),new Wr(b,h)}return p&&m?e.apply(this,s):(b=this.thru(f),p?i?b.value()[0]:b.value():b)})})),Ot(["pop","push","shift","sort","splice","unshift"],(function(e){var t=Me[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);zr.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var i=this.value();return t.apply(Va(i)?i:[],e)}return this[r]((function(r){return t.apply(Va(r)?r:[],e)}))}})),_n($r.prototype,(function(e,t){var r=zr[t];if(r){var n=r.name+"";Ne.call(Mr,n)||(Mr[n]=[]),Mr[n].push({name:t,func:r})}})),Mr[Ui(r,2).name]=[{name:"wrapper",func:r}],$r.prototype.clone=function(){var e=new $r(this.__wrapped__);return e.__actions__=Ai(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Ai(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Ai(this.__views__),e},$r.prototype.reverse=function(){if(this.__filtered__){var e=new $r(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},$r.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,r=Va(e),n=t<0,i=r?e.length:0,o=function(e,t,r){var n=-1,i=r.length;for(;++n=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},zr.prototype.plant=function(e){for(var t,n=this;n instanceof Hr;){var i=zo(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},zr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof $r){var t=e;return this.__actions__.length&&(t=new $r(this)),(t=t.reverse()).__actions__.push({func:pa,args:[ta],thisArg:r}),new Wr(t,this.__chain__)}return this.thru(ta)},zr.prototype.toJSON=zr.prototype.valueOf=zr.prototype.value=function(){return mi(this.__wrapped__,this.__actions__)},zr.prototype.first=zr.prototype.head,et&&(zr.prototype[et]=function(){return this}),zr}();mt?((mt.exports=mr)._=mr,pt._=mr):dt._=mr}).call(yn)}(ii,ii.exports);var oi=ii.exports;function ai(e){for(var t=(e=e.replace("#","")).match(/../g),r=0;r<3;r++)t[r]=parseInt(t[r],16);return t}function si(e,t,r){for(var n=[e.toString(16),t.toString(16),r.toString(16)],i=0;i<3;i++)1==n[i].length&&(n[i]="0"+n[i]);return"#"+n.join("")}var ci={exports:{}};!function(e,t){e.exports=function(){var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",o="minute",a="hour",s="day",c="week",l="month",u="quarter",f="year",h="date",d="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},y=function(e,t,r){var n=String(e);return!n||n.length>=t?e:""+Array(t+1-n.length).join(r)+e},v={s:y,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),i=r%60;return(t<=0?"+":"-")+y(n,2,"0")+":"+y(i,2,"0")},m:function e(t,r){if(t.date()1)return e(a[0])}else{var s=t.name;w[s]=t,i=s}return!n&&i&&(g=i),i||!n&&g},k=function(e,t){if(_(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new T(r)},S=v;S.l=x,S.i=_,S.w=function(e,t){return k(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var T=function(){function b(e){this.$L=x(e.locale,null,!0),this.parse(e)}var y=b.prototype;return y.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(S.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var n=t.match(p);if(n){var i=n[2]-1||0,o=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,o)}}return new Date(t)}(e),this.$x=e.x||{},this.init()},y.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},y.$utils=function(){return S},y.isValid=function(){return!(this.$d.toString()===d)},y.isSame=function(e,t){var r=k(e);return this.startOf(t)<=r&&r<=this.endOf(t)},y.isAfter=function(e,t){return k(e)>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r+1)+(e.charCodeAt(2*r)<<8));return t.join("")}var gi,wi=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1);return 255==t&&254==r?function(e){for(var t=[],r=0;r>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r)+(e.charCodeAt(2*r+1)<<8));return t.join("")}(e.slice(2)):254==t&&255==r?vi(e.slice(2)):65279==t?e.slice(1):e},_i=function(e){return String.fromCharCode(e)},xi=function(e){return String.fromCharCode(e)},ki="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Si(e){for(var t="",r=0,n=0,i=0,o=0,a=0,s=0,c=0,l=0;l>2,a=(3&r)<<4|(n=e.charCodeAt(l++))>>4,s=(15&n)<<2|(i=e.charCodeAt(l++))>>6,c=63&i,isNaN(n)?s=c=64:isNaN(i)&&(c=64),t+=ki.charAt(o)+ki.charAt(a)+ki.charAt(s)+ki.charAt(c);return t}function Ti(e){var t="",r=0,n=0,i=0,o=0,a=0,s=0;e=e.replace(/[^\w\+\/\=]/g,"");for(var c=0;c>4,t+=String.fromCharCode(r),n=(15&o)<<4|(a=ki.indexOf(e.charAt(c++)))>>2,64!==a&&(t+=String.fromCharCode(n)),i=(3&a)<<6|(s=ki.indexOf(e.charAt(c++))),64!==s&&(t+=String.fromCharCode(i));return t}var Ei=function(){return"undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node}(),Oi=function(){if("undefined"!=typeof Buffer){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch(t){e=!0}return e?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer)}return function(){}}();function Ci(e){return Ei?Buffer.alloc?Buffer.alloc(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}function Ri(e){return Ei?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}var Ai=function(e){return Ei?Oi(e,"binary"):e.split("").map((function(e){return 255&e.charCodeAt(0)}))};function Mi(e){if("undefined"==typeof ArrayBuffer)return Ai(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=255&e.charCodeAt(n);return t}function Pi(e){if(Array.isArray(e))return e.map((function(e){return String.fromCharCode(e)})).join("");for(var t=[],r=0;r=0;)t+=e.charAt(r--);return t}function Li(e,t){var r=""+e;return r.length>=t?r:Jo("0",t-r.length)+r}function Bi(e,t){var r=""+e;return r.length>=t?r:Jo(" ",t-r.length)+r}function zi(e,t){var r=""+e;return r.length>=t?r:r+Jo(" ",t-r.length)}var Ui=Math.pow(2,32);function Hi(e,t){return e>Ui||e<-Ui?function(e,t){var r=""+Math.round(e);return r.length>=t?r:Jo("0",t-r.length)+r}(e,t):function(e,t){var r=""+e;return r.length>=t?r:Jo("0",t-r.length)+r}(Math.round(e),t)}function Wi(e,t){return t=t||0,e.length>=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var $i=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],Vi=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];var qi={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},Xi={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},Gi={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function Yi(e,t,r){for(var n=e<0?-1:1,i=e*n,o=0,a=1,s=0,c=1,l=0,u=0,f=Math.floor(i);lt&&(l>t?(u=c,s=o):(u=l,s=a)),!r)return[0,n*s,u];var h=Math.floor(n*s/u);return[h,n*s-h*u,u]}function Ki(e,t,r){if(e>2958465||e<0)return null;var n=0|e,i=Math.floor(86400*(e-n)),o=0,a=[],s={D:n,T:i,u:86400*(e-n)-i,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(s.u)<1e-6&&(s.u=0),t&&t.date1904&&(n+=1462),s.u>.9999&&(s.u=0,86400==++i&&(s.T=i=0,++n,++s.D)),60===n)a=r?[1317,10,29]:[1900,2,29],o=3;else if(0===n)a=r?[1317,8,29]:[1900,1,0],o=6;else{n>60&&--n;var c=new Date(1900,0,1);c.setDate(c.getDate()+n-1),a=[c.getFullYear(),c.getMonth()+1,c.getDate()],o=c.getDay(),n<60&&(o=(o+6)%7),r&&(o=function(e,t){t[0]-=581;var r=e.getDay();e<60&&(r=(r+6)%7);return r}(c,a))}return s.y=a[0],s.m=a[1],s.d=a[2],s.S=i%60,i=Math.floor(i/60),s.M=i%60,i=Math.floor(i/60),s.H=i,s.q=o,s}var Zi=new Date(1899,11,31,0,0,0),Ji=Zi.getTime(),Qi=new Date(1900,2,1,0,0,0);function eo(e,t){var r=e.getTime();return t?r-=1262304e5:e>=Qi&&(r+=864e5),(r-(Ji+6e4*(e.getTimezoneOffset()-Zi.getTimezoneOffset())))/864e5}function to(e){return-1==e.indexOf(".")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function ro(e){var t,r=Math.floor(Math.log(Math.abs(e))*Math.LOG10E);return t=r>=-4&&r<=-1?e.toPrecision(10+r):Math.abs(r)<=9?function(e){var t=e<0?12:11,r=to(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10)).length<=t?r:e.toExponential(5)}(e):10===r?e.toFixed(10).substr(0,12):function(e){var t=to(e.toFixed(11));return t.length>(e<0?12:11)||"0"===t||"-0"===t?e.toPrecision(6):t}(e),to(function(e){return-1==e.indexOf("E")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}(t.toUpperCase()))}function no(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):ro(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return To(14,eo(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function io(e,t,r,n){var i,o="",a=0,s=0,c=r.y,l=0;switch(e){case 98:c=r.y+543;case 121:switch(t.length){case 1:case 2:i=c%100,l=2;break;default:i=c%1e4,l=4}break;case 109:switch(t.length){case 1:case 2:i=r.m,l=t.length;break;case 3:return Vi[r.m-1][1];case 5:return Vi[r.m-1][0];default:return Vi[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:i=r.d,l=t.length;break;case 3:return $i[r.q][0];default:return $i[r.q][1]}break;case 104:switch(t.length){case 1:case 2:i=1+(r.H+11)%12,l=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:i=r.H,l=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:i=r.M,l=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(s=n>=2?3===n?1e3:100:1===n?10:1,(a=Math.round(s*(r.S+r.u)))>=60*s&&(a=0),"s"===t?0===a?"0":""+a/s:(o=Li(a,2+n),"ss"===t?o.substr(0,2):"."+o.substr(2,t.length-1))):Li(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":i=24*r.D+r.H;break;case"[m]":case"[mm]":i=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":i=60*(60*(24*r.D+r.H)+r.M)+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}l=3===t.length?1:2;break;case 101:i=c,l=1}return l>0?Li(i,l):""}function oo(e){if(e.length<=3)return e;for(var t=e.length%3,r=e.substr(0,t);t!=e.length;t+=3)r+=(r.length>0?",":"")+e.substr(t,3);return r}var ao=/%/g;function so(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+so(e,-t);var i=e.indexOf(".");-1===i&&(i=e.indexOf("E"));var o=Math.floor(Math.log(t)*Math.LOG10E)%i;if(o<0&&(o+=i),-1===(r=(t/Math.pow(10,o)).toPrecision(n+1+(i+o)%i)).indexOf("e")){var a=Math.floor(Math.log(t)*Math.LOG10E);for(-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(a-r.length+o):r+="E+"+(a-o);"0."===r.substr(0,2);)r=(r=r.charAt(0)+r.substr(2,i)+"."+r.substr(2+i)).replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(i+o)%i)+"."+n.substr(o)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var co=/# (\?+)( ?)\/( ?)(\d+)/;var lo=/^#*0*\.([0#]+)/,uo=/\).*[0#]/,fo=/\(###\) ###\\?-####/;function ho(e){for(var t,r="",n=0;n!=e.length;++n)switch(t=e.charCodeAt(n)){case 35:break;case 63:r+=" ";break;case 48:r+="0";break;default:r+=String.fromCharCode(t)}return r}function po(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function mo(e,t){var r=e-Math.floor(e),n=Math.pow(10,t);return t<(""+Math.round(r*n)).length?0:Math.round(r*n)}function bo(e,t,r){if(40===e.charCodeAt(0)&&!t.match(uo)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?bo("n",n,r):"("+bo("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return go(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(ao,""),i=t.length-n.length;return go(e,n,r*Math.pow(10,2*i))+Jo("%",i)}(e,t,r);if(-1!==t.indexOf("E"))return so(t,r);if(36===t.charCodeAt(0))return"$"+bo(e,t.substr(" "==t.charAt(1)?2:1),r);var i,o,a,s,c=Math.abs(r),l=r<0?"-":"";if(t.match(/^00+$/))return l+Hi(c,t.length);if(t.match(/^[#?]+$/))return"0"===(i=Hi(r,0))&&(i=""),i.length>t.length?i:ho(t.substr(0,t.length-i.length))+i;if(o=t.match(co))return function(e,t,r){var n=parseInt(e[4],10),i=Math.round(t*n),o=Math.floor(i/n),a=i-o*n,s=n;return r+(0===o?"":""+o)+" "+(0===a?Jo(" ",e[1].length+1+e[4].length):Bi(a,e[1].length)+e[2]+"/"+e[3]+Li(s,e[4].length))}(o,c,l);if(t.match(/^#+0+$/))return l+Hi(c,t.length-t.indexOf("0"));if(o=t.match(lo))return i=po(r,o[1].length).replace(/^([^\.]+)$/,"$1."+ho(o[1])).replace(/\.$/,"."+ho(o[1])).replace(/\.(\d*)$/,(function(e,t){return"."+t+Jo("0",ho(o[1]).length-t.length)})),-1!==t.indexOf("0.")?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),o=t.match(/^(0*)\.(#*)$/))return l+po(c,o[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,o[1].length?"0.":".");if(o=t.match(/^#{1,3},##0(\.?)$/))return l+oo(Hi(c,0));if(o=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+bo(e,t,-r):oo(""+(Math.floor(r)+function(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(r,o[1].length)))+"."+Li(mo(r,o[1].length),o[1].length);if(o=t.match(/^#,#*,#0/))return bo(e,t.replace(/^#,#*,/,""),r);if(o=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=Fi(bo(e,t.replace(/[\\-]/g,""),r)),a=0,Fi(Fi(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return a-2147483648?""+(e>=0?0|e:e-1|0):""+Math.floor(e)}(r)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,(function(e){return"00,"+(e.length<3?Li(0,3-e.length):"")+e}))+"."+Li(a,o[1].length);switch(t){case"###,##0.00":return bo(e,"#,##0.00",r);case"###,###":case"##,###":case"#,###":var d=oo(Hi(c,0));return"0"!==d?l+d:"";case"###,###.00":return bo(e,"###,##0.00",r).replace(/^0\./,".");case"#,###.00":return bo(e,"#,##0.00",r).replace(/^0\./,".")}throw new Error("unsupported format |"+t+"|")}function yo(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+yo(e,-t);var i=e.indexOf(".");-1===i&&(i=e.indexOf("E"));var o=Math.floor(Math.log(t)*Math.LOG10E)%i;if(o<0&&(o+=i),!(r=(t/Math.pow(10,o)).toPrecision(n+1+(i+o)%i)).match(/[Ee]/)){var a=Math.floor(Math.log(t)*Math.LOG10E);-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(a-r.length+o):r+="E+"+(a-o),r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(i+o)%i)+"."+n.substr(o)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}function vo(e,t,r){if(40===e.charCodeAt(0)&&!t.match(uo)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?vo("n",n,r):"("+vo("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return go(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(ao,""),i=t.length-n.length;return go(e,n,r*Math.pow(10,2*i))+Jo("%",i)}(e,t,r);if(-1!==t.indexOf("E"))return yo(t,r);if(36===t.charCodeAt(0))return"$"+vo(e,t.substr(" "==t.charAt(1)?2:1),r);var i,o,a,s,c=Math.abs(r),l=r<0?"-":"";if(t.match(/^00+$/))return l+Li(c,t.length);if(t.match(/^[#?]+$/))return i=""+r,0===r&&(i=""),i.length>t.length?i:ho(t.substr(0,t.length-i.length))+i;if(o=t.match(co))return function(e,t,r){return r+(0===t?"":""+t)+Jo(" ",e[1].length+2+e[4].length)}(o,c,l);if(t.match(/^#+0+$/))return l+Li(c,t.length-t.indexOf("0"));if(o=t.match(lo))return i=(i=(""+r).replace(/^([^\.]+)$/,"$1."+ho(o[1])).replace(/\.$/,"."+ho(o[1]))).replace(/\.(\d*)$/,(function(e,t){return"."+t+Jo("0",ho(o[1]).length-t.length)})),-1!==t.indexOf("0.")?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),o=t.match(/^(0*)\.(#*)$/))return l+(""+c).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,o[1].length?"0.":".");if(o=t.match(/^#{1,3},##0(\.?)$/))return l+oo(""+c);if(o=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+vo(e,t,-r):oo(""+r)+"."+Jo("0",o[1].length);if(o=t.match(/^#,#*,#0/))return vo(e,t.replace(/^#,#*,/,""),r);if(o=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=Fi(vo(e,t.replace(/[\\-]/g,""),r)),a=0,Fi(Fi(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return a-1||"\\"==r&&"-"==e.charAt(t+1)&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t," "!=e.charAt(t)&&"*"!=e.charAt(t)||++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;default:++t}return!1}var xo=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function ko(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0}return!1}function So(e,t){var r=function(e){for(var t=[],r=!1,n=0,i=0;n-1&&--n,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if("number"!=typeof t)return[4,4===r.length||i>-1?r[r.length-1]:"@"];switch(r.length){case 1:r=i>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=i>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=i>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"]}var o=t>0?r[0]:t<0?r[1]:r[2];if(-1===r[0].indexOf("[")&&-1===r[1].indexOf("["))return[n,o];if(null!=r[0].match(/\[[=<>]/)||null!=r[1].match(/\[[=<>]/)){var a=r[0].match(xo),s=r[1].match(xo);return ko(t,a)?[n,r[0]]:ko(t,s)?[n,r[1]]:[n,r[null!=a&&null!=s?2:1]]}return[n,o]}function To(e,t,r){null==r&&(r={});var n="";switch(typeof e){case"string":n="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":null==(n=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:qi)[e])&&(n=r.table&&r.table[Xi[e]]||qi[Xi[e]]),null==n&&(n=Gi[e]||"General")}if(Wi(n,0))return no(t,r);t instanceof Date&&(t=eo(t,r.date1904));var i=So(n,t);if(Wi(i[1]))return no(t,r);if(!0===t)t="TRUE";else if(!1===t)t="FALSE";else if(""===t||null==t)return"";return function(e,t,r,n){for(var i,o,a,s=[],c="",l=0,u="",f="t",h="H";l=12?"P":"A"),m.t="T",h="h",l+=3):"AM/PM"===e.substr(l,5).toUpperCase()?(null!=i&&(m.v=i.H>=12?"PM":"AM"),m.t="T",l+=5,h="h"):"上午/下午"===e.substr(l,5).toUpperCase()?(null!=i&&(m.v=i.H>=12?"下午":"上午"),m.t="T",l+=5,h="h"):(m.t="t",++l),null==i&&"T"===m.t)return"";s[s.length]=m,f=u;break;case"[":for(c=u;"]"!==e.charAt(l++)&&l-1&&(c=(c.match(/\$([^-\[\]]*)/)||[])[1]||"$",_o(e)||(s[s.length]={t:"t",v:c}));break;case".":if(null!=i){for(c=u;++l-1;)c+=u;s[s.length]={t:"n",v:c};break;case"?":for(c=u;e.charAt(++l)===u;)c+=u;s[s.length]={t:u,v:c},f=u;break;case"*":++l," "!=e.charAt(l)&&"*"!=e.charAt(l)||++l;break;case"(":case")":s[s.length]={t:1===n?"t":u,v:u},++l;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(c=u;l-1;)c+=e.charAt(l);s[s.length]={t:"D",v:c};break;case" ":s[s.length]={t:u,v:u},++l;break;case"$":s[s.length]={t:"t",v:"$"},++l;break;default:if(-1===",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(u))throw new Error("unrecognized character "+u+" in "+e);s[s.length]={t:"t",v:u},++l}var b,y=0,v=0;for(l=s.length-1,f="t";l>=0;--l)switch(s[l].t){case"h":case"H":s[l].t=h,f="h",y<1&&(y=1);break;case"s":(b=s[l].v.match(/\.0+$/))&&(v=Math.max(v,b[0].length-1)),y<3&&(y=3);case"d":case"y":case"M":case"e":f=s[l].t;break;case"m":"s"===f&&(s[l].t="M",y<2&&(y=2));break;case"X":break;case"Z":y<1&&s[l].v.match(/[Hh]/)&&(y=1),y<2&&s[l].v.match(/[Mm]/)&&(y=2),y<3&&s[l].v.match(/[Ss]/)&&(y=3)}switch(y){case 0:break;case 1:i.u>=.5&&(i.u=0,++i.S),i.S>=60&&(i.S=0,++i.M),i.M>=60&&(i.M=0,++i.H);break;case 2:i.u>=.5&&(i.u=0,++i.S),i.S>=60&&(i.S=0,++i.M)}var g,w="";for(l=0;l0){40==w.charCodeAt(0)?(_=t<0&&45===w.charCodeAt(0)?-t:t,x=go("n",w,_)):(x=go("n",w,_=t<0&&n>1?-t:t),_<0&&s[0]&&"t"==s[0].t&&(x=x.substr(1),s[0].v="-"+s[0].v)),g=x.length-1;var S=s.length;for(l=0;l-1){S=l;break}var T=s.length;if(S===s.length&&-1===x.indexOf("E")){for(l=s.length-1;l>=0;--l)null!=s[l]&&-1!=="n?".indexOf(s[l].t)&&(g>=s[l].v.length-1?(g-=s[l].v.length,s[l].v=x.substr(g+1,s[l].v.length)):g<0?s[l].v="":(s[l].v=x.substr(0,g+1),g=-1),s[l].t="t",T=l);g>=0&&T=0;--l)if(null!=s[l]&&-1!=="n?".indexOf(s[l].t)){for(o=s[l].v.indexOf(".")>-1&&l===S?s[l].v.indexOf(".")-1:s[l].v.length-1,k=s[l].v.substr(o+1);o>=0;--o)g>=0&&("0"===s[l].v.charAt(o)||"#"===s[l].v.charAt(o))&&(k=x.charAt(g--)+k);s[l].v=k,s[l].t="t",T=l}for(g>=0&&T-1&&l===S?s[l].v.indexOf(".")+1:0,k=s[l].v.substr(0,o);o-1&&(_=n>1&&t<0&&l>0&&"-"===s[l-1].v?-t:t,s[l].v=go(s[l].t,s[l].v,_),s[l].t="t");var E="";for(l=0;l!==s.length;++l)null!=s[l]&&(E+=s[l].v);return E}(i[1],t,r,i[0])}function Eo(e,t){if("number"!=typeof t){t=+t||-1;for(var r=0;r<392;++r)if(null!=qi[r]){if(qi[r]==e){t=r;break}}else t<0&&(t=r);t<0&&(t=391)}return qi[t]=e,t}function Oo(e){for(var t=0;392!=t;++t)void 0!==e[t]&&Eo(e[t],t)}function Co(){qi=function(e){return e||(e={}),e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',e}()}var Ro={5:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',23:"General",24:"General",25:"General",26:"General",27:"m/d/yy",28:"m/d/yy",29:"m/d/yy",30:"m/d/yy",31:"m/d/yy",32:"h:mm:ss",33:"h:mm:ss",34:"h:mm:ss",35:"h:mm:ss",36:"m/d/yy",41:'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',50:"m/d/yy",51:"m/d/yy",52:"m/d/yy",53:"m/d/yy",54:"m/d/yy",55:"m/d/yy",56:"m/d/yy",57:"m/d/yy",58:"m/d/yy",59:"0",60:"0.00",61:"#,##0",62:"#,##0.00",63:'"$"#,##0_);\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',67:"0%",68:"0.00%",69:"# ?/?",70:"# ??/??",71:"m/d/yy",72:"m/d/yy",73:"d-mmm-yy",74:"d-mmm",75:"mmm-yy",76:"h:mm",77:"h:mm:ss",78:"m/d/yy h:mm",79:"mm:ss",80:"[h]:mm:ss",81:"mmss.0"},Ao=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;var Mo=function(){var e={};e.version="1.2.0";var t=function(){for(var e=0,t=new Array(256),r=0;256!=r;++r)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=r)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[r]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}();var r=function(e){var t=0,r=0,n=0,i="undefined"!=typeof Int32Array?new Int32Array(4096):new Array(4096);for(n=0;256!=n;++n)i[n]=e[n];for(n=0;256!=n;++n)for(r=e[n],t=256+n;t<4096;t+=256)r=i[t]=r>>>8^e[255&r];var o=[];for(n=1;16!=n;++n)o[n-1]="undefined"!=typeof Int32Array?i.subarray(256*n,256*n+256):i.slice(256*n,256*n+256);return o}(t),n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],c=r[5],l=r[6],u=r[7],f=r[8],h=r[9],d=r[10],p=r[11],m=r[12],b=r[13],y=r[14];return e.table=t,e.bstr=function(e,r){for(var n=-1^r,i=0,o=e.length;i>>8^t[255&(n^e.charCodeAt(i++))];return~n},e.buf=function(e,r){for(var v=-1^r,g=e.length-15,w=0;w>8&255]^m[e[w++]^v>>16&255]^p[e[w++]^v>>>24]^d[e[w++]]^h[e[w++]]^f[e[w++]]^u[e[w++]]^l[e[w++]]^c[e[w++]]^s[e[w++]]^a[e[w++]]^o[e[w++]]^i[e[w++]]^n[e[w++]]^t[e[w++]];for(g+=15;w>>8^t[255&(v^e[w++])];return~v},e.str=function(e,r){for(var n=-1^r,i=0,o=e.length,a=0,s=0;i>>8^t[255&(n^a)]:a<2048?n=(n=n>>>8^t[255&(n^(192|a>>6&31))])>>>8^t[255&(n^(128|63&a))]:a>=55296&&a<57344?(a=64+(1023&a),s=1023&e.charCodeAt(i++),n=(n=(n=(n=n>>>8^t[255&(n^(240|a>>8&7))])>>>8^t[255&(n^(128|a>>2&63))])>>>8^t[255&(n^(128|s>>6&15|(3&a)<<4))])>>>8^t[255&(n^(128|63&s))]):n=(n=(n=n>>>8^t[255&(n^(224|a>>12&15))])>>>8^t[255&(n^(128|a>>6&63))])>>>8^t[255&(n^(128|63&a))];return~n},e}(),Po=function(){var e,t={};function r(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:r(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function n(e){if("/"==e.charAt(e.length-1))return n(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function i(e,t){"string"==typeof t&&(t=new Date(t));var r=t.getHours();r=(r=r<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,r);var n=t.getFullYear()-1980;n=(n=n<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,n)}function o(e){Ds(e,0);for(var t={},r=0;e.l<=e.length-4;){var n=e.read_shift(2),i=e.read_shift(2),o=e.l+i,a={};if(21589===n)1&(r=e.read_shift(1))&&(a.mtime=e.read_shift(4)),i>5&&(2&r&&(a.atime=e.read_shift(4)),4&r&&(a.ctime=e.read_shift(4))),a.mtime&&(a.mt=new Date(1e3*a.mtime));e.l=o,t[n]=a}return t}function a(){return e||(e={})}function s(e,t){if(80==e[0]&&75==e[1])return re(e,t);if(109==(32|e[0])&&105==(32|e[1]))return function(e,t){if("mime-version:"!=x(e.slice(0,13)).toLowerCase())throw new Error("Unsupported MAD header");var r=t&&t.root||"",n=(Ei&&Buffer.isBuffer(e)?e.toString("binary"):x(e)).split("\r\n"),i=0,o="";for(i=0;i0&&(r=(r=r.slice(0,r.length-1)).slice(0,r.lastIndexOf("/")+1),o.slice(0,r.length)!=r););var a=(n[1]||"").match(/boundary="(.*?)"/);if(!a)throw new Error("MAD cannot find boundary");var s="--"+(a[1]||""),c=[],l=[],u={FileIndex:c,FullPaths:l};h(u);var f,d=0;for(i=0;i=i&&(h-=i),!a[h]){c=[];var p=[];for(f=h;f>=0;){p[f]=!0,a[f]=!0,s[s.length]=f,c.push(e[f]);var m=r[Math.floor(4*f/n)];if(n<4+(d=4*f&l))throw new Error("FAT boundary crossed: "+f+" 4 "+n);if(!e[m])break;if(p[f=Os(e[m],d)])break}o[h]={nodes:s,data:ns([c])}}return o}(S,o,p,d);T[o].name="!Directory",n>0&&a!==y&&(T[a].name="!MiniFAT"),T[p[0]].name="!FAT",T.fat_addrs=p,T.ssz=d;var E=[],O=[],C=[];!function(e,t,r,n,i,o,a,s){for(var l,h=0,d=n.length?2:0,p=t[e].data,m=0,b=0;m0&&h!==y&&(t[h].name="!StreamData")):g.size>=4096?(g.storage="fat",void 0===t[g.start]&&(t[g.start]=u(r,g.start,t.fat_addrs,t.ssz)),t[g.start].name=g.name,g.content=t[g.start].data.slice(0,g.size)):(g.storage="minifat",g.size<0?g.size=0:h!==y&&g.start!==y&&t[h]&&(g.content=c(g,t[h].data,(t[s]||{}).data))),g.content&&Ds(g.content,0),o[l]=g,a.push(g)}}(o,T,S,E,n,{},O,a),function(e,t,r){for(var n=0,i=0,o=0,a=0,s=0,c=r.length,l=[],u=[];n0&&a>=0;)o.push(t.slice(a*b,a*b+b)),i-=b,a=Os(r,4*a);return 0===o.length?Fs(0):Ii(o).slice(0,e.size)}function l(e,t,r,n,i){var o=y;if(e===y){if(0!==t)throw new Error("DIFAT chain shorter than expected")}else if(-1!==e){var a=r[e],s=(n>>>2)-1;if(!a)return;for(var c=0;c=0;){i[c]=!0,o[o.length]=c,a.push(e[c]);var u=r[Math.floor(4*c/n)];if(n<4+(l=4*c&s))throw new Error("FAT boundary crossed: "+c+" 4 "+n);if(!e[u])break;c=Os(e[u],l)}return{nodes:o,data:ns([a])}}function f(e,t){return new Date(1e3*(Es(e,t+4)/1e7*Math.pow(2,32)+Es(e,t)/1e7-11644473600))}function h(e,t){var r=t||{},n=r.root||"Root Entry";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");0===e.FullPaths.length&&(e.FullPaths[0]=n+"/",e.FileIndex[0]={name:n,type:5}),r.CLSID&&(e.FileIndex[0].clsid=r.CLSID),function(e){var t="Sh33tJ5";if(Po.find(e,"/"+t))return;var r=Fs(4);r[0]=55,r[1]=r[3]=50,r[2]=54,e.FileIndex.push({name:t,type:2,content:r,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),d(e)}(e)}function d(e,t){h(e);for(var i=!1,o=!1,a=e.FullPaths.length-1;a>=0;--a){var s=e.FileIndex[a];switch(s.type){case 0:o?i=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:o=!0,isNaN(s.R*s.L*s.C)&&(i=!0),s.R>-1&&s.L>-1&&s.R==s.L&&(i=!0);break;default:i=!0}}if(i||t){var c=new Date(1987,1,19),l=0,u=Object.create?Object.create(null):{},f=[];for(a=0;a1?1:-1,p.size=0,p.type=5;else if("/"==m.slice(-1)){for(l=a+1;l=f.length?-1:l,l=a+1;l=f.length?-1:l,p.type=1}else r(e.FullPaths[a+1]||"")==r(m)&&(p.R=a+1),p.type=2}}}function p(e,t){var r=t||{};if("mad"==r.fileType)return function(e,t){for(var r=t||{},n=r.boundary||"SheetJS",i=["MIME-Version: 1.0",'Content-Type: multipart/related; boundary="'+(n="------="+n).slice(2)+'"',"","",""],o=e.FullPaths[0],a=o,s=e.FileIndex[0],c=1;c=32&&d<128&&++f;var m=f>=4*h/5;i.push(n),i.push("Content-Location: "+(r.root||"file:///C:/SheetJS/")+a),i.push("Content-Transfer-Encoding: "+(m?"quoted-printable":"base64")),i.push("Content-Type: "+oe(s,a)),i.push(""),i.push(m?se(u):ae(u))}return i.push(n+"--\r\n"),i.join("\r\n")}(e,r);if(d(e),"zip"===r.fileType)return function(e,t){var r=t||{},n=[],o=[],a=Fs(1),s=r.compression?8:0,c=0,l=0,u=0,f=0,h=0,d=e.FullPaths[0],p=d,m=e.FileIndex[0],b=[],y=0;for(l=1;l0&&(o<4096?t+=o+63>>6:r+=o+511>>9)}}for(var a=e.FullPaths.length+3>>2,s=t+127>>7,c=(t+7>>3)+r+a+s,l=c+127>>7,u=l<=109?0:Math.ceil((l-109)/127);c+l+u+127>>7>l;)u=++l<=109?0:Math.ceil((l-109)/127);var f=[1,u,l,s,a,r,t,0];return e.FileIndex[0].size=t<<6,f[7]=(e.FileIndex[0].start=f[0]+f[1]+f[2]+f[3]+f[4]+f[5])+(f[6]+7>>3),f}(e),o=Fs(n[7]<<9),a=0,s=0;for(a=0;a<8;++a)o.write_shift(1,g[a]);for(a=0;a<8;++a)o.write_shift(2,0);for(o.write_shift(2,62),o.write_shift(2,3),o.write_shift(2,65534),o.write_shift(2,9),o.write_shift(2,6),a=0;a<3;++a)o.write_shift(2,0);for(o.write_shift(4,0),o.write_shift(4,n[2]),o.write_shift(4,n[0]+n[1]+n[2]+n[3]-1),o.write_shift(4,0),o.write_shift(4,4096),o.write_shift(4,n[3]?n[0]+n[1]+n[2]-1:y),o.write_shift(4,n[3]),o.write_shift(-4,n[1]?n[0]-1:y),o.write_shift(4,n[1]),a=0;a<109;++a)o.write_shift(-4,a>9)));for(c(n[6]+7>>3);511&o.l;)o.write_shift(-4,_.ENDOFCHAIN);for(s=a=0,l=0;l=4096||(f.start=s,c(u+63>>6)));for(;511&o.l;)o.write_shift(-4,_.ENDOFCHAIN);for(a=0;a=4096)if(o.l=f.start+1<<9,Ei&&Buffer.isBuffer(f.content))f.content.copy(o,o.l,0,f.size),o.l+=f.size+511&-512;else{for(l=0;l0&&f.size<4096)if(Ei&&Buffer.isBuffer(f.content))f.content.copy(o,o.l,0,f.size),o.l+=f.size+63&-64;else{for(l=0;l>16|t>>8|t)}for(var C="undefined"!=typeof Uint8Array,R=C?new Uint8Array(256):[],A=0;A<256;++A)R[A]=O(A);function M(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=6?0:e[n+1]<<8))>>>r&3}function P(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=5?0:e[n+1]<<8))>>>r&7}function j(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=3?0:e[n+1]<<8))>>>r&31}function I(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=1?0:e[n+1]<<8))>>>r&127}function D(e,t,r){var n=7&t,i=t>>>3,o=(1<>>n;return r<8-n?a&o:(a|=e[i+1]<<8-n,r<16-n?a&o:(a|=e[i+2]<<16-n,r<24-n?a&o:(a|=e[i+3]<<24-n)&o))}function N(e,t,r){var n=7&t,i=t>>>3;return n<=5?e[i]|=(7&r)<>8-n),t+3}function F(e,t,r){return r=(1&r)<<(7&t),e[t>>>3]|=r,t+1}function L(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=r,t+8}function B(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=255&r,e[n+2]=r>>>8,t+16}function z(e,t){var r=e.length,n=2*r>t?2*r:t+5,i=0;if(r>=t)return e;if(Ei){var o=Ri(n);if(e.copy)e.copy(o);else for(;i>>8-h:(d=d<<8|R[f>>8&255],h<=16?d>>>16-h:(d=d<<8|R[f>>16&255])>>>24-h))>>n-p,a=(1<=0;--a)t[s|a<0;)t[t.l++]=e[r++]}return t.l}(t,r):function(t,r){for(var i=0,o=0,a=C?new Uint16Array(32768):[];o0;)r[r.l++]=t[o++];i=8*r.l}else{i=N(r,i,+!(o+s!=t.length)+2);for(var c=0;s-- >0;){var l=t[o],u=-1,f=0;if((u=a[c=32767&(c<<5^l)])&&((u|=-32768&o)>o&&(u-=32768),u2){(l=n[f])<=22?i=L(r,i,R[l+1]>>1)-1:(L(r,i,3),L(r,i+=5,R[l-23]>>5),i+=3);var h=l<8?0:l-4>>2;h>0&&(B(r,i,f-T[l]),i+=h),l=e[o-u],i=L(r,i,R[l]>>3),i-=3;var d=l<4?0:l-2>>1;d>0&&(B(r,i,o-u-E[l]),i+=d);for(var p=0;p>>3;return(e[n]|(r<=4?0:e[n+1]<<8))>>>r&15}(e,t+=5)+4;t+=4;for(var o=0,a=C?new Uint8Array(19):U(19),s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c=1,l=C?new Uint8Array(8):U(8),u=C?new Uint8Array(8):U(8),f=a.length,h=0;h>8-p;for(var m=(1<<7-p)-1;m>=0;--m)K[d|m<>>=3){case 16:for(o=3+M(e,t),t+=2,d=b[b.length-1];o-- >0;)b.push(d);break;case 17:for(o=3+P(e,t),t+=3;o-- >0;)b.push(0);break;case 18:for(o=11+I(e,t),t+=7;o-- >0;)b.push(0);break;default:b.push(d),c>>0,s=0,c=0;0==(1&n);)if(n=P(e,r),r+=3,n>>>1!=0)for(n>>1==1?(s=9,c=5):(r=Q(e,r),s=Z,c=J);;){!t&&a>>1==1?W[l]:G[l];if(r+=15&u,0==((u>>>=4)>>>8&255))i[o++]=u;else{if(256==u)break;var f=(u-=257)<8?0:u-4>>2;f>5&&(f=0);var h=o+T[u];f>0&&(h+=D(e,r,f),r+=f),l=D(e,r,c),r+=15&(u=n>>>1==1?$[l]:Y[l]);var d=(u>>>=4)<4?0:u-2>>1,p=E[u];for(d>0&&(p+=D(e,r,d),r+=d),!t&&a>>3]|e[1+(r>>>3)]<<8;if(r+=32,m>0)for(!t&&a0;)i[o++]=e[r>>>3],r+=8}return t?[i,r+7>>>3]:[i.slice(0,o),r+7>>>3]}(e.slice(e.l||0),t);return e.l+=r[1],r[0]}function te(e,t){if(!e)throw new Error(t);"undefined"!=typeof console&&console.error(t)}function re(e,t){var r=e;Ds(r,0);var n={FileIndex:[],FullPaths:[]};h(n,{root:t.root});for(var i=r.length-4;(80!=r[i]||75!=r[i+1]||5!=r[i+2]||6!=r[i+3])&&i>=0;)--i;r.l=i+4,r.l+=4;var a=r.read_shift(2);r.l+=6;var s=r.read_shift(4);for(r.l=s,i=0;i>>=5);r>>>=4,n.setMilliseconds(0),n.setFullYear(r+1980),n.setMonth(o-1),n.setDate(i);var a=31&t,s=63&(t>>>=5);return t>>>=6,n.setHours(t),n.setMinutes(s),n.setSeconds(a<<1),n}(e);if(8257&a)throw new Error("Unsupported ZIP encryption");e.read_shift(4);for(var l=e.read_shift(4),u=e.read_shift(4),f=e.read_shift(2),h=e.read_shift(2),d="",p=0;p3&&(n=!0),i[o].slice(i[o].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+i[o].slice(i[o].length-1));case"D":r*=24;case"H":r*=60;case"M":if(!n)throw new Error("Unsupported ISO Duration Field: M");r*=60}t+=r*parseInt(i[o],10)}return t}var qo=new Date("2017-02-19T19:06:09.000Z"),Xo=isNaN(qo.getFullYear())?new Date("2/19/17"):qo,Go=2017==Xo.getFullYear();function Yo(e,t){var r=new Date(e);if(Go)return t>0?r.setTime(r.getTime()+60*r.getTimezoneOffset()*1e3):t<0&&r.setTime(r.getTime()-60*r.getTimezoneOffset()*1e3),r;if(e instanceof Date)return e;if(1917==Xo.getFullYear()&&!isNaN(r.getFullYear())){var n=r.getFullYear();return e.indexOf(""+n)>-1||r.setFullYear(r.getFullYear()+100),r}var i=e.match(/\d+/g)||["2017","2","19","0","0","0"],o=new Date(+i[0],+i[1]-1,+i[2],+i[3]||0,+i[4]||0,+i[5]||0);return e.indexOf("Z")>-1&&(o=new Date(o.getTime()-60*o.getTimezoneOffset()*1e3)),o}function Ko(e,t){if(Ei&&Buffer.isBuffer(e)){if(t){if(255==e[0]&&254==e[1])return Ba(e.slice(2).toString("utf16le"));if(254==e[1]&&255==e[2])return Ba(vi(e.slice(2).toString("binary")))}return e.toString("binary")}if("undefined"!=typeof TextDecoder)try{if(t){if(255==e[0]&&254==e[1])return Ba(new TextDecoder("utf-16le").decode(e.slice(2)));if(254==e[0]&&255==e[1])return Ba(new TextDecoder("utf-16be").decode(e.slice(2)))}var r={"€":"€","‚":"‚","ƒ":"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰","Š":"Š","‹":"‹","Œ":"Œ","Ž":"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™","š":"š","›":"›","œ":"œ","ž":"ž","Ÿ":"Ÿ"};return Array.isArray(e)&&(e=new Uint8Array(e)),new TextDecoder("latin1").decode(e).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,(function(e){return r[e]||e}))}catch(e){}for(var n=[],i=0;i!=e.length;++i)n.push(String.fromCharCode(e[i]));return n.join("")}function Zo(e){if("undefined"!=typeof JSON&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if("object"!=typeof e||null==e)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=Zo(e[r]));return t}function Jo(e,t){for(var r="";r.length3&&-1==ea.indexOf(a))return r}else if(a.match(/[a-z]/))return r;return n<0||n>8099?r:(i>0||o>1)&&101!=n?t:e.match(/[^-0-9:,\/\\]/)?r:t}var ra=function(){var e=5=="abacaba".split(/(:?b)/i).length;return function(t,r,n){if(e||"string"==typeof r)return t.split(r);for(var i=t.split(r),o=[i[0]],a=1;a>6&31,i[r++]=128|63&a;else if(a>=55296&&a<57344){a=64+(1023&a);var s=1023&e.charCodeAt(++o);i[r++]=240|a>>8&7,i[r++]=128|a>>2&63,i[r++]=128|s>>6&15|(3&a)<<4,i[r++]=128|63&s}else i[r++]=224|a>>12&15,i[r++]=128|a>>6&63,i[r++]=128|63&a;r>n&&(t.push(i.slice(0,r)),r=0,i=Ci(65535),n=65530)}return t.push(i.slice(0,r)),Ii(t)}(r),Po.utils.cfb_add(e,t,n);Po.utils.cfb_add(e,t,r)}else e.file(t,r)}function ha(){return Po.utils.cfb_new()}function da(e,t){switch(t.type){case"base64":return Po.read(e,{type:"base64"});case"binary":return Po.read(e,{type:"binary"});case"buffer":case"array":return Po.read(e,{type:"buffer"})}throw new Error("Unrecognized type "+t.type)}function pa(e,t){if("/"==e.charAt(0))return e.slice(1);var r=t.split("/");"/"!=t.slice(-1)&&r.pop();for(var n=e.split("/");0!==n.length;){var i=n.shift();".."===i?r.pop():"."!==i&&r.push(i)}return r.join("/")}var ma='\r\n',ba=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,ya=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/gm,va=ma.match(ya)?ya:/<[^>]*>/g,ga=/<\w*:/,wa=/<(\/?)\w+:/;function _a(e,t,r){for(var n={},i=0,o=0;i!==e.length&&(32!==(o=e.charCodeAt(i))&&10!==o&&13!==o);++i);if(t||(n[0]=e.slice(0,i)),i===e.length)return n;var a=e.match(ba),s=0,c="",l=0,u="",f="",h=1;if(a)for(l=0;l!=a.length;++l){for(f=a[l],o=0;o!=f.length&&61!==f.charCodeAt(o);++o);for(u=f.slice(0,o).trim();32==f.charCodeAt(o+1);)++o;for(h=34==(i=f.charCodeAt(o+1))||39==i?1:0,c=f.slice(o+1+h,f.length-h),s=0;s!=u.length&&58!==u.charCodeAt(s);++s);if(s===u.length)u.indexOf("_")>0&&(u=u.slice(0,u.indexOf("_"))),n[u]=c,r||(n[u.toLowerCase()]=c);else{var d=(5===s&&"xmlns"===u.slice(0,5)?"xmlns":"")+u.slice(s+1);if(n[d]&&"ext"==u.slice(s-3,s))continue;n[d]=c,r||(n[d.toLowerCase()]=c)}}return n}function xa(e){return e.replace(wa,"<$1")}var ka={""":'"',"'":"'",">":">","<":"<","&":"&"},Sa=Fo(ka),Ta=function(){var e=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/gi,t=/_x([\da-fA-F]{4})_/gi;return function r(n){var i=n+"",o=i.indexOf("-1?16:10))||e})).replace(t,(function(e,t){return String.fromCharCode(parseInt(t,16))}));var a=i.indexOf("]]>");return r(i.slice(0,o))+i.slice(o+9,a)+r(i.slice(a+3))}}(),Ea=/[&<>'"]/g,Oa=/[\u0000-\u0008\u000b-\u001f]/g;function Ca(e){return(e+"").replace(Ea,(function(e){return Sa[e]})).replace(Oa,(function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"}))}function Ra(e){return Ca(e).replace(/ /g,"_x0020_")}var Aa=/[\u0000-\u001f]/g;function Ma(e){return(e+"").replace(Ea,(function(e){return Sa[e]})).replace(/\n/g,"
").replace(Aa,(function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"}))}var Pa=function(){var e=/&#(\d+);/g;function t(e,t){return String.fromCharCode(parseInt(t,10))}return function(r){return r.replace(e,t)}}();function ja(e){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}function Ia(e){for(var t="",r=0,n=0,i=0,o=0,a=0,s=0;r191&&n<224?(a=(31&n)<<6,a|=63&i,t+=String.fromCharCode(a)):(o=e.charCodeAt(r++),n<240?t+=String.fromCharCode((15&n)<<12|(63&i)<<6|63&o):(s=((7&n)<<18|(63&i)<<12|(63&o)<<6|63&(a=e.charCodeAt(r++)))-65536,t+=String.fromCharCode(55296+(s>>>10&1023)),t+=String.fromCharCode(56320+(1023&s)))));return t}function Da(e){var t,r,n,i=Ci(2*e.length),o=1,a=0,s=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==s&&(i[a++]=255&s,i[a++]=s>>>8,s=0),i[a++]=t%256,i[a++]=t>>>8;return i.slice(0,a).toString("ucs2")}function Na(e){return Oi(e,"binary").toString("utf8")}var Fa="foo bar baz☃🍣",La=Ei&&(Na(Fa)==Ia(Fa)&&Na||Da(Fa)==Ia(Fa)&&Da)||Ia,Ba=Ei?function(e){return Oi(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,n=0,i=0;r>6))),t.push(String.fromCharCode(128+(63&n)));break;case n>=55296&&n<57344:n-=55296,i=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(i>>18&7))),t.push(String.fromCharCode(144+(i>>12&63))),t.push(String.fromCharCode(128+(i>>6&63))),t.push(String.fromCharCode(128+(63&i)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(63&n)))}return t.join("")},za=function(){var e={};return function(t,r){var n=t+"|"+(r||"");return e[n]?e[n]:e[n]=new RegExp("<(?:\\w+:)?"+t+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",r||"")}}(),Ua=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map((function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]}));return function(t){for(var r=t.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,"\n").replace(/<[^>]*>/g,""),n=0;n([\\s\\S]*?)","g")}}(),Wa=/<\/?(?:vt:)?variant>/g,$a=/<(?:vt:)([^>]*)>([\s\S]*)"+t+""}function Ga(e){return Do(e).map((function(t){return" "+t+'="'+e[t]+'"'})).join("")}function Ya(e,t,r){return"<"+e+(null!=r?Ga(r):"")+(null!=t?(t.match(qa)?' xml:space="preserve"':"")+">"+t+""}function Ka(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}function Za(e){if(Ei&&Buffer.isBuffer(e))return e.toString("utf8");if("string"==typeof e)return e;if("undefined"!=typeof Uint8Array&&e instanceof Uint8Array)return La(Pi(ji(e)));throw new Error("Bad input format: expected Buffer or string")}var Ja=/<(\/?)([^\s?>:\/]+)(?:[\s?:\/][^>]*)?>/gm,Qa={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},es=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],ts={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};var rs=function(e){for(var t=[],r=0;r0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map((function(e){return Buffer.isBuffer(e)?e:Oi(e)}))):rs(e)}:rs,is=function(e,t,r){for(var n=[],i=t;i0?ls(e,t+4,t+4+r-1):""},fs=us,hs=function(e,t){var r=Es(e,t);return r>0?ls(e,t+4,t+4+r-1):""},ds=hs,ps=function(e,t){var r=2*Es(e,t);return r>0?ls(e,t+4,t+4+r-1):""},ms=ps,bs=function(e,t){var r=Es(e,t);return r>0?os(e,t+4,t+4+r):""},ys=bs,vs=function(e,t){var r=Es(e,t);return r>0?ls(e,t+4,t+4+r):""},gs=vs,ws=function(e,t){return function(e,t){for(var r=1-2*(e[t+7]>>>7),n=((127&e[t+7])<<4)+(e[t+6]>>>4&15),i=15&e[t+6],o=5;o>=0;--o)i=256*i+e[t+o];return 2047==n?0==i?r*(1/0):NaN:(0==n?n=-1022:(n-=1023,i+=Math.pow(2,52)),r*Math.pow(2,n-52)*i)}(e,t)},_s=ws,xs=function(e){return Array.isArray(e)||"undefined"!=typeof Uint8Array&&e instanceof Uint8Array};Ei&&(fs=function(e,t){if(!Buffer.isBuffer(e))return us(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},ds=function(e,t){if(!Buffer.isBuffer(e))return hs(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},ms=function(e,t){if(!Buffer.isBuffer(e))return ps(e,t);var r=2*e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r-1)},ys=function(e,t){if(!Buffer.isBuffer(e))return bs(e,t);var r=e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r)},gs=function(e,t){if(!Buffer.isBuffer(e))return vs(e,t);var r=e.readUInt32LE(t);return e.toString("utf8",t+4,t+4+r)},_s=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):ws(e,t)},xs=function(e){return Buffer.isBuffer(e)||Array.isArray(e)||"undefined"!=typeof Uint8Array&&e instanceof Uint8Array});var ks=function(e,t){return e[t]},Ss=function(e,t){return 256*e[t+1]+e[t]},Ts=function(e,t){var r=256*e[t+1]+e[t];return r<32768?r:-1*(65535-r+1)},Es=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},Os=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Cs=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function Rs(e,t){var r,n,i,o,a,s,c="",l=[];switch(t){case"dbcs":if(s=this.l,Ei&&Buffer.isBuffer(this))c=this.slice(this.l,this.l+2*e).toString("utf16le");else for(a=0;a0?Os:Cs)(this,this.l),this.l+=4,r):(n=Es(this,this.l),this.l+=4,n);case 8:case-8:if("f"===t)return n=8==e?_s(this,this.l):_s([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,n;e=8;case 16:c=ss(this,this.l,e)}}return this.l+=e,c}var As=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},Ms=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},Ps=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255};function js(e,t,r){var n=0,i=0;if("dbcs"===r){for(i=0;i!=t.length;++i)Ps(this,t.charCodeAt(i),this.l+2*i);n=2*t.length}else if("sbcs"===r){for(t=t.replace(/[^\x00-\x7F]/g,"_"),i=0;i!=t.length;++i)this[this.l+i]=255&t.charCodeAt(i);n=t.length}else{if("hex"===r){for(;i>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,As(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,i=0,o=0,a=n?-t:t;isFinite(a)?0==a?i=o=0:(i=Math.floor(Math.log(a)/Math.LN2),o=a*Math.pow(2,52-i),i<=-1023&&(!isFinite(o)||o>4|n}(this,t,this.l);break}case 16:break;case-4:n=4,Ms(this,t,this.l)}}return this.l+=n,this}function Is(e,t){var r=ss(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function Ds(e,t){e.l=t,e.read_shift=Rs,e.chk=Is,e.write_shift=js}function Ns(e,t){e.l+=t}function Fs(e){var t=Ci(e);return Ds(t,0),t}function Ls(e,t,r){if(e){var n,i,o;Ds(e,e.l||0);for(var a=e.length,s=0,c=0;e.ln.l&&((n=n.slice(0,n.l)).l=n.length),n.length>0&&e.push(n),n=null)},o=function(e){return n&&e=128?1:0)+1,n>=128&&++i,n>=16384&&++i,n>=2097152&&++i;var a=e.next(i);o<=127?a.write_shift(1,o):(a.write_shift(1,128+(127&o)),a.write_shift(1,o>>7));for(var s=0;4!=s;++s){if(!(n>=128)){a.write_shift(1,n);break}a.write_shift(1,128+(127&n)),n>>=7}n>0&&xs(r)&&e.push(r)}}function Us(e,t,r){var n=Zo(e);if(t.s?(n.cRel&&(n.c+=t.s.c),n.rRel&&(n.r+=t.s.r)):(n.cRel&&(n.c+=t.c),n.rRel&&(n.r+=t.r)),!r||r.biff<12){for(;n.c>=256;)n.c-=256;for(;n.r>=65536;)n.r-=65536}return n}function Hs(e,t,r){var n=Zo(e);return n.s=Us(n.s,t.s,r),n.e=Us(n.e,t.s,r),n}function Ws(e,t){if(e.cRel&&e.c<0)for(e=Zo(e);e.c<0;)e.c+=t>8?16384:256;if(e.rRel&&e.r<0)for(e=Zo(e);e.r<0;)e.r+=t>8?1048576:t>5?65536:16384;var r=Ks(e);return e.cRel||null==e.cRel||(r=r.replace(/^([A-Z])/,"$$$1")),e.rRel||null==e.rRel||(r=function(e){return e.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}(r)),r}function $s(e,t){return 0!=e.s.r||e.s.rRel||e.e.r!=(t.biff>=12?1048575:t.biff>=8?65536:16384)||e.e.rRel?0!=e.s.c||e.s.cRel||e.e.c!=(t.biff>=12?16383:255)||e.e.cRel?Ws(e.s,t.biff)+":"+Ws(e.e,t.biff):(e.s.rRel?"":"$")+qs(e.s.r)+":"+(e.e.rRel?"":"$")+qs(e.e.r):(e.s.cRel?"":"$")+Gs(e.s.c)+":"+(e.e.cRel?"":"$")+Gs(e.e.c)}function Vs(e){return parseInt(e.replace(/\$(\d+)$/,"$1"),10)-1}function qs(e){return""+(e+1)}function Xs(e){for(var t=e.replace(/^\$([A-Z])/,"$1"),r=0,n=0;n!==t.length;++n)r=26*r+t.charCodeAt(n)-64;return r-1}function Gs(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function Ys(e){for(var t=0,r=0,n=0;n=48&&i<=57?t=10*t+(i-48):i>=65&&i<=90&&(r=26*r+(i-64))}return{c:r-1,r:t-1}}function Ks(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function Zs(e){var t=e.indexOf(":");return-1==t?{s:Ys(e),e:Ys(e)}:{s:Ys(e.slice(0,t)),e:Ys(e.slice(t+1))}}function Js(e,t){return void 0===t||"number"==typeof t?Js(e.s,e.e):("string"!=typeof e&&(e=Ks(e)),"string"!=typeof t&&(t=Ks(t)),e==t?e:e+":"+t)}function Qs(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,n=0,i=0,o=e.length;for(r=0;n26);++n)r=26*r+i;for(t.s.c=--r,r=0;n9);++n)r=10*r+i;if(t.s.r=--r,n===o||10!=i)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++n,r=0;n!=o&&!((i=e.charCodeAt(n)-64)<1||i>26);++n)r=26*r+i;for(t.e.c=--r,r=0;n!=o&&!((i=e.charCodeAt(n)-48)<0||i>9);++n)r=10*r+i;return t.e.r=--r,t}function ec(e,t){var r="d"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=To(e.z,r?zo(t):t)}catch(e){}try{return e.w=To((e.XF||{}).numFmtId||(r?14:0),r?zo(t):t)}catch(e){return""+t}}function tc(e,t,r){return null==e||null==e.t||"z"==e.t?"":void 0!==e.w?e.w:("d"==e.t&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),"e"==e.t?Wc[e.v]||e.v:ec(e,null==t?e.v:t))}function rc(e,t){var r=t&&t.sheet?t.sheet:"Sheet1",n={};return n[r]=e,{SheetNames:[r],Sheets:n}}function nc(e,t){return function(e,t,r){var n=r||{},i=e?Array.isArray(e):n.dense,o=e||(i?[]:{}),a=0,s=0;if(o&&null!=n.origin){if("number"==typeof n.origin)a=n.origin;else{var c="string"==typeof n.origin?Ys(n.origin):n.origin;a=c.r,s=c.c}o["!ref"]||(o["!ref"]="A1:A1")}var l={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(o["!ref"]){var u=Qs(o["!ref"]);l.s.c=u.s.c,l.s.r=u.s.r,l.e.c=Math.max(l.e.c,u.e.c),l.e.r=Math.max(l.e.r,u.e.r),-1==a&&(l.e.r=a=u.e.r+1)}for(var f=0;f!=t.length;++f)if(t[f]){if(!Array.isArray(t[f]))throw new Error("aoa_to_sheet expects an array of arrays");for(var h=0;h!=t[f].length;++h)if(void 0!==t[f][h]){var d={v:t[f][h]},p=a+f,m=s+h;if(l.s.r>p&&(l.s.r=p),l.s.c>m&&(l.s.c=m),l.e.r0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}function sc(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function cc(e,t){var r=e.l,n=e.read_shift(1),i=oc(e),o=[],a={t:i,h:i};if(0!=(1&n)){for(var s=e.read_shift(4),c=0;c!=s;++c)o.push(sc(e));a.r=o}else a.r=[{ich:0,ifnt:0}];return e.l=r+t,a}var lc=cc;function uc(e,t){var r=!1;return null==t&&(r=!0,t=Fs(23+4*e.t.length)),t.write_shift(1,1),ac(e.t,t),t.write_shift(4,1),function(e,t){t||(t=Fs(4)),t.write_shift(2,e.ich||0),t.write_shift(2,e.ifnt||0)}({ich:0,ifnt:0},t),r?t.slice(0,t.l):t}function fc(e){var t=e.read_shift(4),r=e.read_shift(2);return r+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:r}}function hc(e,t){return null==t&&(t=Fs(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}function dc(e){var t=e.read_shift(2);return t+=e.read_shift(1)<<16,e.l++,{c:-1,iStyleRef:t}}function pc(e,t){return null==t&&(t=Fs(4)),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var mc=oc,bc=ac;function yc(e){var t=e.read_shift(4);return 0===t||4294967295===t?"":e.read_shift(t,"dbcs")}function vc(e,t){var r=!1;return null==t&&(r=!0,t=Fs(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}var gc=oc,wc=yc,_c=vc;function xc(e){var t=e.slice(e.l,e.l+4),r=1&t[0],n=2&t[0];e.l+=4;var i=0===n?_s([0,0,0,0,252&t[0],t[1],t[2],t[3]],0):Os(t,0)>>2;return r?i/100:i}function kc(e,t){null==t&&(t=Fs(4));var r=0,n=0,i=100*e;if(e==(0|e)&&e>=-(1<<29)&&e<1<<29?n=1:i==(0|i)&&i>=-(1<<29)&&i<1<<29&&(n=1,r=1),!n)throw new Error("unsupported RkNumber "+e);t.write_shift(-4,((r?i:e)<<2)+(r+2))}function Sc(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var Tc=Sc,Ec=function(e,t){return t||(t=Fs(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function Oc(e){if(e.length-e.l<8)throw"XLS Xnum Buffer underflow";return e.read_shift(8,"f")}function Cc(e,t){return(t||Fs(8)).write_shift(8,e,"f")}function Rc(e,t){if(t||(t=Fs(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;null!=e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):null!=e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(r>0?r*=32767:r<0&&(r*=32768),t.write_shift(2,r),e.rgb&&null==e.theme){var n=e.rgb||"FFFFFF";"number"==typeof n&&(n=("000000"+n.toString(16)).slice(-6)),t.write_shift(1,parseInt(n.slice(0,2),16)),t.write_shift(1,parseInt(n.slice(2,4),16)),t.write_shift(1,parseInt(n.slice(4,6),16)),t.write_shift(1,255)}else t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);return t}function Ac(e,t){var r=e.read_shift(4);switch(r){case 0:return"";case 4294967295:case 4294967294:return{2:"BITMAP",3:"METAFILEPICT",8:"DIB",14:"ENHMETAFILE"}[e.read_shift(4)]||""}if(r>400)throw new Error("Unsupported Clipboard: "+r.toString(16));return e.l-=4,e.read_shift(0,1==t?"lpstr":"lpwstr")}var Mc=2,Pc=3,jc=12,Ic=80,Dc=81,Nc=[Ic,Dc],Fc={1:{n:"CodePage",t:Mc},2:{n:"Category",t:Ic},3:{n:"PresentationFormat",t:Ic},4:{n:"ByteCount",t:Pc},5:{n:"LineCount",t:Pc},6:{n:"ParagraphCount",t:Pc},7:{n:"SlideCount",t:Pc},8:{n:"NoteCount",t:Pc},9:{n:"HiddenCount",t:Pc},10:{n:"MultimediaClipCount",t:Pc},11:{n:"ScaleCrop",t:11},12:{n:"HeadingPairs",t:4108},13:{n:"TitlesOfParts",t:4126},14:{n:"Manager",t:Ic},15:{n:"Company",t:Ic},16:{n:"LinksUpToDate",t:11},17:{n:"CharacterCount",t:Pc},19:{n:"SharedDoc",t:11},22:{n:"HyperlinksChanged",t:11},23:{n:"AppVersion",t:Pc,p:"version"},24:{n:"DigSig",t:65},26:{n:"ContentType",t:Ic},27:{n:"ContentStatus",t:Ic},28:{n:"Language",t:Ic},29:{n:"Version",t:Ic},255:{},2147483648:{n:"Locale",t:19},2147483651:{n:"Behavior",t:19},1919054434:{}},Lc={1:{n:"CodePage",t:Mc},2:{n:"Title",t:Ic},3:{n:"Subject",t:Ic},4:{n:"Author",t:Ic},5:{n:"Keywords",t:Ic},6:{n:"Comments",t:Ic},7:{n:"Template",t:Ic},8:{n:"LastAuthor",t:Ic},9:{n:"RevNumber",t:Ic},10:{n:"EditTime",t:64},11:{n:"LastPrinted",t:64},12:{n:"CreatedDate",t:64},13:{n:"ModifiedDate",t:64},14:{n:"PageCount",t:Pc},15:{n:"WordCount",t:Pc},16:{n:"CharCount",t:Pc},17:{n:"Thumbnail",t:71},18:{n:"Application",t:Ic},19:{n:"DocSecurity",t:Pc},255:{},2147483648:{n:"Locale",t:19},2147483651:{n:"Behavior",t:19},1919054434:{}},Bc={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"},zc=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function Uc(e){return e.map((function(e){return[e>>16&255,e>>8&255,255&e]}))}var Hc=Zo(Uc([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),Wc={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},$c={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#WTF?":255},Vc={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"TODO","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},qc={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function Xc(e,t){var r,n=function(e){for(var t=[],r=Do(e),n=0;n!==r.length;++n)null==t[e[r[n]]]&&(t[e[r[n]]]=[]),t[e[r[n]]].push(r[n]);return t}(Vc),i=[];i[i.length]=ma,i[i.length]=Ya("Types",null,{xmlns:Qa.CT,"xmlns:xsd":Qa.xsd,"xmlns:xsi":Qa.xsi}),i=i.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map((function(e){return Ya("Default",null,{Extension:e[0],ContentType:e[1]})})));var o=function(n){e[n]&&e[n].length>0&&(r=e[n][0],i[i.length]=Ya("Override",null,{PartName:("/"==r[0]?"":"/")+r,ContentType:qc[n][t.bookType]||qc[n].xlsx}))},a=function(r){(e[r]||[]).forEach((function(e){i[i.length]=Ya("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:qc[r][t.bookType]||qc[r].xlsx})}))},s=function(t){(e[t]||[]).forEach((function(e){i[i.length]=Ya("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:n[t][0]})}))};return o("workbooks"),a("sheets"),a("charts"),s("themes"),["strs","styles"].forEach(o),["coreprops","extprops","custprops"].forEach(s),s("vba"),s("comments"),s("threadedcomments"),s("drawings"),a("metadata"),s("people"),i.length>2&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}var Gc={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Yc(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function Kc(e,t){var r={"!id":{}};if(!e)return r;"/"!==t.charAt(0)&&(t="/"+t);var n={};return(e.match(va)||[]).forEach((function(e){var i=_a(e);if("2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Jc(e,t,r,n,i,o){if(i||(i={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,i.Id="rId"+t,i.Type=n,i.Target=r,o?i.TargetMode=o:[Gc.HLINK,Gc.XPATH,Gc.XMISS].indexOf(i.Type)>-1&&(i.TargetMode="External"),e["!id"][i.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][i.Id]=i,e[("/"+i.Target).replace("//","/")]=i,t}var Qc="application/vnd.oasis.opendocument.spreadsheet";function el(e,t,r){return[' \n',' \n'," \n"].join("")}function tl(){return'SheetJS '+ui.version+""}var rl=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]],nl=function(){for(var e=new Array(rl.length),t=0;t]*>([\\s\\S]*?)")}return e}();function il(e){var t={};e=La(e);for(var r=0;r0&&(t[n[1]]=Ta(i[1])),"date"===n[2]&&t[n[1]]&&(t[n[1]]=Yo(t[n[1]]))}return t}function ol(e,t,r,n,i){null==i[e]&&null!=t&&""!==t&&(i[e]=t,t=Ca(t),n[n.length]=r?Ya(e,t,r):Xa(e,t))}function al(e,t){var r=t||{},n=[ma,Ya("cp:coreProperties",null,{"xmlns:cp":Qa.CORE_PROPS,"xmlns:dc":Qa.dc,"xmlns:dcterms":Qa.dcterms,"xmlns:dcmitype":Qa.dcmitype,"xmlns:xsi":Qa.xsi})],i={};if(!e&&!r.Props)return n.join("");e&&(null!=e.CreatedDate&&ol("dcterms:created","string"==typeof e.CreatedDate?e.CreatedDate:Ka(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i),null!=e.ModifiedDate&&ol("dcterms:modified","string"==typeof e.ModifiedDate?e.ModifiedDate:Ka(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i));for(var o=0;o!=rl.length;++o){var a=rl[o],s=r.Props&&null!=r.Props[a[1]]?r.Props[a[1]]:e?e[a[1]]:null;!0===s?s="1":!1===s?s="0":"number"==typeof s&&(s=String(s)),null!=s&&ol(a[0],s,null,n,i)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var sl=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]],cl=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function ll(e,t,r,n){var i=[];if("string"==typeof e)i=Va(e,n);else for(var o=0;o0)for(var l=0;l!==i.length;l+=2){switch(c=+i[l+1].v,i[l].v){case"Worksheets":case"工作表":case"Листы":case"أوراق العمل":case"ワークシート":case"גליונות עבודה":case"Arbeitsblätter":case"Çalışma Sayfaları":case"Feuilles de calcul":case"Fogli di lavoro":case"Folhas de cálculo":case"Planilhas":case"Regneark":case"Hojas de cálculo":case"Werkbladen":r.Worksheets=c,r.SheetNames=a.slice(s,s+c);break;case"Named Ranges":case"Rangos con nombre":case"名前付き一覧":case"Benannte Bereiche":case"Navngivne områder":r.NamedRanges=c,r.DefinedNames=a.slice(s,s+c);break;case"Charts":case"Diagramme":r.Chartsheets=c,r.ChartNames=a.slice(s,s+c)}s+=c}}function ul(e){var t=[],r=Ya;return e||(e={}),e.Application="SheetJS",t[t.length]=ma,t[t.length]=Ya("Properties",null,{xmlns:Qa.EXT_PROPS,"xmlns:vt":Qa.vt}),sl.forEach((function(n){if(void 0!==e[n[1]]){var i;switch(n[2]){case"string":i=Ca(String(e[n[1]]));break;case"bool":i=e[n[1]]?"true":"false"}void 0!==i&&(t[t.length]=r(n[0],i))}})),t[t.length]=r("HeadingPairs",r("vt:vector",r("vt:variant","Worksheets")+r("vt:variant",r("vt:i4",String(e.Worksheets))),{size:2,baseType:"variant"})),t[t.length]=r("TitlesOfParts",r("vt:vector",e.SheetNames.map((function(e){return""+Ca(e)+""})).join(""),{size:e.Worksheets,baseType:"lpstr"})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var fl=/<[^>]+>[^<]*/g;function hl(e){var t=[ma,Ya("Properties",null,{xmlns:Qa.CUST_PROPS,"xmlns:vt":Qa.vt})];if(!e)return t.join("");var r=1;return Do(e).forEach((function(n){++r,t[t.length]=Ya("property",function(e,t){switch(typeof e){case"string":var r=Ya("vt:lpwstr",Ca(e));return t&&(r=r.replace(/"/g,"_x0022_")),r;case"number":return Ya((0|e)==e?"vt:i4":"vt:r8",Ca(String(e)));case"boolean":return Ya("vt:bool",e?"true":"false")}if(e instanceof Date)return Ya("vt:filetime",Ka(e));throw new Error("Unable to serialize "+e)}(e[n],!0),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:Ca(n)})})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var dl,pl={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};function ml(e,t,r){dl||(dl=Fo(pl)),e[t=dl[t]||t]=r}function bl(e){var t=e.read_shift(4),r=e.read_shift(4);return new Date(1e3*(r/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\.000/,"")}function yl(e,t,r){var n=e.l,i=e.read_shift(0,"lpstr-cp");if(r)for(;e.l-n&3;)++e.l;return i}function vl(e,t,r){var n=e.read_shift(0,"lpwstr");return r&&(e.l+=4-(n.length+1&3)&3),n}function gl(e,t,r){return 31===t?vl(e):yl(e,0,r)}function wl(e,t,r){return gl(e,t,!1===r?0:4)}function _l(e){var t=e.l,r=Sl(e,Dc);return 0==e[e.l]&&0==e[e.l+1]&&e.l-t&2&&(e.l+=2),[r,Sl(e,Pc)]}function xl(e,t){for(var r=e.read_shift(4),n={},i=0;i!=r;++i){var o=e.read_shift(4),a=e.read_shift(4);n[o]=e.read_shift(a,1200===t?"utf16le":"utf8").replace(Di,"").replace(Ni,"!"),1200===t&&a%2&&(e.l+=2)}return 3&e.l&&(e.l=e.l>>3<<2),n}function kl(e){var t=e.read_shift(4),r=e.slice(e.l,e.l+t);return e.l+=t,(3&t)>0&&(e.l+=4-(3&t)&3),r}function Sl(e,t,r){var n,i=e.read_shift(2),o=r||{};if(e.l+=2,t!==jc&&i!==t&&-1===Nc.indexOf(t)&&(4126!=(65534&t)||4126!=(65534&i)))throw new Error("Expected type "+t+" saw "+i);switch(t===jc?i:t){case 2:return n=e.read_shift(2,"i"),o.raw||(e.l+=2),n;case 3:return n=e.read_shift(4,"i");case 11:return 0!==e.read_shift(4);case 19:return n=e.read_shift(4);case 30:return yl(e,0,4).replace(Di,"");case 31:return vl(e);case 64:return bl(e);case 65:return kl(e);case 71:return function(e){var t={};return t.Size=e.read_shift(4),e.l+=t.Size+3-(t.Size-1)%4,t}(e);case 80:return wl(e,i,!o.raw).replace(Di,"");case 81:return function(e,t){if(!t)throw new Error("VtUnalignedString must have positive length");return gl(e,t,0)}(e,i).replace(Di,"");case 4108:return function(e){for(var t=e.read_shift(4),r=[],n=0;n0&&(r%=Math.pow(2,32),n+=i);var o=Fs(8);return o.write_shift(4,r),o.write_shift(4,n),o}(t);break;case 31:case 80:for((n=Fs(4+2*(t.length+1)+(t.length%2?0:2))).write_shift(4,t.length+1),n.write_shift(0,t,"dbcs");n.l!=n.length;)n.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+e+" "+t)}return Ii([r,n])}function El(e,t){var r=e.l,n=e.read_shift(4),i=e.read_shift(4),o=[],a=0,s=0,c=-1,l={};for(a=0;a!=i;++a){var u=e.read_shift(4),f=e.read_shift(4);o[a]=[u,f+r]}o.sort((function(e,t){return e[1]-t[1]}));var h={};for(a=0;a!=i;++a){if(e.l!==o[a][1]){var d=!0;if(a>0&&t)switch(t[o[a-1][0]].t){case 2:e.l+2===o[a][1]&&(e.l+=2,d=!1);break;case 80:case 4108:e.l<=o[a][1]&&(e.l=o[a][1],d=!1)}if((!t||0==a)&&e.l<=o[a][1]&&(d=!1,e.l=o[a][1]),d)throw new Error("Read Error: Expected address "+o[a][1]+" at "+e.l+" :"+a)}if(t){var p=t[o[a][0]];if(h[p.n]=Sl(e,p.t,{raw:!0}),"version"===p.p&&(h[p.n]=String(h[p.n]>>16)+"."+("0000"+String(65535&h[p.n])).slice(-4)),"CodePage"==p.n)switch(h[p.n]){case 0:h[p.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:mi(s=h[p.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+h[p.n])}}else if(1===o[a][0]){if(s=h.CodePage=Sl(e,Mc),mi(s),-1!==c){var m=e.l;e.l=o[c][1],l=xl(e,s),e.l=m}}else if(0===o[a][0]){if(0===s){c=a,e.l=o[a+1][1];continue}l=xl(e,s)}else{var b,y=l[o[a][0]];switch(e[e.l]){case 65:e.l+=4,b=kl(e);break;case 30:case 31:e.l+=4,b=wl(e,e[e.l-4]).replace(/\u0000+$/,"");break;case 3:e.l+=4,b=e.read_shift(4,"i");break;case 19:e.l+=4,b=e.read_shift(4);break;case 5:e.l+=4,b=e.read_shift(8,"f");break;case 11:e.l+=4,b=jl(e,4);break;case 64:e.l+=4,b=Yo(bl(e));break;default:throw new Error("unparsed value: "+e[e.l])}h[y]=b}}return e.l=r+n,h}var Ol=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function Cl(e){switch(typeof e){case"boolean":return 11;case"number":return(0|e)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64}return-1}function Rl(e,t,r){var n=Fs(8),i=[],o=[],a=8,s=0,c=Fs(8),l=Fs(8);if(c.write_shift(4,2),c.write_shift(4,1200),l.write_shift(4,1),o.push(c),i.push(l),a+=8+c.length,!t){(l=Fs(8)).write_shift(4,0),i.unshift(l);var u=[Fs(4)];for(u[0].write_shift(4,e.length),s=0;s-1||cl.indexOf(e[s][0])>-1)&&null!=e[s][1]){var h=e[s][1],d=0;if(t){var p=r[d=+t[e[s][0]]];if("version"==p.p&&"string"==typeof h){var m=h.split(".");h=(+m[0]<<16)+(+m[1]||0)}c=Tl(p.t,h)}else{var b=Cl(h);-1==b&&(b=31,h=String(h)),c=Tl(b,h)}o.push(c),(l=Fs(8)).write_shift(4,t?d:2+s),i.push(l),a+=8+c.length}var y=8*(o.length+1);for(s=0;s=12?2:1),i="sbcs-cont";(r&&r.biff,r&&8!=r.biff)?12==r.biff&&(i="wstr"):e.read_shift(1)&&(i="dbcs-cont");return r.biff>=2&&r.biff<=5&&(i="cpstr"),n?e.read_shift(n,i):""}function zl(e){var t,r=e.read_shift(2),n=e.read_shift(1),i=4&n,o=8&n,a=1+(1&n),s=0,c={};o&&(s=e.read_shift(2)),i&&(t=e.read_shift(4));var l=2==a?"dbcs-cont":"sbcs-cont",u=0===r?"":e.read_shift(r,l);return o&&(e.l+=4*s),i&&(e.l+=t),c.t=u,o||(c.raw=""+c.t+"",c.r=c.t),c}function Ul(e){var t=e.t||"",r=Fs(3);r.write_shift(2,t.length),r.write_shift(1,1);var n=Fs(2*t.length);return n.write_shift(2*t.length,t,"utf16le"),Ii([r,n])}function Hl(e,t,r){if(r){if(r.biff>=2&&r.biff<=5)return e.read_shift(t,"cpstr");if(r.biff>=12)return e.read_shift(t,"dbcs-cont")}return 0===e.read_shift(1)?e.read_shift(t,"sbcs-cont"):e.read_shift(t,"dbcs-cont")}function Wl(e,t,r){var n=e.read_shift(r&&2==r.biff?1:2);return 0===n?(e.l++,""):Hl(e,n,r)}function $l(e,t,r){if(r.biff>5)return Wl(e,0,r);var n=e.read_shift(1);return 0===n?(e.l++,""):e.read_shift(n,r.biff<=4||!e.lens?"cpstr":"sbcs-cont")}function Vl(e,t,r){return r||(r=Fs(3+2*e.length)),r.write_shift(2,e.length),r.write_shift(1,1),r.write_shift(31,e,"utf16le"),r}function ql(e,t){var r=e.read_shift(16);switch(r){case"e0c9ea79f9bace118c8200aa004ba90b":return function(e){var t=e.read_shift(4),r=e.l,n=!1;t>24&&(e.l+=t-24,"795881f43b1d7f48af2c825dc4852763"===e.read_shift(16)&&(n=!0),e.l=r);var i=e.read_shift((n?t-24:t)>>1,"utf16le").replace(Di,"");return n&&(e.l+=24),i}(e);case"0303000000000000c000000000000046":return function(e){for(var t=e.read_shift(2),r="";t-- >0;)r+="../";var n=e.read_shift(0,"lpstr-ansi");if(e.l+=2,57005!=e.read_shift(2))throw new Error("Bad FileMoniker");if(0===e.read_shift(4))return r+n.replace(/\\/g,"/");var i=e.read_shift(4);if(3!=e.read_shift(2))throw new Error("Bad FileMoniker");return r+e.read_shift(i>>1,"utf16le").replace(Di,"")}(e);default:throw new Error("Unsupported Moniker "+r)}}function Xl(e){var t=e.read_shift(4);return t>0?e.read_shift(t,"utf16le").replace(Di,""):""}function Gl(e,t){t||(t=Fs(6+2*e.length)),t.write_shift(4,1+e.length);for(var r=0;r-1?31:23;switch(n.charAt(0)){case"#":o=28;break;case".":o&=-3}t.write_shift(4,2),t.write_shift(4,o);var a=[8,6815827,6619237,4849780,83];for(r=0;r-1?n.slice(0,i):n;for(t.write_shift(4,2*(s.length+1)),r=0;r-1?n.slice(i+1):"",t)}else{for(a="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),r=0;r8?4:2;return[e.read_shift(n),e.read_shift(n,"i"),e.read_shift(n,"i")]}function tu(e){return[e.read_shift(2),xc(e)]}function ru(e){var t=e.read_shift(2),r=e.read_shift(2);return{s:{c:e.read_shift(2),r:t},e:{c:e.read_shift(2),r:r}}}function nu(e,t){return t||(t=Fs(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function iu(e){var t=e.read_shift(2),r=e.read_shift(2);return{s:{c:e.read_shift(1),r:t},e:{c:e.read_shift(1),r:r}}}var ou=iu;function au(e){e.l+=4;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(2);return e.l+=12,[r,t,n]}function su(e){e.l+=2,e.l+=e.read_shift(2)}var cu={0:su,4:su,5:su,6:su,7:function(e){return e.l+=4,e.cf=e.read_shift(2),{}},8:su,9:su,10:su,11:su,12:su,13:function(e){var t={};return e.l+=4,e.l+=16,t.fSharedNote=e.read_shift(2),e.l+=4,t},14:su,15:su,16:su,17:su,18:su,19:su,20:su,21:au};function lu(e,t){var r={BIFFVer:0,dt:0};switch(r.BIFFVer=e.read_shift(2),(t-=2)>=2&&(r.dt=e.read_shift(2),e.l-=2),r.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(t>6)throw new Error("Unexpected BIFF Ver "+r.BIFFVer)}return e.read_shift(t),r}function uu(e,t,r){var n=1536,i=16;switch(r.bookType){case"biff8":case"xla":break;case"biff5":n=1280,i=8;break;case"biff4":n=4,i=6;break;case"biff3":n=3,i=6;break;case"biff2":n=2,i=4;break;default:throw new Error("unsupported BIFF version")}var o=Fs(i);return o.write_shift(2,n),o.write_shift(2,t),i>4&&o.write_shift(2,29282),i>6&&o.write_shift(2,1997),i>8&&(o.write_shift(2,49161),o.write_shift(2,1),o.write_shift(2,1798),o.write_shift(2,0)),o}function fu(e,t){var r=!t||t.biff>=8?2:1,n=Fs(8+r*e.name.length);n.write_shift(4,e.pos),n.write_shift(1,e.hs||0),n.write_shift(1,e.dt),n.write_shift(1,e.name.length),t.biff>=8&&n.write_shift(1,1),n.write_shift(r*e.name.length,e.name,t.biff<8?"sbcs":"utf16le");var i=n.slice(0,n.l);return i.l=n.l,i}function hu(e,t,r){var n=0;r&&2==r.biff||(n=e.read_shift(2));var i=e.read_shift(2);return r&&2==r.biff&&(n=1-(i>>15),i&=32767),[{Unsynced:1&n,DyZero:(2&n)>>1,ExAsc:(4&n)>>2,ExDsc:(8&n)>>3},i]}function du(e,t,r,n){var i=r&&5==r.biff;n||(n=Fs(i?3+t.length:5+2*t.length)),n.write_shift(2,e),n.write_shift(i?1:2,t.length),i||n.write_shift(1,1),n.write_shift((i?1:2)*t.length,t,i?"sbcs":"utf16le");var o=n.length>n.l?n.slice(0,n.l):n;return null==o.l&&(o.l=o.length),o}var pu=$l;function mu(e,t,r){var n=e.l+t,i=8!=r.biff&&r.biff?2:4,o=e.read_shift(i),a=e.read_shift(i),s=e.read_shift(2),c=e.read_shift(2);return e.l=n,{s:{r:o,c:s},e:{r:a,c:c}}}function bu(e,t,r,n){var i=r&&5==r.biff;n||(n=Fs(i?16:20)),n.write_shift(2,0),e.style?(n.write_shift(2,e.numFmtId||0),n.write_shift(2,65524)):(n.write_shift(2,e.numFmtId||0),n.write_shift(2,t<<4));var o=0;return e.numFmtId>0&&i&&(o|=1024),n.write_shift(4,o),n.write_shift(4,0),i||n.write_shift(4,0),n.write_shift(2,0),n}function yu(e,t,r){var n=Jl(e);2!=r.biff&&9!=t||++e.l;var i=function(e){var t=e.read_shift(1);return 1===e.read_shift(1)?t:1===t}(e);return n.val=i,n.t=!0===i||!1===i?"b":"e",n}var vu=function(e,t,r){return 0===t?"":$l(e,0,r)};function gu(e,t,r){var n,i=e.read_shift(2),o={fBuiltIn:1&i,fWantAdvise:i>>>1&1,fWantPict:i>>>2&1,fOle:i>>>3&1,fOleLink:i>>>4&1,cf:i>>>5&1023,fIcon:i>>>15&1};return 14849===r.sbcch&&(n=function(e,t,r){e.l+=4,t-=4;var n=e.l+t,i=Bl(e,0,r),o=e.read_shift(2);if(o!==(n-=e.l))throw new Error("Malformed AddinUdf: padding = "+n+" != "+o);return e.l+=o,i}(e,t-2,r)),o.body=n||e.read_shift(t-2),"string"==typeof n&&(o.Name=n),o}var wu=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function _u(e,t,r){var n=e.l+t,i=e.read_shift(2),o=e.read_shift(1),a=e.read_shift(1),s=e.read_shift(r&&2==r.biff?1:2),c=0;(!r||r.biff>=5)&&(5!=r.biff&&(e.l+=2),c=e.read_shift(2),5==r.biff&&(e.l+=2),e.l+=4);var l=Hl(e,a,r);32&i&&(l=wu[l.charCodeAt(0)]);var u=n-e.l;r&&2==r.biff&&--u;var f=n!=e.l&&0!==s&&u>0?function(e,t,r,n){var i,o=e.l+t,a=zh(e,n,r);o!==e.l&&(i=Bh(e,o-e.l,a,r));return[a,i]}(e,u,r,s):[];return{chKey:o,Name:l,itab:c,rgce:f}}function xu(e,t,r){if(r.biff<8)return function(e,t,r){3==e[e.l+1]&&e[e.l]++;var n=Bl(e,0,r);return 3==n.charCodeAt(0)?n.slice(1):n}(e,0,r);for(var n=[],i=e.l+t,o=e.read_shift(r.biff>8?4:2);0!=o--;)n.push(eu(e,r.biff,r));if(e.l!=i)throw new Error("Bad ExternSheet: "+e.l+" != "+i);return n}function ku(e,t,r){var n=ou(e);switch(r.biff){case 2:e.l++,t-=7;break;case 3:case 4:e.l+=2,t-=8;break;default:e.l+=6,t-=12}return[n,qh(e,t,r)]}var Su={8:function(e,t){var r=e.l+t;e.l+=10;var n=e.read_shift(2);e.l+=4,e.l+=2,e.l+=2,e.l+=2,e.l+=4;var i=e.read_shift(1);return e.l+=i,e.l=r,{fmt:n}}};function Tu(e){var t=Fs(24),r=Ys(e[0]);t.write_shift(2,r.r),t.write_shift(2,r.r),t.write_shift(2,r.c),t.write_shift(2,r.c);for(var n="d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),i=0;i<16;++i)t.write_shift(1,parseInt(n[i],16));return Ii([t,Yl(e[1])])}function Eu(e){var t=e[1].Tooltip,r=Fs(10+2*(t.length+1));r.write_shift(2,2048);var n=Ys(e[0]);r.write_shift(2,n.r),r.write_shift(2,n.r),r.write_shift(2,n.c),r.write_shift(2,n.c);for(var i=0;i=12?4:2,i=e.read_shift(n),o=e.read_shift(n),a=e.read_shift(n),s=e.read_shift(n),c=e.read_shift(2);2==n&&(e.l+=2);var l={s:i,e:o,w:a,ixfe:s,flags:c};return(r.biff>=5||!r.biff)&&(l.level=c>>8&7),l}var Cu=Jl,Ru=Fl,Au=Wl;var Mu=[2,3,48,49,131,139,140,245],Pu=function(){var e={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,108:863,134:737,135:852,136:857,204:1257,255:16969},t=Fo({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function r(t,r){var n=r||{};n.dateNF||(n.dateNF="yyyymmdd");var i=nc(function(t,r){var n=[],i=Ci(1);switch(r.type){case"base64":i=Ai(Ti(t));break;case"binary":i=Ai(t);break;case"buffer":case"array":i=t}Ds(i,0);var o=i.read_shift(1),a=!!(136&o),s=!1,c=!1;switch(o){case 2:case 3:case 131:case 139:case 245:break;case 48:case 49:s=!0,a=!0;break;case 140:c=!0;break;default:throw new Error("DBF Unsupported Version: "+o.toString(16))}var l=0,u=521;2==o&&(l=i.read_shift(2)),i.l+=3,2!=o&&(l=i.read_shift(4)),l>1048576&&(l=1e6),2!=o&&(u=i.read_shift(2));var f=i.read_shift(2),h=r.codepage||1252;2!=o&&(i.l+=16,i.read_shift(1),0!==i[i.l]&&(h=e[i[i.l]]),i.l+=1,i.l+=2),c&&(i.l+=36);for(var d=[],p={},m=Math.min(i.length,2==o?521:u-10-(s?264:0)),b=c?32:11;i.l0;)if(42!==i[i.l])for(++i.l,n[++y]=[],v=0,v=0;v!=d.length;++v){var g=i.slice(i.l,i.l+d[v].len);i.l+=d[v].len,Ds(g,0);var w=gi.utils.decode(h,g);switch(d[v].type){case"C":w.trim().length&&(n[y][v]=w.replace(/\s+$/,""));break;case"D":8===w.length?n[y][v]=new Date(+w.slice(0,4),+w.slice(4,6)-1,+w.slice(6,8)):n[y][v]=w;break;case"F":n[y][v]=parseFloat(w.trim());break;case"+":case"I":n[y][v]=c?2147483648^g.read_shift(-4,"i"):g.read_shift(4,"i");break;case"L":switch(w.trim().toUpperCase()){case"Y":case"T":n[y][v]=!0;break;case"N":case"F":n[y][v]=!1;break;case"":case"?":break;default:throw new Error("DBF Unrecognized L:|"+w+"|")}break;case"M":if(!a)throw new Error("DBF Unexpected MEMO for type "+o.toString(16));n[y][v]="##MEMO##"+(c?parseInt(w.trim(),10):g.read_shift(4));break;case"N":(w=w.replace(/\u0000/g,"").trim())&&"."!=w&&(n[y][v]=+w||0);break;case"@":n[y][v]=new Date(g.read_shift(-8,"f")-621356832e5);break;case"T":n[y][v]=new Date(864e5*(g.read_shift(4)-2440588)+g.read_shift(4));break;case"Y":n[y][v]=g.read_shift(4,"i")/1e4+g.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":n[y][v]=-g.read_shift(-8,"f");break;case"B":if(s&&8==d[v].len){n[y][v]=g.read_shift(8,"f");break}case"G":case"P":g.l+=d[v].len;break;case"0":if("_NullFlags"===d[v].name)break;default:throw new Error("DBF Unsupported data type "+d[v].type)}}else i.l+=f;if(2!=o&&i.l=0&&mi(+i.codepage),"string"==i.type)throw new Error("Cannot write DBF to JS string");var o=Bs(),a=cb(e,{header:1,raw:!0,cellDates:!0}),s=a[0],c=a.slice(1),l=e["!cols"]||[],u=0,f=0,h=0,d=1;for(u=0;u250&&(w=250),"C"==(g=((l[u]||{}).DBF||{}).type)&&l[u].DBF.len>w&&(w=l[u].DBF.len),"B"==v&&"N"==g&&(v="N",y[u]=l[u].DBF.dec,w=l[u].DBF.len),b[u]="C"==v||"N"==g?w:n[v]||0,d+=b[u],m[u]=v}else m[u]="?"}var x=o.next(32);for(x.write_shift(4,318902576),x.write_shift(4,c.length),x.write_shift(2,296+32*h),x.write_shift(2,d),u=0;u<4;++u)x.write_shift(4,0);for(x.write_shift(4,0|(+t[fi]||3)<<8),u=0,f=0;u":190,"?":191,"{":223},t=new RegExp("N("+Do(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),r=function(t,r){var n=e[r];return"number"==typeof n?xi(n):n},n=function(e,t,r){var n=t.charCodeAt(0)-32<<4|r.charCodeAt(0)-48;return 59==n?e:xi(n)};function i(e,i){var o,a=e.split(/[\n\r]+/),s=-1,c=-1,l=0,u=0,f=[],h=[],d=null,p={},m=[],b=[],y=[],v=0;for(+i.codepage>=0&&mi(+i.codepage);l!==a.length;++l){v=0;var g,w=a[l].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,n).replace(t,r),_=w.replace(/;;/g,"\0").split(";").map((function(e){return e.replace(/\u0000/g,";")})),x=_[0];if(w.length>0)switch(x){case"ID":case"E":case"B":case"O":case"W":break;case"P":"P"==_[1].charAt(0)&&h.push(w.slice(3).replace(/;;/g,";"));break;case"C":var k=!1,S=!1,T=!1,E=!1,O=-1,C=-1;for(u=1;u<_.length;++u)switch(_[u].charAt(0)){case"A":case"G":break;case"X":c=parseInt(_[u].slice(1))-1,S=!0;break;case"Y":for(s=parseInt(_[u].slice(1))-1,S||(c=0),o=f.length;o<=s;++o)f[o]=[];break;case"K":'"'===(g=_[u].slice(1)).charAt(0)?g=g.slice(1,g.length-1):"TRUE"===g?g=!0:"FALSE"===g?g=!1:isNaN(Qo(g))?isNaN(ta(g).getDate())||(g=Yo(g)):(g=Qo(g),null!==d&&_o(d)&&(g=$o(g))),k=!0;break;case"E":E=!0;var R=ph(_[u].slice(1),{r:s,c:c});f[s][c]=[f[s][c],R];break;case"S":T=!0,f[s][c]=[f[s][c],"S5S"];break;case"R":O=parseInt(_[u].slice(1))-1;break;case"C":C=parseInt(_[u].slice(1))-1;break;default:if(i&&i.WTF)throw new Error("SYLK bad record "+w)}if(k&&(f[s][c]&&2==f[s][c].length?f[s][c][0]=g:f[s][c]=g,d=null),T){if(E)throw new Error("SYLK shared formula cannot have own formula");var A=O>-1&&f[O][C];if(!A||!A[1])throw new Error("SYLK shared formula cannot find base");f[s][c][1]=yh(A[1],{r:s-O,c:c-C})}break;case"F":var M=0;for(u=1;u<_.length;++u)switch(_[u].charAt(0)){case"X":c=parseInt(_[u].slice(1))-1,++M;break;case"Y":for(s=parseInt(_[u].slice(1))-1,o=f.length;o<=s;++o)f[o]=[];break;case"M":v=parseInt(_[u].slice(1))/20;break;case"F":case"G":case"S":case"D":case"N":break;case"P":d=h[parseInt(_[u].slice(1))];break;case"W":for(y=_[u].slice(1).split(" "),o=parseInt(y[0],10);o<=parseInt(y[1],10);++o)v=parseInt(y[2],10),b[o-1]=0===v?{hidden:!0}:{wch:v},kf(b[o-1]);break;case"C":b[c=parseInt(_[u].slice(1))-1]||(b[c]={});break;case"R":m[s=parseInt(_[u].slice(1))-1]||(m[s]={}),v>0?(m[s].hpt=v,m[s].hpx=Ef(v)):0===v&&(m[s].hidden=!0);break;default:if(i&&i.WTF)throw new Error("SYLK bad record "+w)}M<1&&(d=null);break;default:if(i&&i.WTF)throw new Error("SYLK bad record "+w)}}return m.length>0&&(p["!rows"]=m),b.length>0&&(p["!cols"]=b),i&&i.sheetRows&&(f=f.slice(0,i.sheetRows)),[f,p]}function o(e,t){var r=function(e,t){switch(t.type){case"base64":return i(Ti(e),t);case"binary":return i(e,t);case"buffer":return i(Ei&&Buffer.isBuffer(e)?e.toString("binary"):Pi(e),t);case"array":return i(Ko(e),t)}throw new Error("Unrecognized type "+t.type)}(e,t),n=r[0],o=r[1],a=nc(n,t);return Do(o).forEach((function(e){a[e]=o[e]})),a}function a(e,t,r,n){var i="C;Y"+(r+1)+";X"+(n+1)+";K";switch(e.t){case"n":i+=e.v||0,e.f&&!e.F&&(i+=";E"+bh(e.f,{r:r,c:n}));break;case"b":i+=e.v?"TRUE":"FALSE";break;case"e":i+=e.w||e.v;break;case"d":i+='"'+(e.w||e.v)+'"';break;case"s":i+='"'+e.v.replace(/"/g,"").replace(/;/g,";;")+'"'}return i}return e["|"]=254,{to_workbook:function(e,t){return rc(o(e,t),t)},to_sheet:o,from_sheet:function(e,t){var r,n,i=["ID;PWXL;N;E"],o=[],s=Qs(e["!ref"]),c=Array.isArray(e),l="\r\n";i.push("P;PGeneral"),i.push("F;P0;DG0G8;M255"),e["!cols"]&&(n=i,e["!cols"].forEach((function(e,t){var r="F;W"+(t+1)+" "+(t+1)+" ";e.hidden?r+="0":("number"!=typeof e.width||e.wpx||(e.wpx=vf(e.width)),"number"!=typeof e.wpx||e.wch||(e.wch=gf(e.wpx)),"number"==typeof e.wch&&(r+=Math.round(e.wch)))," "!=r.charAt(r.length-1)&&n.push(r)}))),e["!rows"]&&function(e,t){t.forEach((function(t,r){var n="F;";t.hidden?n+="M0;":t.hpt?n+="M"+20*t.hpt+";":t.hpx&&(n+="M"+20*Tf(t.hpx)+";"),n.length>2&&e.push(n+"R"+(r+1))}))}(i,e["!rows"]),i.push("B;Y"+(s.e.r-s.s.r+1)+";X"+(s.e.c-s.s.c+1)+";D"+[s.s.c,s.s.r,s.e.c,s.e.r].join(" "));for(var u=s.s.r;u<=s.e.r;++u)for(var f=s.s.c;f<=s.e.c;++f){var h=Ks({r:u,c:f});(r=c?(e[u]||[])[f]:e[h])&&(null!=r.v||r.f&&!r.F)&&o.push(a(r,0,u,f))}return i.join(l)+l+o.join(l)+l+"E"+l}}}(),Iu=function(){function e(e,t){for(var r=e.split("\n"),n=-1,i=-1,o=0,a=[];o!==r.length;++o)if("BOT"!==r[o].trim()){if(!(n<0)){for(var s=r[o].trim().split(","),c=s[0],l=s[1],u=r[++o]||"";1&(u.match(/["]/g)||[]).length&&o=0?s=l:i=l}})),c>=0&&-1==s&&i>=0&&(s=i,i=-1);var l=(""+(n>=0?n:(new Date).getFullYear())).slice(-4)+"-"+("00"+(i>=1?i:1)).slice(-2)+"-"+("00"+(o>=1?o:1)).slice(-2);7==l.length&&(l="0"+l),8==l.length&&(l="20"+l);var u=("00"+(a>=0?a:0)).slice(-2)+":"+("00"+(s>=0?s:0)).slice(-2)+":"+("00"+(c>=0?c:0)).slice(-2);return-1==a&&-1==s&&-1==c?l:-1==n&&-1==i&&-1==o?u:l+"T"+u}(0,r.dateNF,t.match(v)||[]),i=1),r.cellDates?(n.t="d",n.v=Yo(t,i)):(n.t="n",n.v=zo(Yo(t,i))),!1!==r.cellText&&(n.w=To(n.z,n.v instanceof Date?zo(n.v):n.v)),r.cellNF||delete n.z}else n.t="s",n.v=t;else n.t="n",!1!==r.cellText&&(n.w=t),n.v=l;if("z"==n.t||(r.dense?(o[s]||(o[s]=[]),o[s][c]=n):o[Ks({c:c,r:s})]=n),u=f+1,m=e.charCodeAt(u),a.e.c0&&g(),o["!ref"]=Js(a),o}function o(t,r){return r&&r.PRN?r.FS||"sep="==t.slice(0,4)||t.indexOf("\t")>=0||t.indexOf(",")>=0||t.indexOf(";")>=0?i(t,r):nc(function(t,r){var n=r||{},i=[];if(!t||0===t.length)return i;for(var o=t.split(/[\r\n]/),a=o.length-1;a>=0&&0===o[a].length;)--a;for(var s=10,c=0,l=0;l<=a;++l)-1==(c=o[l].indexOf(" "))?c=o[l].length:c++,s=Math.max(s,c);for(l=0;l<=a;++l){i[l]=[];var u=0;for(e(o[l].slice(0,s).trim(),i,l,u,n),u=1;u<=(o[l].length-s)/10+1;++u)e(o[l].slice(s+10*(u-1),s+10*u).trim(),i,l,u,n)}return n.sheetRows&&(i=i.slice(0,n.sheetRows)),i}(t,r),r):i(t,r)}function a(e,t){var r="",n="string"==t.type?[0,0,0,0]:Jm(e,t);switch(t.type){case"base64":r=Ti(e);break;case"binary":case"string":r=e;break;case"buffer":r=65001==t.codepage?e.toString("utf8"):t.codepage&&void 0!==gi?gi.utils.decode(t.codepage,e):Ei&&Buffer.isBuffer(e)?e.toString("binary"):Pi(e);break;case"array":r=Ko(e);break;default:throw new Error("Unrecognized type "+t.type)}return 239==n[0]&&187==n[1]&&191==n[2]?r=La(r.slice(3)):"string"!=t.type&&"buffer"!=t.type&&65001==t.codepage?r=La(r):"binary"==t.type&&void 0!==gi&&t.codepage&&(r=gi.utils.decode(t.codepage,gi.utils.encode(28591,r))),"socialcalc:version:"==r.slice(0,19)?Du.to_sheet("string"==t.type?r:La(r),t):o(r,t)}return{to_workbook:function(e,t){return rc(a(e,t),t)},to_sheet:a,from_sheet:function(e){for(var t,r=[],n=Qs(e["!ref"]),i=Array.isArray(e),o=n.s.r;o<=n.e.r;++o){for(var a=[],s=n.s.c;s<=n.e.c;++s){var c=Ks({r:o,c:s});if((t=i?(e[o]||[])[s]:e[c])&&null!=t.v){for(var l=(t.w||(tc(t),t.w)||"").slice(0,10);l.length<10;)l+=" ";a.push(l+(0===s?" ":""))}else a.push(" ")}r.push(a.join(""))}return r.join("\n")}}}();var Fu=function(){function e(e,t,r){if(e){Ds(e,e.l||0);for(var n=r.Enum||y;e.l=16&&5==t[14]&&108===t[15])throw new Error("Unsupported Works 3 for Mac file");if(2==t[2])n.Enum=y,e(t,(function(e,t,r){switch(r){case 0:n.vers=e,e>=4096&&(n.qpro=!0);break;case 6:f=e;break;case 204:e&&(a=e);break;case 222:a=e;break;case 15:case 51:n.qpro||(e[1].v=e[1].v.slice(1));case 13:case 14:case 16:14==r&&112==(112&e[2])&&(15&e[2])>1&&(15&e[2])<15&&(e[1].z=n.dateNF||qi[14],n.cellDates&&(e[1].t="d",e[1].v=$o(e[1].v))),n.qpro&&e[3]>s&&(i["!ref"]=Js(f),c[o]=i,l.push(o),i=n.dense?[]:{},f={s:{r:0,c:0},e:{r:0,c:0}},s=e[3],o=a||"Sheet"+(s+1),a="");var u=n.dense?(i[e[0].r]||[])[e[0].c]:i[Ks(e[0])];if(u){u.t=e[1].t,u.v=e[1].v,null!=e[1].z&&(u.z=e[1].z),null!=e[1].f&&(u.f=e[1].f);break}n.dense?(i[e[0].r]||(i[e[0].r]=[]),i[e[0].r][e[0].c]=e[1]):i[Ks(e[0])]=e[1]}}),n);else{if(26!=t[2]&&14!=t[2])throw new Error("Unrecognized LOTUS BOF "+t[2]);n.Enum=v,14==t[2]&&(n.qpro=!0,t.l=0),e(t,(function(e,t,r){switch(r){case 204:o=e;break;case 22:e[1].v=e[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(e[3]>s&&(i["!ref"]=Js(f),c[o]=i,l.push(o),i=n.dense?[]:{},f={s:{r:0,c:0},e:{r:0,c:0}},s=e[3],o="Sheet"+(s+1)),h>0&&e[0].r>=h)break;n.dense?(i[e[0].r]||(i[e[0].r]=[]),i[e[0].r][e[0].c]=e[1]):i[Ks(e[0])]=e[1],f.e.c=128?95:o)}return n.write_shift(1,0),n}function o(e,t,r){var n=Fs(7);return n.write_shift(1,255),n.write_shift(2,t),n.write_shift(2,e),n.write_shift(2,r,"i"),n}function a(e,t,r){var n=Fs(13);return n.write_shift(1,255),n.write_shift(2,t),n.write_shift(2,e),n.write_shift(8,r,"f"),n}function s(e,t,r){var n=32768&t;return t=(n?e:0)+((t&=-32769)>=8192?t-16384:t),(n?"":"$")+(r?Gs(t):qs(t))}var c={51:["FALSE",0],52:["TRUE",0],70:["LEN",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],111:["T",1]},l=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function u(e){var t=[{c:0,r:0},{t:"n",v:0},0];return t[0].r=e.read_shift(2),t[3]=e[e.l++],t[0].c=e[e.l++],t}function f(e,t,r,n){var i=Fs(6+n.length);i.write_shift(2,e),i.write_shift(1,r),i.write_shift(1,t),i.write_shift(1,39);for(var o=0;o=128?95:a)}return i.write_shift(1,0),i}function h(e,t){var r=u(e),n=e.read_shift(4),i=e.read_shift(4),o=e.read_shift(2);if(65535==o)return 0===n&&3221225472===i?(r[1].t="e",r[1].v=15):0===n&&3489660928===i?(r[1].t="e",r[1].v=42):r[1].v=0,r;var a=32768&o;return o=(32767&o)-16446,r[1].v=(1-2*a)*(i*Math.pow(2,o+32)+n*Math.pow(2,o)),r}function d(e,t,r,n){var i=Fs(14);if(i.write_shift(2,e),i.write_shift(1,r),i.write_shift(1,t),0==n)return i.write_shift(4,0),i.write_shift(4,0),i.write_shift(2,65535),i;var o,a=0,s=0,c=0;return n<0&&(a=1,n=-n),s=0|Math.log2(n),0==(2147483648&(c=(n/=Math.pow(2,s-31))>>>0))&&(++s,c=(n/=2)>>>0),n-=c,c|=2147483648,c>>>=0,o=(n*=Math.pow(2,32))>>>0,i.write_shift(4,o),i.write_shift(4,c),s+=16383+(a?32768:0),i.write_shift(2,s),i}function p(e,t){var r=u(e),n=e.read_shift(8,"f");return r[1].v=n,r}function m(e,t){return 0==e[e.l+t-1]?e.read_shift(t,"cstr"):""}function b(e,t){var r=Fs(5+e.length);r.write_shift(2,14e3),r.write_shift(2,t);for(var n=0;n127?95:i}return r[r.l++]=0,r}var y={0:{n:"BOF",f:Dl},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f:function(e,t,r){var n={s:{c:0,r:0},e:{c:0,r:0}};return 8==t&&r.qpro?(n.s.c=e.read_shift(1),e.l++,n.s.r=e.read_shift(2),n.e.c=e.read_shift(1),e.l++,n.e.r=e.read_shift(2),n):(n.s.c=e.read_shift(2),n.s.r=e.read_shift(2),12==t&&r.qpro&&(e.l+=2),n.e.c=e.read_shift(2),n.e.r=e.read_shift(2),12==t&&r.qpro&&(e.l+=2),65535==n.s.c&&(n.s.c=n.e.c=n.s.r=n.e.r=0),n)}},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:function(e,t,n){var i=r(e,0,n);return i[1].v=e.read_shift(2,"i"),i}},14:{n:"NUMBER",f:function(e,t,n){var i=r(e,0,n);return i[1].v=e.read_shift(8,"f"),i}},15:{n:"LABEL",f:n},16:{n:"FORMULA",f:function(e,t,n){var i=e.l+t,o=r(e,0,n);if(o[1].v=e.read_shift(8,"f"),n.qpro)e.l=i;else{var a=e.read_shift(2);!function(e,t){Ds(e,0);var r=[],n=0,i="",o="",a="",u="";for(;e.lr.length)return void console.error("WK1 bad formula parse 0x"+f.toString(16)+":|"+r.join("|")+"|");var m=r.slice(-n);r.length-=n,r.push(c[f][0]+"("+m.join(",")+")")}}}1==r.length?t[1].f=""+r[0]:console.error("WK1 bad formula parse |"+r.join("|")+"|")}(e.slice(e.l,e.l+a),o),e.l+=a}return o}},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:n},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:m},222:{n:"SHEETNAMELP",f:function(e,t){var r=e[e.l++];r>t-1&&(r=t-1);for(var n="";n.length>1;if(1&r[1].v)switch(7&n){case 0:n=5e3*(n>>3);break;case 1:n=500*(n>>3);break;case 2:n=(n>>3)/20;break;case 3:n=(n>>3)/200;break;case 4:n=(n>>3)/2e3;break;case 5:n=(n>>3)/2e4;break;case 6:n=(n>>3)/16;break;case 7:n=(n>>3)/64}return r[1].v=n,r}},25:{n:"FORMULA19",f:function(e,t){var r=h(e);return e.l+=t-14,r}},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:function(e,t){for(var r={},n=e.l+t;e.l>6,r}},38:{n:"??"},39:{n:"NUMBER27",f:p},40:{n:"FORMULA28",f:function(e,t){var r=p(e);return e.l+=t-10,r}},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:m},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:function(e,t,r){if(r.qpro&&!(t<21)){var n=e.read_shift(1);return e.l+=17,e.l+=1,e.l+=2,[n,e.read_shift(t-21,"cstr")]}}},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:function(e,t){var r=t||{};if(+r.codepage>=0&&mi(+r.codepage),"string"==r.type)throw new Error("Cannot write WK1 to JS string");var n,s,c=Bs(),l=Qs(e["!ref"]),u=Array.isArray(e),f=[];Kp(c,0,(n=1030,(s=Fs(2)).write_shift(2,n),s)),Kp(c,6,function(e){var t=Fs(8);return t.write_shift(2,e.s.c),t.write_shift(2,e.s.r),t.write_shift(2,e.e.c),t.write_shift(2,e.e.r),t}(l));for(var h=Math.min(l.e.r,8191),d=l.s.r;d<=h;++d)for(var p=qs(d),m=l.s.c;m<=l.e.c;++m){d===l.s.r&&(f[m]=Gs(m));var b=f[m]+p,y=u?(e[d]||[])[m]:e[b];if(y&&"z"!=y.t)if("n"==y.t)(0|y.v)==y.v&&y.v>=-32768&&y.v<=32767?Kp(c,13,o(d,m,y.v)):Kp(c,14,a(d,m,y.v));else Kp(c,15,i(d,m,tc(y).slice(0,239)))}return Kp(c,1),c.end()},book_to_wk3:function(e,t){var r=t||{};if(+r.codepage>=0&&mi(+r.codepage),"string"==r.type)throw new Error("Cannot write WK3 to JS string");var n=Bs();Kp(n,0,function(e){var t=Fs(26);t.write_shift(2,4096),t.write_shift(2,4),t.write_shift(4,0);for(var r=0,n=0,i=0,o=0;o8191&&(r=8191);return t.write_shift(2,r),t.write_shift(1,i),t.write_shift(1,n),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(1,1),t.write_shift(1,2),t.write_shift(4,0),t.write_shift(4,0),t}(e));for(var i=0,o=0;i":case"":t.shadow=1;break;case"":break;case"":case"":t.outline=1;break;case"":break;case"":case"":t.strike=1;break;case"":break;case"":case"":t.u=1;break;case"":break;case"":case"":t.b=1;break;case"":break;case"":case"":t.i=1;break;case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":case"":case"":case"":case"":case"":break;case"":i=!1;break;default:if(47!==o[0].charCodeAt(1)&&!i)throw new Error("Unrecognized rich format "+o[0])}}return t}(o[1])),i}var n=/<(?:\w+:)?r>/g,i=/<\/(?:\w+:)?r>/;return function(e){return e.replace(n,"").split(i).map(r).filter((function(e){return e.v}))}}(),Bu=function(){var e=/(\r\n|\n)/g;function t(t){var r=[[],t.v,[]];return t.v?(t.s&&function(e,t,r){var n=[];e.u&&n.push("text-decoration: underline;"),e.uval&&n.push("text-underline-style:"+e.uval+";"),e.sz&&n.push("font-size:"+e.sz+"pt;"),e.outline&&n.push("text-effect: outline;"),e.shadow&&n.push("text-shadow: auto;"),t.push(''),e.b&&(t.push(""),r.push("")),e.i&&(t.push(""),r.push("")),e.strike&&(t.push(""),r.push(""));var i=e.valign||"";"superscript"==i||"super"==i?i="sup":"subscript"==i&&(i="sub"),""!=i&&(t.push("<"+i+">"),r.push("")),r.push("")}(t.s,r[0],r[2]),r[0].join("")+r[1].replace(e,"
")+r[2].join("")):""}return function(e){return e.map(t).join("")}}(),zu=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,Uu=/<(?:\w+:)?r>/,Hu=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function Wu(e,t){var r=!t||t.cellHTML,n={};return e?(e.match(/^\s*<(?:\w+:)?t[^>]*>/)?(n.t=Ta(La(e.slice(e.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")),n.r=La(e),r&&(n.h=Ma(n.t))):e.match(Uu)&&(n.r=La(e),n.t=Ta(La((e.replace(Hu,"").match(zu)||[]).join("").replace(va,""))),r&&(n.h=Bu(Lu(n.r)))),n):{t:""}}var $u=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,Vu=/<(?:\w+:)?(?:si|sstItem)>/g,qu=/<\/(?:\w+:)?(?:si|sstItem)>/;var Xu=/^\s|\s$|[\t\n\r]/;function Gu(e,t){if(!t.bookSST)return"";var r=[ma];r[r.length]=Ya("sst",null,{xmlns:es[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(null!=e[n]){var i=e[n],o="";i.r?o+=i.r:(o+=""),o+="",r[r.length]=o}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}var Yu=function(e,t){var r=!1;return null==t&&(r=!0,t=Fs(15+4*e.t.length)),t.write_shift(1,0),ac(e.t,t),r?t.slice(0,t.l):t};function Ku(e){var t=Bs();zs(t,159,function(e,t){return t||(t=Fs(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}(e));for(var r=0;r=4&&(e.l+=t-4),r}function Qu(e){for(var t=e.read_shift(4),r=e.l+t-4,n={},i=e.read_shift(4),o=[];i-- >0;)o.push({t:e.read_shift(4),v:e.read_shift(0,"lpp4")});if(n.name=e.read_shift(0,"lpp4"),n.comps=o,e.l!=r)throw new Error("Bad DataSpaceMapEntry: "+e.l+" != "+r);return n}function ef(e){var t=function(e){var t={};return e.read_shift(4),e.l+=4,t.id=e.read_shift(0,"lpp4"),t.name=e.read_shift(0,"lpp4"),t.R=Ju(e,4),t.U=Ju(e,4),t.W=Ju(e,4),t}(e);if(t.ename=e.read_shift(0,"8lpp4"),t.blksz=e.read_shift(4),t.cmode=e.read_shift(4),4!=e.read_shift(4))throw new Error("Bad !Primary record");return t}function tf(e,t){var r=e.l+t,n={};n.Flags=63&e.read_shift(4),e.l+=4,n.AlgID=e.read_shift(4);var i=!1;switch(n.AlgID){case 26126:case 26127:case 26128:i=36==n.Flags;break;case 26625:i=4==n.Flags;break;case 0:i=16==n.Flags||4==n.Flags||36==n.Flags;break;default:throw"Unrecognized encryption algorithm: "+n.AlgID}if(!i)throw new Error("Encryption Flags/AlgID mismatch");return n.AlgIDHash=e.read_shift(4),n.KeySize=e.read_shift(4),n.ProviderType=e.read_shift(4),e.l+=8,n.CSPName=e.read_shift(r-e.l>>1,"utf16le"),e.l=r,n}function rf(e,t){var r={},n=e.l+t;return e.l+=4,r.Salt=e.slice(e.l,e.l+16),e.l+=16,r.Verifier=e.slice(e.l,e.l+16),e.l+=16,e.read_shift(4),r.VerifierHash=e.slice(e.l,n),e.l=n,r}function nf(e){if(36!=(63&e.read_shift(4)))throw new Error("EncryptionInfo mismatch");var t=e.read_shift(4);return{t:"Std",h:tf(e,t),v:rf(e,e.length-e.l)}}function of(){throw new Error("File is password-protected: ECMA-376 Extensible")}function af(e){var t=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];e.l+=4;var r=e.read_shift(e.length-e.l,"utf8"),n={};return r.replace(va,(function(e){var r=_a(e);switch(xa(r[0])){case"":case"":case"":break;case"":case"=0;--r)n=((0==(16384&n)?0:1)|n<<1&32767)^t[r];return 52811^n}var cf=function(){var e=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],t=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],r=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],n=function(e,t){return 255&((r=e^t)/2|128*r);var r};return function(i){for(var o,a,s,c=Zu(i),l=function(e){for(var n=t[e.length-1],i=104,o=e.length-1;o>=0;--o)for(var a=e[o],s=0;7!=s;++s)64&a&&(n^=r[i]),a*=2,--i;return n}(c),u=c.length,f=Ci(16),h=0;16!=h;++h)f[h]=0;for(1==(1&u)&&(o=l>>8,f[u]=n(e[0],o),--u,o=255&l,a=c[c.length-1],f[u]=n(a,o));u>0;)o=l>>8,f[--u]=n(c[u],o),o=255&l,f[--u]=n(c[u],o);for(u=15,s=15-c.length;s>0;)o=l>>8,f[u]=n(e[s],o),--s,o=255&l,f[--u]=n(c[u],o),--u,--s;return f}}(),lf=function(e){var t=0,r=cf(e);return function(e){var n=function(e,t,r,n,i){var o,a;for(i||(i=t),n||(n=cf(e)),o=0;o!=t.length;++o)a=t[o],a=255&((a^=n[r])>>5|a<<3),i[o]=a,++r;return[i,r,n]}("",e,t,r);return t=n[1],n[0]}};function uf(e,t,r){var n=r||{};return n.Info=e.read_shift(2),e.l-=2,1===n.Info?n.Data=function(e){var t={},r=t.EncryptionVersionInfo=Ju(e,4);if(1!=r.Major||1!=r.Minor)throw"unrecognized version code "+r.Major+" : "+r.Minor;return t.Salt=e.read_shift(16),t.EncryptedVerifier=e.read_shift(16),t.EncryptedVerifierHash=e.read_shift(16),t}(e):n.Data=function(e,t){var r={},n=r.EncryptionVersionInfo=Ju(e,4);if(t-=4,2!=n.Minor)throw new Error("unrecognized minor version code: "+n.Minor);if(n.Major>4||n.Major<2)throw new Error("unrecognized major version code: "+n.Major);r.Flags=e.read_shift(4),t-=4;var i=e.read_shift(4);return t-=4,r.EncryptionHeader=tf(e,i),t-=i,r.EncryptionVerifier=rf(e,t),r}(e,t),n}var ff=function(){function e(e,r){switch(r.type){case"base64":return t(Ti(e),r);case"binary":return t(e,r);case"buffer":return t(Ei&&Buffer.isBuffer(e)?e.toString("binary"):Pi(e),r);case"array":return t(Ko(e),r)}throw new Error("Unrecognized type "+r.type)}function t(e,t){var r=(t||{}).dense?[]:{},n=e.match(/\\trowd.*?\\row\b/g);if(!n.length)throw new Error("RTF missing table");var i={s:{c:0,r:0},e:{c:0,r:n.length-1}};return n.forEach((function(e,t){Array.isArray(r)&&(r[t]=[]);for(var n,o=/\\\w+\b/g,a=0,s=-1;n=o.exec(e);){if("\\cell"===n[0]){var c=e.slice(a,o.lastIndex-n[0].length);if(" "==c[0]&&(c=c.slice(1)),++s,c.length){var l={v:c,t:"s"};Array.isArray(r)?r[t][s]=l:r[Ks({r:t,c:s})]=l}}a=o.lastIndex}s>i.e.c&&(i.e.c=s)})),r["!ref"]=Js(i),r}return{to_workbook:function(t,r){return rc(e(t,r),r)},to_sheet:e,from_sheet:function(e){for(var t,r=["{\\rtf1\\ansi"],n=Qs(e["!ref"]),i=Array.isArray(e),o=n.s.r;o<=n.e.r;++o){r.push("\\trowd\\trautofit1");for(var a=n.s.c;a<=n.e.c;++a)r.push("\\cellx"+(a+1));for(r.push("\\pard\\intbl"),a=n.s.c;a<=n.e.c;++a){var s=Ks({r:o,c:a});(t=i?(e[o]||[])[a]:e[s])&&(null!=t.v||t.f&&!t.F)&&(r.push(" "+(t.w||(tc(t),t.w))),r.push("\\cell"))}r.push("\\pard\\intbl\\row")}return r.join("")+"}"}}}();function hf(e){for(var t=0,r=1;3!=t;++t)r=256*r+(e[t]>255?255:e[t]<0?0:e[t]);return r.toString(16).toUpperCase().slice(1)}function df(e,t){if(0===t)return e;var r=function(e){var t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(t,r,n),o=Math.min(t,r,n),a=i-o;if(0===a)return[0,0,t];var s,c=0,l=i+o;switch(s=a/(l>1?2-l:l),i){case t:c=((r-n)/a+6)%6;break;case r:c=(n-t)/a+2;break;case n:c=(t-r)/a+4}return[c/6,s,l/2]}(function(e){var t=e.slice("#"===e[0]?1:0).slice(0,6);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]}(e));return r[2]=t<0?r[2]*(1+t):1-(1-r[2])*(1-t),hf(function(e){var t,r=e[0],n=e[1],i=e[2],o=2*n*(i<.5?i:1-i),a=i-o/2,s=[a,a,a],c=6*r;if(0!==n)switch(0|c){case 0:case 6:t=o*c,s[0]+=o,s[1]+=t;break;case 1:t=o*(2-c),s[0]+=t,s[1]+=o;break;case 2:t=o*(c-2),s[1]+=o,s[2]+=t;break;case 3:t=o*(4-c),s[1]+=t,s[2]+=o;break;case 4:t=o*(c-4),s[2]+=o,s[0]+=t;break;case 5:t=o*(6-c),s[2]+=t,s[0]+=o}for(var l=0;3!=l;++l)s[l]=Math.round(255*s[l]);return s}(r))}var pf=6,mf=15,bf=1,yf=pf;function vf(e){return Math.floor((e+Math.round(128/yf)/256)*yf)}function gf(e){return Math.floor((e-5)/yf*100+.5)/100}function wf(e){return Math.round((e*yf+5)/yf*256)/256}function _f(e){return wf(gf(vf(e)))}function xf(e){var t=Math.abs(e-_f(e)),r=yf;if(t>.005)for(yf=bf;yf]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/,t=/<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/,r=/<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/,n=/<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/,i=/<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/;return function(o,a,s){var c,l={};return o?((c=(o=o.replace(//gm,"").replace(//gm,"")).match(e))&&function(e,t,r){t.NumberFmt=[];for(var n=Do(qi),i=0;i":case"":case"":case"":break;case"0){if(c>392){for(c=392;c>60&&null!=t.NumberFmt[c];--c);t.NumberFmt[c]=s}Eo(s,c)}break;default:if(r.WTF)throw new Error("unrecognized "+a[0]+" in numFmts")}}}(c,l,s),(c=o.match(n))&&function(e,t,r,n){t.Fonts=[];var i={},o=!1;(e[0].match(va)||[]).forEach((function(e){var a=_a(e);switch(xa(a[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":t.Fonts.push(i),i={};break;case"":i.bold=1;break;case"":i.italic=1;break;case"":i.underline=1;break;case"":i.strike=1;break;case"":i.outline=1;break;case"":i.shadow=1;break;case"":i.condense=1;break;case"":i.extend=1;break;case"":case"":o=!1;break;default:if(n&&n.WTF&&!o)throw new Error("unrecognized "+a[0]+" in fonts")}}))}(c,l,a,s),(c=o.match(r))&&function(e,t,r,n){t.Fills=[];var i={},o=!1;(e[0].match(va)||[]).forEach((function(e){var r=_a(e);switch(xa(r[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":i={},t.Fills.push(i);break;case"":t.Fills.push(i),i={};break;case"":r.patternType&&(i.patternType=r.patternType);break;case"":o=!1;break;default:if(n&&n.WTF&&!o)throw new Error("unrecognized "+r[0]+" in fills")}}))}(c,l,0,s),(c=o.match(i))&&function(e,t,r,n){t.Borders=[];var i={},o=!1;(e[0].match(va)||[]).forEach((function(e){var r=_a(e);switch(xa(r[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":i={},r.diagonalUp&&(i.diagonalUp=ja(r.diagonalUp)),r.diagonalDown&&(i.diagonalDown=ja(r.diagonalDown)),t.Borders.push(i);break;case"":o=!1;break;default:if(n&&n.WTF&&!o)throw new Error("unrecognized "+r[0]+" in borders")}}))}(c,l,0,s),(c=o.match(t))&&function(e,t,r){var n;t.CellXf=[];var i=!1;(e[0].match(va)||[]).forEach((function(e){var o=_a(e),a=0;switch(xa(o[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":for(delete(n=o)[0],a=0;a392)for(a=392;a>60;--a)if(t.NumberFmt[n.numFmtId]==t.NumberFmt[a]){n.numFmtId=a;break}t.CellXf.push(n);break;case"":var s={};o.vertical&&(s.vertical=o.vertical),o.horizontal&&(s.horizontal=o.horizontal),null!=o.textRotation&&(s.textRotation=o.textRotation),o.indent&&(s.indent=o.indent),o.wrapText&&(s.wrapText=ja(o.wrapText)),n.alignment=s;break;case"":case"":i=!1;break;default:if(r&&r.WTF&&!i)throw new Error("unrecognized "+o[0]+" in cellXfs")}}))}(c,l,s),l):l}}();function Mf(e,t){var r,n=[ma,Ya("styleSheet",null,{xmlns:es[0],"xmlns:vt":Qa.vt})];return e.SSF&&null!=(r=function(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var n=r[0];n<=r[1];++n)null!=e[n]&&(t[t.length]=Ya("numFmt",null,{numFmtId:n,formatCode:Ca(e[n])}))})),1===t.length?"":(t[t.length]="",t[0]=Ya("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(e.SSF))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',(r=function(e){var t=[];return t[t.length]=Ya("cellXfs",null),e.forEach((function(e){t[t.length]=Ya("xf",null,e)})),t[t.length]="",2===t.length?"":(t[0]=Ya("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(t.cellXfs))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}function Pf(e,t,r){r||(r=Fs(6+4*t.length)),r.write_shift(2,e),ac(t,r);var n=r.length>r.l?r.slice(0,r.l):r;return null==r.l&&(r.l=r.length),n}function jf(e,t){t||(t=Fs(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=Fs(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);t.write_shift(1,r),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var r=0;"superscript"==e.vertAlign?r=1:"subscript"==e.vertAlign&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),Rc(e.color,t);var n=0;return"major"==e.scheme&&(n=1),"minor"==e.scheme&&(n=2),t.write_shift(1,n),ac(e.name,t),t.length>t.l?t.slice(0,t.l):t}var If,Df=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Nf=Ns;function Ff(e,t){t||(t=Fs(84)),If||(If=Fo(Df));var r=If[e.patternType];null==r&&(r=40),t.write_shift(4,r);var n=0;if(40!=r)for(Rc({auto:1},t),Rc({auto:1},t);n<12;++n)t.write_shift(4,0);else{for(;n<4;++n)t.write_shift(4,0);for(;n<12;++n)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Lf(e,t,r){r||(r=Fs(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0);return r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function Bf(e,t){return t||(t=Fs(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var zf=Ns;function Uf(e){var t;zs(e,613,ic(1)),zs(e,46,(t||(t=Fs(51)),t.write_shift(1,0),Bf(0,t),Bf(0,t),Bf(0,t),Bf(0,t),Bf(0,t),t.length>t.l?t.slice(0,t.l):t)),zs(e,614)}function Hf(e){var t,r;zs(e,619,ic(1)),zs(e,48,(t={xfId:0,builtinId:0,name:"Normal"},r||(r=Fs(52)),r.write_shift(4,t.xfId),r.write_shift(2,1),r.write_shift(1,+t.builtinId),r.write_shift(1,0),vc(t.name||"",r),r.length>r.l?r.slice(0,r.l):r)),zs(e,620)}function Wf(e){zs(e,508,function(e,t,r){var n=Fs(2052);return n.write_shift(4,e),vc(t,n),vc(r,n),n.length>n.l?n.slice(0,n.l):n}(0,"TableStyleMedium9","PivotStyleMedium4")),zs(e,509)}function $f(e,t){var r=Bs();return zs(r,278),function(e,t){if(t){var r=0;[[5,8],[23,26],[41,44],[50,392]].forEach((function(e){for(var n=e[0];n<=e[1];++n)null!=t[n]&&++r})),0!=r&&(zs(e,615,ic(r)),[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var n=r[0];n<=r[1];++n)null!=t[n]&&zs(e,44,Pf(n,t[n]))})),zs(e,616))}}(r,e.SSF),function(e){zs(e,611,ic(1)),zs(e,43,jf({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),zs(e,612)}(r),function(e){zs(e,603,ic(2)),zs(e,45,Ff({patternType:"none"})),zs(e,45,Ff({patternType:"gray125"})),zs(e,604)}(r),Uf(r),function(e){zs(e,626,ic(1)),zs(e,47,Lf({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),zs(e,627)}(r),function(e,t){zs(e,617,ic(t.length)),t.forEach((function(t){zs(e,47,Lf(t,0))})),zs(e,618)}(r,t.cellXfs),Hf(r),function(e){zs(e,505,ic(0)),zs(e,506)}(r),Wf(r),zs(r,279),r.end()}var Vf=["","","","","","","","","","","",""];function qf(e,t,r){t.themeElements.clrScheme=[];var n={};(e[0].match(va)||[]).forEach((function(e){var i=_a(e);switch(i[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":"/"===i[0].charAt(1)?(t.themeElements.clrScheme[Vf.indexOf(i[0])]=n,n={}):n.name=i[0].slice(3,i[0].length-1);break;default:if(r&&r.WTF)throw new Error("Unrecognized "+i[0]+" in clrScheme")}}))}function Xf(){}function Gf(){}var Yf=/]*)>[\s\S]*<\/a:clrScheme>/,Kf=/]*)>[\s\S]*<\/a:fontScheme>/,Zf=/]*)>[\s\S]*<\/a:fmtScheme>/;var Jf=/]*)>[\s\S]*<\/a:themeElements>/;function Qf(e,t){var r;e&&0!==e.length||(e=eh());var n={};if(!(r=e.match(Jf)))throw new Error("themeElements not found in theme");return function(e,t,r){var n;t.themeElements={},[["clrScheme",Yf,qf],["fontScheme",Kf,Xf],["fmtScheme",Zf,Gf]].forEach((function(i){if(!(n=e.match(i[1])))throw new Error(i[0]+" not found in themeElements");i[2](n,t,r)}))}(r[0],n,t),n.raw=e,n}function eh(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var r=[ma];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function th(e){var t={};switch(t.xclrType=e.read_shift(2),t.nTintShade=e.read_shift(2),t.xclrType){case 0:case 4:e.l+=4;break;case 1:t.xclrValue=function(e,t){return Ns(e,t)}(e,4);break;case 2:t.xclrValue=Kl(e);break;case 3:t.xclrValue=function(e){return e.read_shift(4)}(e)}return e.l+=8,t}function rh(e){var t=e.read_shift(2),r=e.read_shift(2)-4,n=[t];switch(t){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:n[1]=th(e);break;case 6:n[1]=function(e,t){return Ns(e,t)}(e,r);break;case 14:case 15:n[1]=e.read_shift(1===r?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+t+" "+r)}return n}function nh(){var e,t,r=Bs();return zs(r,332),zs(r,334,ic(1)),zs(r,335,((t=Fs(12+2*(e={name:"XLDAPR",version:12e4,flags:3496657072}).name.length)).write_shift(4,e.flags),t.write_shift(4,e.version),ac(e.name,t),t.slice(0,t.l))),zs(r,336),zs(r,339,function(e,t){var r=Fs(8+2*t.length);return r.write_shift(4,e),ac(t,r),r.slice(0,r.l)}(1,"XLDAPR")),zs(r,52),zs(r,35,ic(514)),zs(r,4096,ic(0)),zs(r,4097,Nl(1)),zs(r,36),zs(r,53),zs(r,340),zs(r,337,function(e,t){var r=Fs(8);return r.write_shift(4,e),r.write_shift(4,t?1:0),r}(1,!0)),zs(r,51,function(e){var t=Fs(4+8*e.length);t.write_shift(4,e.length);for(var r=0;r\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),e.join("")}var oh=1024;function ah(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),i=[Ya("xml",null,{"xmlns:v":ts.v,"xmlns:o":ts.o,"xmlns:x":ts.x,"xmlns:mv":ts.mv}).replace(/\/>/,">"),Ya("o:shapelayout",Ya("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),Ya("v:shapetype",[Ya("v:stroke",null,{joinstyle:"miter"}),Ya("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];oh<1e3*e;)oh+=1e3;return t.forEach((function(e){var t=Ys(e[0]),r={color2:"#BEFF82",type:"gradient"};"gradient"==r.type&&(r.angle="-180");var n="gradient"==r.type?Ya("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,o=Ya("v:fill",n,r);++oh,i=i.concat(["",o,Ya("v:shadow",null,{on:"t",obscured:"t"}),Ya("v:path",null,{"o:connecttype":"none"}),'
','',"","",Xa("x:Anchor",[t.c+1,0,t.r+1,0,t.c+3,20,t.r+5,20].join(",")),Xa("x:AutoFill","False"),Xa("x:Row",String(t.r)),Xa("x:Column",String(t.c)),e[1].hidden?"":"","",""])})),i.push(""),i.join("")}function sh(e,t,r,n){var i,o=Array.isArray(e);t.forEach((function(t){var a=Ys(t.ref);if(o?(e[a.r]||(e[a.r]=[]),i=e[a.r][a.c]):i=e[t.ref],!i){i={t:"z"},o?e[a.r][a.c]=i:e[t.ref]=i;var s=Qs(e["!ref"]||"BDWGO1000001:A1");s.s.r>a.r&&(s.s.r=a.r),s.e.ra.c&&(s.s.c=a.c),s.e.c=0;--u){if(!r&&i.c[u].T)return;r&&!i.c[u].T&&i.c.splice(u,1)}if(r&&n)for(u=0;u"),e.forEach((function(e){e[1].forEach((function(e){var n=Ca(e.a);-1==r.indexOf(n)&&(r.push(n),t.push(""+n+"")),e.T&&e.ID&&-1==r.indexOf("tc="+e.ID)&&(r.push("tc="+e.ID),t.push("tc="+e.ID+""))}))})),0==r.length&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach((function(e){var n=0,i=[];if(e[1][0]&&e[1][0].T&&e[1][0].ID?n=r.indexOf("tc="+e[1][0].ID):e[1].forEach((function(e){e.a&&(n=r.indexOf(Ca(e.a))),i.push(e.t||"")})),t.push(''),i.length<=1)t.push(Xa("t",Ca(i[0]||"")));else{for(var o="Comment:\n "+i[0]+"\n",a=1;a")})),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function lh(e,t,r){var n=[ma,Ya("ThreadedComments",null,{xmlns:Qa.TCMNT}).replace(/[\/]>/,">")];return e.forEach((function(e){var i="";(e[1]||[]).forEach((function(o,a){if(o.T){o.a&&-1==t.indexOf(o.a)&&t.push(o.a);var s={ref:e[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};0==a?i=s.id:s.parentId=i,o.ID=s.id,o.a&&(s.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(o.a)).slice(-12)+"}"),n.push(Ya("threadedComment",Xa("text",o.t||""),s))}else delete o.ID}))})),n.push(""),n.join("")}var uh=oc;function fh(e){var t=Bs(),r=[];return zs(t,628),zs(t,630),e.forEach((function(e){e[1].forEach((function(e){r.indexOf(e.a)>-1||(r.push(e.a.slice(0,54)),zs(t,632,function(e){return ac(e.slice(0,54))}(e.a)))}))})),zs(t,631),zs(t,633),e.forEach((function(e){e[1].forEach((function(n){n.iauthor=r.indexOf(n.a);var i={s:Ys(e[0]),e:Ys(e[0])};zs(t,635,function(e,t){return null==t&&(t=Fs(36)),t.write_shift(4,e[1].iauthor),Ec(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}([i,n])),n.t&&n.t.length>0&&zs(t,637,uc(n)),zs(t,636),delete n.iauthor}))})),zs(t,634),zs(t,629),t.end()}var hh="application/vnd.ms-office.vbaProject";var dh=["xlsb","xlsm","xlam","biff8","xla"];var ph=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function r(e,r,n,i){var o=!1,a=!1;0==n.length?a=!0:"["==n.charAt(0)&&(a=!0,n=n.slice(1,-1)),0==i.length?o=!0:"["==i.charAt(0)&&(o=!0,i=i.slice(1,-1));var s=n.length>0?0|parseInt(n,10):0,c=i.length>0?0|parseInt(i,10):0;return o?c+=t.c:--c,a?s+=t.r:--s,r+(o?"":"$")+Gs(c)+(a?"":"$")+qs(s)}return function(n,i){return t=i,n.replace(e,r)}}(),mh=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,bh=function(){return function(e,t){return e.replace(mh,(function(e,r,n,i,o,a){var s=Xs(i)-(n?0:t.c),c=Vs(a)-(o?0:t.r);return r+"R"+(0==c?"":o?c+1:"["+c+"]")+"C"+(0==s?"":n?s+1:"["+s+"]")}))}}();function yh(e,t){return e.replace(mh,(function(e,r,n,i,o,a){return r+("$"==n?n+i:Gs(Xs(i)+t.c))+("$"==o?o+a:qs(Vs(a)+t.r))}))}function vh(e,t,r){var n=Zs(t).s,i=Ys(r);return yh(e,{r:i.r-n.r,c:i.c-n.c})}function gh(e){return e.replace(/_xlfn\./g,"")}function wh(e){e.l+=1}function _h(e,t){var r=e.read_shift(1==t?1:2);return[16383&r,r>>14&1,r>>15&1]}function xh(e,t,r){var n=2;if(r){if(r.biff>=2&&r.biff<=5)return kh(e);12==r.biff&&(n=4)}var i=e.read_shift(n),o=e.read_shift(n),a=_h(e,2),s=_h(e,2);return{s:{r:i,c:a[0],cRel:a[1],rRel:a[2]},e:{r:o,c:s[0],cRel:s[1],rRel:s[2]}}}function kh(e){var t=_h(e,2),r=_h(e,2),n=e.read_shift(1),i=e.read_shift(1);return{s:{r:t[0],c:n,cRel:t[1],rRel:t[2]},e:{r:r[0],c:i,cRel:r[1],rRel:r[2]}}}function Sh(e,t,r){if(r&&r.biff>=2&&r.biff<=5)return function(e){var t=_h(e,2),r=e.read_shift(1);return{r:t[0],c:r,cRel:t[1],rRel:t[2]}}(e);var n=e.read_shift(r&&12==r.biff?4:2),i=_h(e,2);return{r:n,c:i[0],cRel:i[1],rRel:i[2]}}function Th(e){var t=e.read_shift(2),r=e.read_shift(2);return{r:t,c:255&r,fQuoted:!!(16384&r),cRel:r>>15,rRel:r>>15}}function Eh(e){var t=1&e[e.l+1];return e.l+=4,[t,1]}function Oh(e){return[e.read_shift(1),e.read_shift(1)]}function Ch(e,t){var r=[e.read_shift(1)];if(12==t)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2}switch(r[0]){case 4:r[1]=jl(e,1)?"TRUE":"FALSE",12!=t&&(e.l+=7);break;case 37:case 16:r[1]=Wc[e[e.l]],e.l+=12==t?4:8;break;case 0:e.l+=8;break;case 1:r[1]=Oc(e);break;case 2:r[1]=$l(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+r[0])}return r}function Rh(e,t,r){for(var n=e.read_shift(12==r.biff?4:2),i=[],o=0;o!=n;++o)i.push((12==r.biff?Tc:ru)(e));return i}function Ah(e,t,r){var n=0,i=0;12==r.biff?(n=e.read_shift(4),i=e.read_shift(4)):(i=1+e.read_shift(1),n=1+e.read_shift(2)),r.biff>=2&&r.biff<8&&(--n,0==--i&&(i=256));for(var o=0,a=[];o!=n&&(a[o]=[]);++o)for(var s=0;s!=i;++s)a[o][s]=Ch(e,r.biff);return a}function Mh(e,t,r){return e.l+=2,[Th(e)]}function Ph(e){return e.l+=6,[]}function jh(e){return e.l+=2,[Dl(e),1&e.read_shift(2)]}var Ih=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];var Dh={1:{n:"PtgExp",f:function(e,t,r){return e.l++,r&&12==r.biff?[e.read_shift(4,"i"),0]:[e.read_shift(2),e.read_shift(r&&2==r.biff?1:2)]}},2:{n:"PtgTbl",f:Ns},3:{n:"PtgAdd",f:wh},4:{n:"PtgSub",f:wh},5:{n:"PtgMul",f:wh},6:{n:"PtgDiv",f:wh},7:{n:"PtgPower",f:wh},8:{n:"PtgConcat",f:wh},9:{n:"PtgLt",f:wh},10:{n:"PtgLe",f:wh},11:{n:"PtgEq",f:wh},12:{n:"PtgGe",f:wh},13:{n:"PtgGt",f:wh},14:{n:"PtgNe",f:wh},15:{n:"PtgIsect",f:wh},16:{n:"PtgUnion",f:wh},17:{n:"PtgRange",f:wh},18:{n:"PtgUplus",f:wh},19:{n:"PtgUminus",f:wh},20:{n:"PtgPercent",f:wh},21:{n:"PtgParen",f:wh},22:{n:"PtgMissArg",f:wh},23:{n:"PtgStr",f:function(e,t,r){return e.l++,Bl(e,0,r)}},26:{n:"PtgSheet",f:function(e,t,r){return e.l+=5,e.l+=2,e.l+=2==r.biff?1:4,["PTGSHEET"]}},27:{n:"PtgEndSheet",f:function(e,t,r){return e.l+=2==r.biff?4:5,["PTGENDSHEET"]}},28:{n:"PtgErr",f:function(e){return e.l++,Wc[e.read_shift(1)]}},29:{n:"PtgBool",f:function(e){return e.l++,0!==e.read_shift(1)}},30:{n:"PtgInt",f:function(e){return e.l++,e.read_shift(2)}},31:{n:"PtgNum",f:function(e){return e.l++,Oc(e)}},32:{n:"PtgArray",f:function(e,t,r){var n=(96&e[e.l++])>>5;return e.l+=2==r.biff?6:12==r.biff?14:7,[n]}},33:{n:"PtgFunc",f:function(e,t,r){var n=(96&e[e.l])>>5;e.l+=1;var i=e.read_shift(r&&r.biff<=3?1:2);return[nd[i],rd[i],n]}},34:{n:"PtgFuncVar",f:function(e,t,r){var n=e[e.l++],i=e.read_shift(1),o=r&&r.biff<=3?[88==n?-1:0,e.read_shift(1)]:function(e){return[e[e.l+1]>>7,32767&e.read_shift(2)]}(e);return[i,(0===o[0]?rd:td)[o[1]]]}},35:{n:"PtgName",f:function(e,t,r){var n=e.read_shift(1)>>>5&3,i=!r||r.biff>=8?4:2,o=e.read_shift(i);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[n,0,o]}},36:{n:"PtgRef",f:function(e,t,r){var n=(96&e[e.l])>>5;return e.l+=1,[n,Sh(e,0,r)]}},37:{n:"PtgArea",f:function(e,t,r){return[(96&e[e.l++])>>5,xh(e,r.biff>=2&&r.biff,r)]}},38:{n:"PtgMemArea",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=r&&2==r.biff?3:4,[n,e.read_shift(r&&2==r.biff?1:2)]}},39:{n:"PtgMemErr",f:Ns},40:{n:"PtgMemNoMem",f:Ns},41:{n:"PtgMemFunc",f:function(e,t,r){return[e.read_shift(1)>>>5&3,e.read_shift(r&&2==r.biff?1:2)]}},42:{n:"PtgRefErr",f:function(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,12==r.biff&&(e.l+=2),[n]}},43:{n:"PtgAreaErr",f:function(e,t,r){var n=(96&e[e.l++])>>5;return e.l+=r&&r.biff>8?12:r.biff<8?6:8,[n]}},44:{n:"PtgRefN",f:function(e,t,r){var n=(96&e[e.l])>>5;e.l+=1;var i=function(e,t,r){var n=r&&r.biff?r.biff:8;if(n>=2&&n<=5)return function(e){var t=e.read_shift(2),r=e.read_shift(1),n=(32768&t)>>15,i=(16384&t)>>14;return t&=16383,1==n&&t>=8192&&(t-=16384),1==i&&r>=128&&(r-=256),{r:t,c:r,cRel:i,rRel:n}}(e);var i=e.read_shift(n>=12?4:2),o=e.read_shift(2),a=(16384&o)>>14,s=(32768&o)>>15;if(o&=16383,1==s)for(;i>524287;)i-=1048576;if(1==a)for(;o>8191;)o-=16384;return{r:i,c:o,cRel:a,rRel:s}}(e,0,r);return[n,i]}},45:{n:"PtgAreaN",f:function(e,t,r){var n=(96&e[e.l++])>>5,i=function(e,t,r){if(r.biff<8)return kh(e);var n=e.read_shift(12==r.biff?4:2),i=e.read_shift(12==r.biff?4:2),o=_h(e,2),a=_h(e,2);return{s:{r:n,c:o[0],cRel:o[1],rRel:o[2]},e:{r:i,c:a[0],cRel:a[1],rRel:a[2]}}}(e,0,r);return[n,i]}},46:{n:"PtgMemAreaN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},47:{n:"PtgMemNoMemN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},57:{n:"PtgNameX",f:function(e,t,r){return 5==r.biff?function(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var n=e.read_shift(2);return e.l+=12,[t,r,n]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:"PtgRef3d",f:function(e,t,r){var n=(96&e[e.l])>>5;e.l+=1;var i=e.read_shift(2);return r&&5==r.biff&&(e.l+=12),[n,i,Sh(e,0,r)]}},59:{n:"PtgArea3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,i=e.read_shift(2,"i");if(r)switch(r.biff){case 5:e.l+=12,6;break;case 12:12}return[n,i,xh(e,0,r)]}},60:{n:"PtgRefErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,i=e.read_shift(2),o=4;if(r)switch(r.biff){case 5:o=15;break;case 12:o=6}return e.l+=o,[n,i]}},61:{n:"PtgAreaErr3d",f:function(e,t,r){var n=(96&e[e.l++])>>5,i=e.read_shift(2),o=8;if(r)switch(r.biff){case 5:e.l+=12,o=6;break;case 12:o=12}return e.l+=o,[n,i]}},255:{}},Nh={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},Fh={1:{n:"PtgElfLel",f:jh},2:{n:"PtgElfRw",f:Mh},3:{n:"PtgElfCol",f:Mh},6:{n:"PtgElfRwV",f:Mh},7:{n:"PtgElfColV",f:Mh},10:{n:"PtgElfRadical",f:Mh},11:{n:"PtgElfRadicalS",f:Ph},13:{n:"PtgElfColS",f:Ph},15:{n:"PtgElfColSV",f:Ph},16:{n:"PtgElfRadicalLel",f:jh},25:{n:"PtgList",f:function(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),i=e.read_shift(2),o=e.read_shift(2);return{ixti:t,coltype:3&r,rt:Ih[r>>2&31],idx:n,c:i,C:o}}},29:{n:"PtgSxName",f:function(e){return e.l+=2,[e.read_shift(4)]}},255:{}},Lh={0:{n:"PtgAttrNoop",f:function(e){return e.l+=4,[0,0]}},1:{n:"PtgAttrSemi",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=r&&2==r.biff?3:4,[n]}},2:{n:"PtgAttrIf",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},4:{n:"PtgAttrChoose",f:function(e,t,r){e.l+=2;for(var n=e.read_shift(r&&2==r.biff?1:2),i=[],o=0;o<=n;++o)i.push(e.read_shift(r&&2==r.biff?1:2));return i}},8:{n:"PtgAttrGoto",f:function(e,t,r){var n=255&e[e.l+1]?1:0;return e.l+=2,[n,e.read_shift(r&&2==r.biff?1:2)]}},16:{n:"PtgAttrSum",f:function(e,t,r){e.l+=r&&2==r.biff?3:4}},32:{n:"PtgAttrBaxcel",f:Eh},33:{n:"PtgAttrBaxcel",f:Eh},64:{n:"PtgAttrSpace",f:function(e){return e.read_shift(2),Oh(e)}},65:{n:"PtgAttrSpaceSemi",f:function(e){return e.read_shift(2),Oh(e)}},128:{n:"PtgAttrIfError",f:function(e){var t=255&e[e.l+1]?1:0;return e.l+=2,[t,e.read_shift(2)]}},255:{}};function Bh(e,t,r,n){if(n.biff<8)return Ns(e,t);for(var i=e.l+t,o=[],a=0;a!==r.length;++a)switch(r[a][0]){case"PtgArray":r[a][1]=Ah(e,0,n),o.push(r[a][1]);break;case"PtgMemArea":r[a][2]=Rh(e,r[a][1],n),o.push(r[a][2]);break;case"PtgExp":n&&12==n.biff&&(r[a][1][1]=e.read_shift(4),o.push(r[a][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[a][0]}return 0!==(t=i-e.l)&&o.push(Ns(e,t)),o}function zh(e,t,r){for(var n,i,o=e.l+t,a=[];o!=e.l;)t=o-e.l,i=e[e.l],n=Dh[i]||Dh[Nh[i]],24!==i&&25!==i||(n=(24===i?Fh:Lh)[e[e.l+1]]),n&&n.f?a.push([n.n,n.f(e,t,r)]):Ns(e,t);return a}function Uh(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function Wh(e,t,r){if(!e)return"SH33TJSERR0";if(r.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var n=e.XTI[t];if(r.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),0==t?"":e.XTI[t-1];if(!n)return"SH33TJSERR1";var i="";if(r.biff>8)switch(e[n[0]][0]){case 357:return i=-1==n[1]?"#REF":e.SheetNames[n[1]],n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 358:return null!=r.SID?e.SheetNames[r.SID]:"SH33TJSSAME"+e[n[0]][0];default:return"SH33TJSSRC"+e[n[0]][0]}switch(e[n[0]][0][0]){case 1025:return i=-1==n[1]?"#REF":e.SheetNames[n[1]]||"SH33TJSERR3",n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 14849:return e[n[0]].slice(1).map((function(e){return e.Name})).join(";;");default:return e[n[0]][0][3]?(i=-1==n[1]?"#REF":e[n[0]][0][3][n[1]]||"SH33TJSERR4",n[1]==n[2]?i:i+":"+e[n[0]][0][3][n[2]]):"SH33TJSERR2"}}function $h(e,t,r){var n=Wh(e,t,r);return"#REF"==n?n:function(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e+"'":e}(n,r)}function Vh(e,t,r,n,i){var o,a,s,c,l=i&&i.biff||8,u={s:{c:0,r:0},e:{c:0,r:0}},f=[],h=0,d=0,p="";if(!e[0]||!e[0][0])return"";for(var m=-1,b="",y=0,v=e[0].length;y=0){switch(e[0][m][1][0]){case 0:b=Jo(" ",e[0][m][1][1]);break;case 1:b=Jo("\r",e[0][m][1][1]);break;default:if(b="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][m][1][0])}a+=b,m=-1}f.push(a+Hh[g[0]]+o);break;case"PtgIsect":o=f.pop(),a=f.pop(),f.push(a+" "+o);break;case"PtgUnion":o=f.pop(),a=f.pop(),f.push(a+","+o);break;case"PtgRange":o=f.pop(),a=f.pop(),f.push(a+":"+o);break;case"PtgAttrChoose":case"PtgAttrGoto":case"PtgAttrIf":case"PtgAttrIfError":case"PtgAttrBaxcel":case"PtgAttrSemi":case"PtgMemArea":case"PtgTbl":case"PtgMemErr":case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":case"PtgMemFunc":case"PtgMemNoMem":break;case"PtgRef":s=Us(g[1][1],u,i),f.push(Ws(s,l));break;case"PtgRefN":s=r?Us(g[1][1],r,i):g[1][1],f.push(Ws(s,l));break;case"PtgRef3d":h=g[1][1],s=Us(g[1][2],u,i),p=$h(n,h,i),f.push(p+"!"+Ws(s,l));break;case"PtgFunc":case"PtgFuncVar":var w=g[1][0],_=g[1][1];w||(w=0);var x=0==(w&=127)?[]:f.slice(-w);f.length-=w,"User"===_&&(_=x.shift()),f.push(_+"("+x.join(",")+")");break;case"PtgBool":f.push(g[1]?"TRUE":"FALSE");break;case"PtgInt":case"PtgErr":f.push(g[1]);break;case"PtgNum":f.push(String(g[1]));break;case"PtgStr":f.push('"'+g[1].replace(/"/g,'""')+'"');break;case"PtgAreaN":c=Hs(g[1][1],r?{s:r}:u,i),f.push($s(c,i));break;case"PtgArea":c=Hs(g[1][1],u,i),f.push($s(c,i));break;case"PtgArea3d":h=g[1][1],c=g[1][2],p=$h(n,h,i),f.push(p+"!"+$s(c,i));break;case"PtgAttrSum":f.push("SUM("+f.pop()+")");break;case"PtgName":d=g[1][2];var k=(n.names||[])[d-1]||(n[0]||[])[d],S=k?k.Name:"SH33TJSNAME"+String(d);S&&"_xlfn."==S.slice(0,6)&&!i.xlfn&&(S=S.slice(6)),f.push(S);break;case"PtgNameX":var T,E=g[1][1];if(d=g[1][2],!(i.biff<=5)){var O="";if(14849==((n[E]||[])[0]||[])[0]||(1025==((n[E]||[])[0]||[])[0]?n[E][d]&&n[E][d].itab>0&&(O=n.SheetNames[n[E][d].itab-1]+"!"):O=n.SheetNames[d-1]+"!"),n[E]&&n[E][d])O+=n[E][d].Name;else if(n[0]&&n[0][d])O+=n[0][d].Name;else{var C=(Wh(n,E,i)||"").split(";;");C[d-1]?O=C[d-1]:O+="SH33TJSERRX"}f.push(O);break}E<0&&(E=-E),n[E]&&(T=n[E][d]),T||(T={Name:"SH33TJSERRY"}),f.push(T.Name);break;case"PtgParen":var R="(",A=")";if(m>=0){switch(b="",e[0][m][1][0]){case 2:R=Jo(" ",e[0][m][1][1])+R;break;case 3:R=Jo("\r",e[0][m][1][1])+R;break;case 4:A=Jo(" ",e[0][m][1][1])+A;break;case 5:A=Jo("\r",e[0][m][1][1])+A;break;default:if(i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][m][1][0])}m=-1}f.push(R+f.pop()+A);break;case"PtgRefErr":case"PtgRefErr3d":case"PtgAreaErr":case"PtgAreaErr3d":f.push("#REF!");break;case"PtgExp":s={c:g[1][1],r:g[1][0]};var M={c:r.c,r:r.r};if(n.sharedf[Ks(s)]){var P=n.sharedf[Ks(s)];f.push(Vh(P,u,M,n,i))}else{var j=!1;for(o=0;o!=n.arrayf.length;++o)if(a=n.arrayf[o],!(s.ca[0].e.c||s.ra[0].e.r)){f.push(Vh(a[1],u,M,n,i)),j=!0;break}j||f.push(g[1])}break;case"PtgArray":f.push("{"+Uh(g[1])+"}");break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":m=y;break;case"PtgMissArg":f.push("");break;case"PtgList":f.push("Table"+g[1].idx+"[#"+g[1].rt+"]");break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");default:throw new Error("Unrecognized Formula Token: "+String(g))}if(3!=i.biff&&m>=0&&-1==["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"].indexOf(e[0][y][0])){var I=!0;switch((g=e[0][m])[1][0]){case 4:I=!1;case 0:b=Jo(" ",g[1][1]);break;case 5:I=!1;case 1:b=Jo("\r",g[1][1]);break;default:if(b="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+g[1][0])}f.push((I?b:"")+f.pop()+(I?"":b)),m=-1}}if(f.length>1&&i.WTF)throw new Error("bad formula stack");return f[0]}function qh(e,t,r){var n,i=e.l+t,o=2==r.biff?1:2,a=e.read_shift(o);if(65535==a)return[[],Ns(e,t-2)];var s=zh(e,a,r);return t!==a+o&&(n=Bh(e,t-a-o,s,r)),e.l=i,[s,n]}function Xh(e,t,r){var n,i=e.l+t,o=e.read_shift(2),a=zh(e,o,r);return 65535==o?[[],Ns(e,t-2)]:(t!==o+2&&(n=Bh(e,i-o-2,a,r)),[a,n])}function Gh(e,t,r){var n=e.l+t,i=Jl(e);2==r.biff&&++e.l;var o=function(e){var t;if(65535!==Ss(e,e.l+6))return[Oc(e),"n"];switch(e[e.l]){case 0:return e.l+=8,["String","s"];case 1:return t=1===e[e.l+2],e.l+=8,[t,"b"];case 2:return t=e[e.l+2],e.l+=8,[t,"e"];case 3:return e.l+=8,["","s"]}return[]}(e),a=e.read_shift(1);2!=r.biff&&(e.read_shift(1),r.biff>=5&&e.read_shift(4));var s=function(e,t,r){var n,i=e.l+t,o=2==r.biff?1:2,a=e.read_shift(o);if(65535==a)return[[],Ns(e,t-2)];var s=zh(e,a,r);return t!==a+o&&(n=Bh(e,t-a-o,s,r)),e.l=i,[s,n]}(e,n-e.l,r);return{cell:i,val:o[0],formula:s,shared:a>>3&1,tt:o[1]}}function Yh(e,t,r,n,i){var o=Ql(t,r,i),a=function(e){if(null==e){var t=Fs(8);return t.write_shift(1,3),t.write_shift(1,0),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,65535),t}return Cc("number"==typeof e?e:0)}(e.v),s=Fs(6);s.write_shift(2,33),s.write_shift(4,0);for(var c=Fs(e.bf.length),l=0;l0?Bh(e,o,i,r):null]}var Zh=Kh,Jh=Kh,Qh=Kh,ed=Kh,td={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},rd={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},nd={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function id(e){return"of:"==e.slice(0,3)&&(e=e.slice(3)),61==e.charCodeAt(0)&&61==(e=e.slice(1)).charCodeAt(0)&&(e=e.slice(1)),(e=(e=(e=e.replace(/COM\.MICROSOFT\./g,"")).replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,(function(e,t){return t.replace(/\./g,"")}))).replace(/\[.(#[A-Z]*[?!])\]/g,"$1")).replace(/[;~]/g,",").replace(/\|/g,";")}function od(e){var t=e.split(":");return[t[0].split(".")[0],t[0].split(".")[1]+(t.length>1?":"+(t[1].split(".")[1]||t[1].split(".")[0]):"")]}var ad={},sd={},cd="undefined"!=typeof Map;function ld(e,t,r){var n=0,i=e.length;if(r){if(cd?r.has(t):Object.prototype.hasOwnProperty.call(r,t))for(var o=cd?r.get(t):r[t];n-1?(r.width=wf(n),r.customWidth=1):null!=t.width&&(r.width=t.width),t.hidden&&(r.hidden=!0),null!=t.level&&(r.outlineLevel=r.level=t.level),r}function fd(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];"xlml"==t&&(r=[1,1,1,1,.5,.5]),null==e.left&&(e.left=r[0]),null==e.right&&(e.right=r[1]),null==e.top&&(e.top=r[2]),null==e.bottom&&(e.bottom=r[3]),null==e.header&&(e.header=r[4]),null==e.footer&&(e.footer=r[5])}}function hd(e,t,r){var n=r.revssf[null!=t.z?t.z:"General"],i=60,o=e.length;if(null==n&&r.ssf)for(;i<392;++i)if(null==r.ssf[i]){Eo(t.z,i),r.ssf[i]=t.z,r.revssf[t.z]=n=i;break}for(i=0;i!=o;++i)if(e[i].numFmtId===n)return i;return e[o]={numFmtId:n,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},o}function dd(e,t,r,n,i,o){try{n.cellNF&&(e.z=qi[t])}catch(e){if(n.WTF)throw e}if("z"!==e.t||n.cellStyles){if("d"===e.t&&"string"==typeof e.v&&(e.v=Yo(e.v)),(!n||!1!==n.cellText)&&"z"!==e.t)try{if(null==qi[t]&&Eo(Ro[t]||"General",t),"e"===e.t)e.w=e.w||Wc[e.v];else if(0===t)if("n"===e.t)(0|e.v)===e.v?e.w=e.v.toString(10):e.w=ro(e.v);else if("d"===e.t){var a=zo(e.v);e.w=(0|a)===a?a.toString(10):ro(a)}else{if(void 0===e.v)return"";e.w=no(e.v,sd)}else"d"===e.t?e.w=To(t,zo(e.v),sd):e.w=To(t,e.v,sd)}catch(e){if(n.WTF)throw e}if(n.cellStyles&&null!=r)try{e.s=o.Fills[r],e.s.fgColor&&e.s.fgColor.theme&&!e.s.fgColor.rgb&&(e.s.fgColor.rgb=df(i.themeElements.clrScheme[e.s.fgColor.theme].rgb,e.s.fgColor.tint||0),n.WTF&&(e.s.fgColor.raw_rgb=i.themeElements.clrScheme[e.s.fgColor.theme].rgb)),e.s.bgColor&&e.s.bgColor.theme&&(e.s.bgColor.rgb=df(i.themeElements.clrScheme[e.s.bgColor.theme].rgb,e.s.bgColor.tint||0),n.WTF&&(e.s.bgColor.raw_rgb=i.themeElements.clrScheme[e.s.bgColor.theme].rgb))}catch(e){if(n.WTF&&o.Fills)throw e}}}function pd(e,t,r){if(e&&e["!ref"]){var n=Qs(e["!ref"]);if(n.e.c/g,bd=/<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/,yd=/<(?:\w:)?hyperlink [^>]*>/gm,vd=/"(\w*:\w*)"/,gd=/<(?:\w:)?col\b[^>]*[\/]?>/g,wd=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,_d=/<(?:\w:)?pageMargins[^>]*\/>/g,xd=/<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/,kd=/<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/,Sd=/<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;function Td(e,t,r,n,i,o,a){if(!e)return e;n||(n={"!id":{}});var s=t.dense?[]:{},c={s:{r:2e6,c:2e6},e:{r:0,c:0}},l="",u="",f=e.match(bd);f?(l=e.slice(0,f.index),u=e.slice(f.index+f[0].length)):l=u=e;var h=l.match(xd);h?Ed(h[0],s,i,r):(h=l.match(kd))&&function(e,t,r,n,i){Ed(e.slice(0,e.indexOf(">")),r,n,i)}(h[0],h[1],s,i,r);var d=(l.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(d>0){var p=l.slice(d,d+50).match(vd);p&&function(e,t){var r=Qs(t);r.s.r<=r.e.r&&r.s.c<=r.e.c&&r.s.r>=0&&r.s.c>=0&&(e["!ref"]=Js(r))}(s,p[1])}var m=l.match(Sd);m&&m[1]&&function(e,t){t.Views||(t.Views=[{}]);(e.match(Rd)||[]).forEach((function(e,r){var n=_a(e);t.Views[r]||(t.Views[r]={}),+n.zoomScale&&(t.Views[r].zoom=+n.zoomScale),ja(n.rightToLeft)&&(t.Views[r].RTL=!0)}))}(m[1],i);var b=[];if(t.cellStyles){var y=l.match(gd);y&&function(e,t){for(var r=!1,n=0;n!=t.length;++n){var i=_a(t[n],!0);i.hidden&&(i.hidden=ja(i.hidden));var o=parseInt(i.min,10)-1,a=parseInt(i.max,10)-1;for(i.outlineLevel&&(i.level=+i.outlineLevel||0),delete i.min,delete i.max,i.width=+i.width,!r&&i.width&&(r=!0,xf(i.width)),kf(i);o<=a;)e[o++]=Zo(i)}}(b,y)}f&&Md(f[1],s,t,c,o,a);var v=u.match(wd);v&&(s["!autofilter"]=function(e){var t={ref:(e.match(/ref="([^"]*)"/)||[])[1]};return t}(v[0]));var g=[],w=u.match(md);if(w)for(d=0;d!=w.length;++d)g[d]=Qs(w[d].slice(w[d].indexOf('"')+1));var _=u.match(yd);_&&function(e,t,r){for(var n=Array.isArray(e),i=0;i!=t.length;++i){var o=_a(La(t[i]),!0);if(!o.ref)return;var a=((r||{})["!id"]||[])[o.id];a?(o.Target=a.Target,o.location&&(o.Target+="#"+Ta(o.location))):(o.Target="#"+Ta(o.location),a={Target:o.Target,TargetMode:"Internal"}),o.Rel=a,o.tooltip&&(o.Tooltip=o.tooltip,delete o.tooltip);for(var s=Qs(o.ref),c=s.s.r;c<=s.e.r;++c)for(var l=s.s.c;l<=s.e.c;++l){var u=Ks({c:l,r:c});n?(e[c]||(e[c]=[]),e[c][l]||(e[c][l]={t:"z",v:void 0}),e[c][l].l=o):(e[u]||(e[u]={t:"z",v:void 0}),e[u].l=o)}}}(s,_,n);var x,k,S=u.match(_d);if(S&&(s["!margins"]=(x=_a(S[0]),k={},["left","right","top","bottom","header","footer"].forEach((function(e){x[e]&&(k[e]=parseFloat(x[e]))})),k)),!s["!ref"]&&c.e.c>=c.s.c&&c.e.r>=c.s.r&&(s["!ref"]=Js(c)),t.sheetRows>0&&s["!ref"]){var T=Qs(s["!ref"]);t.sheetRows<=+T.e.r&&(T.e.r=t.sheetRows-1,T.e.r>c.e.r&&(T.e.r=c.e.r),T.e.rc.e.c&&(T.e.c=c.e.c),T.e.c0&&(s["!cols"]=b),g.length>0&&(s["!merges"]=g),s}function Ed(e,t,r,n){var i=_a(e);r.Sheets[n]||(r.Sheets[n]={}),i.codeName&&(r.Sheets[n].CodeName=Ta(La(i.codeName)))}var Od=["objects","scenarios","selectLockedCells","selectUnlockedCells"],Cd=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];var Rd=/<(?:\w:)?sheetView(?:[^>a-z][^>]*)?\/?>/;function Ad(e,t,r,n){if(e.c&&r["!comments"].push([t,e.c]),void 0===e.v&&"string"!=typeof e.f||"z"===e.t&&!e.f)return"";var i="",o=e.t,a=e.v;if("z"!==e.t)switch(e.t){case"b":i=e.v?"1":"0";break;case"n":i=""+e.v;break;case"e":i=Wc[e.v];break;case"d":n&&n.cellDates?i=Yo(e.v,-1).toISOString():((e=Zo(e)).t="n",i=""+(e.v=zo(Yo(e.v)))),void 0===e.z&&(e.z=qi[14]);break;default:i=e.v}var s=Xa("v",Ca(i)),c={r:t},l=hd(n.cellXfs,e,n);switch(0!==l&&(c.s=l),e.t){case"n":case"z":break;case"d":c.t="d";break;case"b":c.t="b";break;case"e":c.t="e";break;default:if(null==e.v){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){s=Xa("v",""+ld(n.Strings,e.v,n.revStrings)),c.t="s";break}c.t="str"}if(e.t!=o&&(e.t=o,e.v=a),"string"==typeof e.f&&e.f){var u=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;s=Ya("f",Ca(e.f),u)+(null!=e.v?s:"")}return e.l&&r["!links"].push([t,e.l]),e.D&&(c.cm=1),Ya("c",s,c)}var Md=function(){var e=/<(?:\w+:)?c[ \/>]/,t=/<\/(?:\w+:)?row>/,r=/r=["']([^"']*)["']/,n=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,i=/ref=["']([^"']*)["']/,o=za("v"),a=za("f");return function(s,c,l,u,f,h){for(var d,p,m,b,y,v=0,g="",w=[],_=[],x=0,k=0,S=0,T="",E=0,O=0,C=0,R=0,A=Array.isArray(h.CellXf),M=[],P=[],j=Array.isArray(c),I=[],D={},N=!1,F=!!l.sheetStubs,L=s.split(t),B=0,z=L.length;B!=z;++B){var U=(g=L[B].trim()).length;if(0!==U){var H=0;e:for(v=0;v":if("/"!=g[v-1]){++v;break e}if(l&&l.cellStyles){if(E=null!=(p=_a(g.slice(H,v),!0)).r?parseInt(p.r,10):E+1,O=-1,l.sheetRows&&l.sheetRows=v)break;if(E=null!=(p=_a(g.slice(H,v),!0)).r?parseInt(p.r,10):E+1,O=-1,!(l.sheetRows&&l.sheetRowsE-1&&(u.s.r=E-1),u.e.r":"")+g,null!=_&&2===_.length){for(x=0,T=_[1],k=0;k!=T.length&&!((S=T.charCodeAt(k)-64)<1||S>26);++k)x=26*x+S;O=--x}else++O;for(k=0;k!=g.length&&62!==g.charCodeAt(k);++k);if(++k,(p=_a(g.slice(0,k),!0)).r||(p.r=Ks({r:E-1,c:O})),d={t:""},null!=(_=(T=g.slice(k)).match(o))&&""!==_[1]&&(d.v=Ta(_[1])),l.cellFormula){if(null!=(_=T.match(a))&&""!==_[1]){if(d.f=Ta(La(_[1])).replace(/\r\n/g,"\n"),l.xlfn||(d.f=gh(d.f)),_[0].indexOf('t="array"')>-1)d.F=(T.match(i)||[])[1],d.F.indexOf(":")>-1&&M.push([Qs(d.F),d.F]);else if(_[0].indexOf('t="shared"')>-1){b=_a(_[0]);var $=Ta(La(_[1]));l.xlfn||($=gh($)),P[parseInt(b.si,10)]=[b,$,p.r]}}else(_=T.match(/]*\/>/))&&P[(b=_a(_[0])).si]&&(d.f=vh(P[b.si][1],P[b.si][2],p.r));var V=Ys(p.r);for(k=0;k=M[k][0].s.r&&V.r<=M[k][0].e.r&&V.c>=M[k][0].s.c&&V.c<=M[k][0].e.c&&(d.F=M[k][1])}if(null==p.t&&void 0===d.v)if(d.f||d.F)d.v=0,d.t="n";else{if(!F)continue;d.t="z"}else d.t=p.t||"n";switch(u.s.c>O&&(u.s.c=O),u.e.c0&&(c["!rows"]=I)}}();function Pd(e,t,r,n){var i,o=[ma,Ya("worksheet",null,{xmlns:es[0],"xmlns:r":Qa.r})],a=r.SheetNames[e],s="",c=r.Sheets[a];null==c&&(c={});var l=c["!ref"]||"A1",u=Qs(l);if(u.e.c>16383||u.e.r>1048575){if(t.WTF)throw new Error("Range "+l+" exceeds format limit A1:XFD1048576");u.e.c=Math.min(u.e.c,16383),u.e.r=Math.min(u.e.c,1048575),l=Js(u)}n||(n={}),c["!comments"]=[];var f=[];!function(e,t,r,n,i){var o=!1,a={},s=null;if("xlsx"!==n.bookType&&t.vbaraw){var c=t.SheetNames[r];try{t.Workbook&&(c=t.Workbook.Sheets[r].CodeName||c)}catch(e){}o=!0,a.codeName=Ba(Ca(c))}if(e&&e["!outline"]){var l={summaryBelow:1,summaryRight:1};e["!outline"].above&&(l.summaryBelow=0),e["!outline"].left&&(l.summaryRight=0),s=(s||"")+Ya("outlinePr",null,l)}(o||s)&&(i[i.length]=Ya("sheetPr",s,a))}(c,r,e,t,o),o[o.length]=Ya("dimension",null,{ref:l}),o[o.length]=function(e,t,r,n){var i={workbookViewId:"0"};return(((n||{}).Workbook||{}).Views||[])[0]&&(i.rightToLeft=n.Workbook.Views[0].RTL?"1":"0"),Ya("sheetViews",Ya("sheetView",null,i),{})}(0,0,0,r),t.sheetFormat&&(o[o.length]=Ya("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),null!=c["!cols"]&&c["!cols"].length>0&&(o[o.length]=function(e,t){for(var r,n=[""],i=0;i!=t.length;++i)(r=t[i])&&(n[n.length]=Ya("col",null,ud(i,r)));return n[n.length]="",n.join("")}(0,c["!cols"])),o[i=o.length]="",c["!links"]=[],null!=c["!ref"]&&(s=function(e,t,r,n){var i,o,a=[],s=[],c=Qs(e["!ref"]),l="",u="",f=[],h=0,d=0,p=e["!rows"],m=Array.isArray(e),b={r:u},y=-1;for(d=c.s.c;d<=c.e.c;++d)f[d]=Gs(d);for(h=c.s.r;h<=c.e.r;++h){for(s=[],u=qs(h),d=c.s.c;d<=c.e.c;++d){i=f[d]+u;var v=m?(e[h]||[])[d]:e[i];void 0!==v&&null!=(l=Ad(v,i,e,t))&&s.push(l)}(s.length>0||p&&p[h])&&(b={r:u},p&&p[h]&&((o=p[h]).hidden&&(b.hidden=1),y=-1,o.hpx?y=Tf(o.hpx):o.hpt&&(y=o.hpt),y>-1&&(b.ht=y,b.customHeight=1),o.level&&(b.outlineLevel=o.level)),a[a.length]=Ya("row",s.join(""),b))}if(p)for(;h-1&&(b.ht=y,b.customHeight=1),o.level&&(b.outlineLevel=o.level),a[a.length]=Ya("row","",b));return a.join("")}(c,t),s.length>0&&(o[o.length]=s)),o.length>i+1&&(o[o.length]="",o[i]=o[i].replace("/>",">")),c["!protect"]&&(o[o.length]=function(e){var t={sheet:1};return Od.forEach((function(r){null!=e[r]&&e[r]&&(t[r]="1")})),Cd.forEach((function(r){null==e[r]||e[r]||(t[r]="0")})),e.password&&(t.password=sf(e.password).toString(16).toUpperCase()),Ya("sheetProtection",null,t)}(c["!protect"])),null!=c["!autofilter"]&&(o[o.length]=function(e,t,r,n){var i="string"==typeof e.ref?e.ref:Js(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var o=r.Workbook.Names,a=Zs(i);a.s.r==a.e.r&&(a.e.r=Zs(t["!ref"]).e.r,i=Js(a));for(var s=0;s0&&(o[o.length]=function(e){if(0===e.length)return"";for(var t='',r=0;r!=e.length;++r)t+='';return t+""}(c["!merges"]));var h,d,p=-1,m=-1;return c["!links"].length>0&&(o[o.length]="",c["!links"].forEach((function(e){e[1].Target&&(h={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(m=Jc(n,-1,Ca(e[1].Target).replace(/#.*$/,""),Gc.HLINK),h["r:id"]="rId"+m),(p=e[1].Target.indexOf("#"))>-1&&(h.location=Ca(e[1].Target.slice(p+1))),e[1].Tooltip&&(h.tooltip=Ca(e[1].Tooltip)),o[o.length]=Ya("hyperlink",null,h))})),o[o.length]=""),delete c["!links"],null!=c["!margins"]&&(o[o.length]=(fd(d=c["!margins"]),Ya("pageMargins",null,d))),t&&!t.ignoreEC&&null!=t.ignoreEC||(o[o.length]=Xa("ignoredErrors",Ya("ignoredError",null,{numberStoredAsText:1,sqref:l}))),f.length>0&&(m=Jc(n,-1,"../drawings/drawing"+(e+1)+".xml",Gc.DRAW),o[o.length]=Ya("drawing",null,{"r:id":"rId"+m}),c["!drawing"]=f),c["!comments"].length>0&&(m=Jc(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Gc.VML),o[o.length]=Ya("legacyDrawing",null,{"r:id":"rId"+m}),c["!legacy"]=m),o.length>1&&(o[o.length]="",o[1]=o[1].replace("/>",">")),o.join("")}function jd(e,t,r,n){var i=function(e,t,r){var n=Fs(145),i=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var o=320;i.hpx?o=20*Tf(i.hpx):i.hpt&&(o=20*i.hpt),n.write_shift(2,o),n.write_shift(1,0);var a=0;i.level&&(a|=i.level),i.hidden&&(a|=16),(i.hpx||i.hpt)&&(a|=32),n.write_shift(1,a),n.write_shift(1,0);var s=0,c=n.l;n.l+=4;for(var l={r:e,c:0},u=0;u<16;++u)if(!(t.s.c>u+1<<10||t.e.cn.l?n.slice(0,n.l):n}(n,r,t);(i.length>17||(t["!rows"]||[])[n])&&zs(e,0,i)}var Id=Tc,Dd=Ec;function Nd(e){return[dc(e),Oc(e),"n"]}var Fd=Tc,Ld=Ec;var Bd=["left","right","top","bottom","header","footer"];function zd(e,t,r,n,i,o,a){if(void 0===t.v)return!1;var s="";switch(t.t){case"b":s=t.v?"1":"0";break;case"d":(t=Zo(t)).z=t.z||qi[14],t.v=zo(Yo(t.v)),t.t="n";break;case"n":case"e":s=""+t.v;break;default:s=t.v}var c={r:r,c:n};switch(c.s=hd(i.cellXfs,t,i),t.l&&o["!links"].push([Ks(c),t.l]),t.c&&o["!comments"].push([Ks(c),t.c]),t.t){case"s":case"str":return i.bookSST?(s=ld(i.Strings,t.v,i.revStrings),c.t="s",c.v=s,a?zs(e,18,function(e,t,r){return null==r&&(r=Fs(8)),pc(t,r),r.write_shift(4,t.v),r}(0,c)):zs(e,7,function(e,t,r){return null==r&&(r=Fs(12)),hc(t,r),r.write_shift(4,t.v),r}(0,c))):(c.t="str",a?zs(e,17,function(e,t,r){return null==r&&(r=Fs(8+4*e.v.length)),pc(t,r),ac(e.v,r),r.length>r.l?r.slice(0,r.l):r}(t,c)):zs(e,6,function(e,t,r){return null==r&&(r=Fs(12+4*e.v.length)),hc(t,r),ac(e.v,r),r.length>r.l?r.slice(0,r.l):r}(t,c))),!0;case"n":return t.v==(0|t.v)&&t.v>-1e3&&t.v<1e3?a?zs(e,13,function(e,t,r){return null==r&&(r=Fs(8)),pc(t,r),kc(e.v,r),r}(t,c)):zs(e,2,function(e,t,r){return null==r&&(r=Fs(12)),hc(t,r),kc(e.v,r),r}(t,c)):a?zs(e,16,function(e,t,r){return null==r&&(r=Fs(12)),pc(t,r),Cc(e.v,r),r}(t,c)):zs(e,5,function(e,t,r){return null==r&&(r=Fs(16)),hc(t,r),Cc(e.v,r),r}(t,c)),!0;case"b":return c.t="b",a?zs(e,15,function(e,t,r){return null==r&&(r=Fs(5)),pc(t,r),r.write_shift(1,e.v?1:0),r}(t,c)):zs(e,4,function(e,t,r){return null==r&&(r=Fs(9)),hc(t,r),r.write_shift(1,e.v?1:0),r}(t,c)),!0;case"e":return c.t="e",a?zs(e,14,function(e,t,r){return null==r&&(r=Fs(8)),pc(t,r),r.write_shift(1,e.v),r.write_shift(2,0),r.write_shift(1,0),r}(t,c)):zs(e,3,function(e,t,r){return null==r&&(r=Fs(9)),hc(t,r),r.write_shift(1,e.v),r}(t,c)),!0}return a?zs(e,12,function(e,t,r){return null==r&&(r=Fs(4)),pc(t,r)}(0,c)):zs(e,1,function(e,t,r){return null==r&&(r=Fs(8)),hc(t,r)}(0,c)),!0}function Ud(e,t){var r,n;t&&t["!merges"]&&(zs(e,177,(r=t["!merges"].length,null==n&&(n=Fs(4)),n.write_shift(4,r),n)),t["!merges"].forEach((function(t){zs(e,176,Ld(t))})),zs(e,178))}function Hd(e,t){t&&t["!cols"]&&(zs(e,390),t["!cols"].forEach((function(t,r){t&&zs(e,60,function(e,t,r){null==r&&(r=Fs(18));var n=ud(e,t);r.write_shift(-4,e),r.write_shift(-4,e),r.write_shift(4,256*(n.width||10)),r.write_shift(4,0);var i=0;return t.hidden&&(i|=1),"number"==typeof n.width&&(i|=2),t.level&&(i|=t.level<<8),r.write_shift(2,i),r}(r,t))})),zs(e,391))}function Wd(e,t){var r,n;t&&t["!ref"]&&(zs(e,648),zs(e,649,(r=Qs(t["!ref"]),(n=Fs(24)).write_shift(4,4),n.write_shift(4,1),Ec(r,n),n)),zs(e,650))}function $d(e,t,r){t["!links"].forEach((function(t){if(t[1].Target){var n=Jc(r,-1,t[1].Target.replace(/#.*$/,""),Gc.HLINK);zs(e,494,function(e,t){var r=Fs(50+4*(e[1].Target.length+(e[1].Tooltip||"").length));Ec({s:Ys(e[0]),e:Ys(e[0])},r),_c("rId"+t,r);var n=e[1].Target.indexOf("#");return ac((-1==n?"":e[1].Target.slice(n+1))||"",r),ac(e[1].Tooltip||"",r),ac("",r),r.slice(0,r.l)}(t,n))}})),delete t["!links"]}function Vd(e,t,r){zs(e,133),zs(e,137,function(e,t,r){null==r&&(r=Fs(30));var n=924;return(((t||{}).Views||[])[0]||{}).RTL&&(n|=32),r.write_shift(2,n),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,100),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(4,0),r}(0,r)),zs(e,138),zs(e,134)}function qd(e,t){var r,n;t["!protect"]&&zs(e,535,(r=t["!protect"],null==n&&(n=Fs(66)),n.write_shift(2,r.password?sf(r.password):0),n.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach((function(e){e[1]?n.write_shift(4,null==r[e[0]]||r[e[0]]?0:1):n.write_shift(4,null!=r[e[0]]&&r[e[0]]?0:1)})),n))}function Xd(e,t,r,n){var i=Bs(),o=r.SheetNames[e],a=r.Sheets[o]||{},s=o;try{r&&r.Workbook&&(s=r.Workbook.Sheets[e].CodeName||s)}catch(e){}var c,l,u=Qs(a["!ref"]||"A1");if(u.e.c>16383||u.e.r>1048575){if(t.WTF)throw new Error("Range "+(a["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");u.e.c=Math.min(u.e.c,16383),u.e.r=Math.min(u.e.c,1048575)}return a["!links"]=[],a["!comments"]=[],zs(i,129),(r.vbaraw||a["!outline"])&&zs(i,147,function(e,t,r){null==r&&(r=Fs(84+4*e.length));var n=192;t&&(t.above&&(n&=-65),t.left&&(n&=-129)),r.write_shift(1,n);for(var i=1;i<3;++i)r.write_shift(1,0);return Rc({auto:1},r),r.write_shift(-4,-1),r.write_shift(-4,-1),bc(e,r),r.slice(0,r.l)}(s,a["!outline"])),zs(i,148,Dd(u)),Vd(i,0,r.Workbook),Hd(i,a),function(e,t,r,n){var i,o=Qs(t["!ref"]||"A1"),a="",s=[];zs(e,145);var c=Array.isArray(t),l=o.e.r;t["!rows"]&&(l=Math.max(o.e.r,t["!rows"].length-1));for(var u=o.s.r;u<=l;++u){a=qs(u),jd(e,t,o,u);var f=!1;if(u<=o.e.r)for(var h=o.s.c;h<=o.e.c;++h){u===o.s.r&&(s[h]=Gs(h)),i=s[h]+a;var d=c?(t[u]||[])[h]:t[i];f=!!d&&zd(e,d,u,h,n,t,f)}}zs(e,146)}(i,a,0,t),qd(i,a),function(e,t,r,n){if(t["!autofilter"]){var i=t["!autofilter"],o="string"==typeof i.ref?i.ref:Js(i.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var a=r.Workbook.Names,s=Zs(o);s.s.r==s.e.r&&(s.e.r=Zs(t["!ref"]).e.r,o=Js(s));for(var c=0;c0){var i=Jc(n,-1,"../drawings/vmlDrawing"+(r+1)+".vml",Gc.VML);zs(e,551,_c("rId"+i)),t["!legacy"]=i}}(i,a,e,n),zs(i,130),i.end()}function Gd(e,t,r,n,i,o){var a=o||{"!type":"chart"};if(!e)return o;var s=0,c=0,l="A",u={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(e.match(/[\s\S]*?<\/c:numCache>/gm)||[]).forEach((function(e){var t=function(e){var t,r=[],n=e.match(/^/);(e.match(/(.*?)<\/c:pt>/gm)||[]).forEach((function(e){var t=e.match(/(.*)<\/c:v><\/c:pt>/);t&&(r[+t[1]]=n?+t[2]:t[2])}));var i=Ta((e.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return(e.match(/(.*?)<\/c:f>/gm)||[]).forEach((function(e){t=e.replace(/<.*?>/g,"")})),[r,i,t]}(e);u.s.r=u.s.c=0,u.e.c=s,l=Gs(s),t[0].forEach((function(e,r){a[l+qs(r)]={t:"n",v:e,z:t[1]},c=r})),u.e.r0&&(a["!ref"]=Js(u)),a}var Yd=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],Kd=[["activeTab",0,"int"],["autoFilterDateGrouping",!0,"bool"],["firstSheet",0,"int"],["minimized",!1,"bool"],["showHorizontalScroll",!0,"bool"],["showSheetTabs",!0,"bool"],["showVerticalScroll",!0,"bool"],["tabRatio",600,"int"],["visibility","visible"]],Zd=[],Jd=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];function Qd(e,t){for(var r=0;r!=e.length;++r)for(var n=e[r],i=0;i!=t.length;++i){var o=t[i];if(null==n[o[0]])n[o[0]]=o[1];else switch(o[2]){case"bool":"string"==typeof n[o[0]]&&(n[o[0]]=ja(n[o[0]]));break;case"int":"string"==typeof n[o[0]]&&(n[o[0]]=parseInt(n[o[0]],10))}}}function ep(e,t){for(var r=0;r!=t.length;++r){var n=t[r];if(null==e[n[0]])e[n[0]]=n[1];else switch(n[2]){case"bool":"string"==typeof e[n[0]]&&(e[n[0]]=ja(e[n[0]]));break;case"int":"string"==typeof e[n[0]]&&(e[n[0]]=parseInt(e[n[0]],10))}}}function tp(e){ep(e.WBProps,Yd),ep(e.CalcPr,Jd),Qd(e.WBView,Kd),Qd(e.Sheets,Zd),sd.date1904=ja(e.WBProps.date1904)}var rp="][*?/\\".split("");function np(e,t){if(e.length>31){if(t)return!1;throw new Error("Sheet names cannot exceed 31 chars")}var r=!0;return rp.forEach((function(n){if(-1!=e.indexOf(n)){if(!t)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");r=!1}})),r}function ip(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t,r,n,i=e.Workbook&&e.Workbook.Sheets||[];t=e.SheetNames,r=i,n=!!e.vbaraw,t.forEach((function(e,i){np(e);for(var o=0;o22)throw new Error("Bad Code Name: Worksheet"+a)}}));for(var o=0;o0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(Yd.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(n[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=Ya("workbookPr",null,n);var i=e.Workbook&&e.Workbook.Sheets||[],o=0;if(i&&i[0]&&i[0].Hidden){for(t[t.length]="",o=0;o!=e.SheetNames.length&&i[o]&&i[o].Hidden;++o);o==e.SheetNames.length&&(o=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",o=0;o!=e.SheetNames.length;++o){var a={name:Ca(e.SheetNames[o].slice(0,31))};if(a.sheetId=""+(o+1),a["r:id"]="rId"+(o+1),i[o])switch(i[o].Hidden){case 1:a.state="hidden";break;case 2:a.state="veryHidden"}t[t.length]=Ya("sheet",null,a)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var r={name:e.Name};e.Comment&&(r.comment=e.Comment),null!=e.Sheet&&(r.localSheetId=""+e.Sheet),e.Hidden&&(r.hidden="1"),e.Ref&&(t[t.length]=Ya("definedName",Ca(e.Ref),r))})),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function sp(e,t){var r={};return e.read_shift(4),r.ArchID=e.read_shift(4),e.l+=t-8,r}function cp(e,t){if(t.Workbook&&t.Workbook.Sheets){for(var r,n,i=t.Workbook.Sheets,o=0,a=-1,s=-1;oa))zs(e,135),zs(e,158,(r=a,n||(n=Fs(29)),n.write_shift(-4,0),n.write_shift(-4,460),n.write_shift(4,28800),n.write_shift(4,17600),n.write_shift(4,500),n.write_shift(4,r),n.write_shift(4,r),n.write_shift(1,120),n.length>n.l?n.slice(0,n.l):n)),zs(e,136)}}function lp(e,t){var r=Bs();return zs(r,131),zs(r,128,function(e,t){t||(t=Fs(127));for(var r=0;4!=r;++r)t.write_shift(4,0);return ac("SheetJS",t),ac(ui.version,t),ac(ui.version,t),ac("7262",t),t.length>t.l?t.slice(0,t.l):t}()),zs(r,153,function(e,t){t||(t=Fs(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),bc(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),cp(r,e),function(e,t){zs(e,143);for(var r=0;r!=t.SheetNames.length;++r){zs(e,156,(n={Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]},(i=void 0)||(i=Fs(127)),i.write_shift(4,n.Hidden),i.write_shift(4,n.iTabID),_c(n.strRelID,i),ac(n.name.slice(0,31),i),i.length>i.l?i.slice(0,i.l):i))}var n,i;zs(e,144)}(r,e),zs(r,132),r.end()}function up(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},n=[],i=!1;t||(t={}),t.biff=12;var o=[],a=[[]];return a.SheetNames=[],a.XTI=[],Gp[16]={n:"BrtFRTArchID$",f:sp},Ls(e,(function(e,s,c){switch(c){case 156:a.SheetNames.push(e.name),r.Sheets.push(e);break;case 153:r.WBProps=e;break;case 39:null!=e.Sheet&&(t.SID=e.Sheet),e.Ref=Vh(e.Ptg,0,null,a,t),delete t.SID,delete e.Ptg,o.push(e);break;case 1036:case 361:case 2071:case 158:case 143:case 664:case 353:case 3072:case 3073:case 534:case 677:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:case 16:break;case 357:case 358:case 355:case 667:a[0].length?a.push([c,e]):a[0]=[c,e],a[a.length-1].XTI=[];break;case 362:0===a.length&&(a[0]=[],a[0].XTI=[]),a[a.length-1].XTI=a[a.length-1].XTI.concat(e),a.XTI=a.XTI.concat(e);break;case 35:case 37:n.push(c),i=!0;break;case 36:case 38:n.pop(),i=!1;break;default:if(s.T);else if(!i||t.WTF&&37!=n[n.length-1]&&35!=n[n.length-1])throw new Error("Unexpected record 0x"+c.toString(16))}}),t),tp(r),r.Names=o,r.supbooks=a,r}(e,r):function(e,t){if(!e)throw new Error("Could not find file");var r={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:""},n=!1,i="xmlns",o={},a=0;if(e.replace(va,(function(s,c){var l=_a(s);switch(xa(l[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":Yd.forEach((function(e){if(null!=l[e[0]])switch(e[2]){case"bool":r.WBProps[e[0]]=ja(l[e[0]]);break;case"int":r.WBProps[e[0]]=parseInt(l[e[0]],10);break;default:r.WBProps[e[0]]=l[e[0]]}})),l.codeName&&(r.WBProps.CodeName=La(l.codeName));break;case"":delete l[0],r.WBView.push(l);break;case"":case"":n=!0;break;case"":case"":case"":n=!1;break;case"":o.Ref=Ta(La(e.slice(a,c))),r.Names.push(o);break;case"":delete l[0],r.CalcPr=l;break;default:if(!n&&t.WTF)throw new Error("unrecognized "+l[0]+" in workbook")}return s})),-1===es.indexOf(r.xmlns))throw new Error("Unknown Namespace: "+r.xmlns);return tp(r),r}(e,r)}function fp(e,t,r,n,i,o,a,s){return".bin"===t.slice(-4)?function(e,t,r,n,i,o,a){if(!e)return e;var s=t||{};n||(n={"!id":{}});var c,l,u,f,h,d,p,m,b,y,v=s.dense?[]:{},g={s:{r:2e6,c:2e6},e:{r:0,c:0}},w=!1,_=!1,x=[];s.biff=12,s["!row"]=0;var k=0,S=!1,T=[],E={},O=s.supbooks||i.supbooks||[[]];if(O.sharedf=E,O.arrayf=T,O.SheetNames=i.SheetNames||i.Sheets.map((function(e){return e.name})),!s.supbooks&&(s.supbooks=O,i.Names))for(var C=0;C=j[0].s.r&&l.r<=j[0].e.r&&d>=j[0].s.c&&d<=j[0].e.c&&(u.F=Js(j[0]),S=!0)}!S&&e.length>3&&(u.f=e[3])}if(g.s.r>l.r&&(g.s.r=l.r),g.s.c>d&&(g.s.c=d),g.e.rl.r&&(g.s.r=l.r),g.s.c>d&&(g.s.c=d),g.e.r=e.s;)A[e.e--]={width:e.w/256,hidden:!!(1&e.flags),level:e.level},P||(P=!0,xf(e.w/256)),kf(A[e.e+1]);break;case 161:v["!autofilter"]={ref:Js(e)};break;case 476:v["!margins"]=e;break;case 147:i.Sheets[r]||(i.Sheets[r]={}),e.name&&(i.Sheets[r].CodeName=e.name),(e.above||e.left)&&(v["!outline"]={above:e.above,left:e.left});break;case 137:i.Views||(i.Views=[{}]),i.Views[0]||(i.Views[0]={}),e.RTL&&(i.Views[0].RTL=!0);break;case 485:case 64:case 1053:case 151:case 152:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:case 37:w=!0;break;case 36:case 38:w=!1;break;default:if(t.T);else if(!w||s.WTF)throw new Error("Unexpected record 0x"+C.toString(16))}}),s),delete s.supbooks,delete s["!row"],!v["!ref"]&&(g.s.r<2e6||c&&(c.e.r>0||c.e.c>0||c.s.r>0||c.s.c>0))&&(v["!ref"]=Js(c||g)),s.sheetRows&&v["!ref"]){var j=Qs(v["!ref"]);s.sheetRows<=+j.e.r&&(j.e.r=s.sheetRows-1,j.e.r>g.e.r&&(j.e.r=g.e.r),j.e.rg.e.c&&(j.e.c=g.e.c),j.e.c0&&(v["!merges"]=x),A.length>0&&(v["!cols"]=A),M.length>0&&(v["!rows"]=M),v}(e,n,r,i,o,a,s):Td(e,n,r,i,o,a,s)}function hp(e,t,r,n,i,o,a,s){return".bin"===t.slice(-4)?function(e,t,r,n,i){if(!e)return e;n||(n={"!id":{}});var o={"!type":"chart","!drawel":null,"!rel":""},a=!1;return Ls(e,(function(e,n,s){switch(s){case 550:o["!rel"]=e;break;case 651:i.Sheets[r]||(i.Sheets[r]={}),e.name&&(i.Sheets[r].CodeName=e.name);break;case 562:case 652:case 669:case 679:case 551:case 552:case 476:case 3072:case 37:case 38:break;case 35:a=!0;break;case 36:a=!1;break;default:if(n.T>0);else if(n.T<0);else if(!a||t.WTF)throw new Error("Unexpected record 0x"+s.toString(16))}}),t),n["!id"][o["!rel"]]&&(o["!drawel"]=n["!id"][o["!rel"]]),o}(e,n,r,i,o):function(e,t,r,n,i){if(!e)return e;n||(n={"!id":{}});var o,a={"!type":"chart","!drawel":null,"!rel":""},s=e.match(xd);return s&&Ed(s[0],0,i,r),(o=e.match(/drawing r:id="(.*?)"/))&&(a["!rel"]=o[1]),n["!id"][a["!rel"]]&&(a["!drawel"]=n["!id"][a["!rel"]]),a}(e,0,r,i,o)}function dp(e,t,r,n){return".bin"===t.slice(-4)?function(e,t,r){var n={NumberFmt:[]};for(var i in qi)n.NumberFmt[i]=qi[i];n.CellXf=[],n.Fonts=[];var o=[],a=!1;return Ls(e,(function(e,i,s){switch(s){case 44:n.NumberFmt[e[0]]=e[1],Eo(e[1],e[0]);break;case 43:n.Fonts.push(e),null!=e.color.theme&&t&&t.themeElements&&t.themeElements.clrScheme&&(e.color.rgb=df(t.themeElements.clrScheme[e.color.theme].rgb,e.color.tint||0));break;case 1025:case 45:case 46:case 48:case 507:case 572:case 475:case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 47:617==o[o.length-1]&&n.CellXf.push(e);break;case 35:a=!0;break;case 36:a=!1;break;case 37:o.push(s),a=!0;break;case 38:o.pop(),a=!1;break;default:if(i.T>0)o.push(s);else if(i.T<0)o.pop();else if(!a||r.WTF&&37!=o[o.length-1])throw new Error("Unexpected record 0x"+s.toString(16))}})),n}(e,r,n):Af(e,r,n)}function pp(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r=[],n=!1;return Ls(e,(function(e,i,o){switch(o){case 159:r.Count=e[0],r.Unique=e[1];break;case 19:r.push(e);break;case 160:return!0;case 35:n=!0;break;case 36:n=!1;break;default:if(i.T,!n||t.WTF)throw new Error("Unexpected record 0x"+o.toString(16))}})),r}(e,r):function(e,t){var r=[],n="";if(!e)return r;var i=e.match($u);if(i){n=i[2].replace(Vu,"").split(qu);for(var o=0;o!=n.length;++o){var a=Wu(n[o].trim(),t);null!=a&&(r[r.length]=a)}i=_a(i[1]),r.Count=i.count,r.Unique=i.uniqueCount}return r}(e,r)}function mp(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r=[],n=[],i={},o=!1;return Ls(e,(function(e,a,s){switch(s){case 632:n.push(e);break;case 635:i=e;break;case 637:i.t=e.t,i.h=e.h,i.r=e.r;break;case 636:if(i.author=n[i.iauthor],delete i.iauthor,t.sheetRows&&i.rfx&&t.sheetRows<=i.rfx.r)break;i.t||(i.t=""),delete i.rfx,r.push(i);break;case 3072:case 37:case 38:break;case 35:o=!0;break;case 36:o=!1;break;default:if(a.T);else if(!o||t.WTF)throw new Error("Unexpected record 0x"+s.toString(16))}})),r}(e,r):function(e,t){if(e.match(/<(?:\w+:)?comments *\/>/))return[];var r=[],n=[],i=e.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);i&&i[1]&&i[1].split(/<\/\w*:?author>/).forEach((function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?author[^>]*>(.*)/);t&&r.push(t[1])}}));var o=e.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return o&&o[1]&&o[1].split(/<\/\w*:?comment>/).forEach((function(e){if(""!==e&&""!==e.trim()){var i=e.match(/<(?:\w+:)?comment[^>]*>/);if(i){var o=_a(i[0]),a={author:o.authorId&&r[o.authorId]||"sheetjsghost",ref:o.ref,guid:o.guid},s=Ys(o.ref);if(!(t.sheetRows&&t.sheetRows<=s.r)){var c=e.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),l=!!c&&!!c[1]&&Wu(c[1])||{r:"",t:"",h:""};a.r=l.r,""==l.r&&(l.t=l.h=""),a.t=(l.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n"),t.cellHTML&&(a.h=l.h),n.push(a)}}}})),n}(e,r)}function bp(e,t,r){return".bin"===t.slice(-4)?function(e,t,r){var n=[];return Ls(e,(function(e,t,r){if(63===r)n.push(e);else if(!t.T)throw new Error("Unexpected record 0x"+r.toString(16))})),n}(e):function(e){var t=[];if(!e)return t;var r=1;return(e.match(va)||[]).forEach((function(e){var n=_a(e);switch(n[0]){case"":case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":a=2;break;case"":o=!1;break;case"-1?Ta(t||e).replace(/<.*?>/g,""):n.r;break;case"DateTime":"Z"!=e.slice(-1)&&(e+="Z"),n.v=(Yo(e)-new Date(Date.UTC(1899,11,30)))/864e5,n.v!=n.v?n.v=Ta(e):n.v<60&&(n.v=n.v-1),u&&"General"!=u||(u="yyyy-mm-dd");case"Number":void 0===n.v&&(n.v=+e),n.t||(n.t="n");break;case"Error":n.t="e",n.v=$c[e],!1!==l.cellText&&(n.w=e);break;default:""==e&&""==t?n.t="z":(n.t="s",n.v=Pa(t||e))}if(Op(n,u,l),!1!==l.cellFormula)if(n.Formula){var m=Ta(n.Formula);61==m.charCodeAt(0)&&(m=m.slice(1)),n.f=ph(m,i),delete n.Formula,"RC"==n.ArrayRange?n.F=ph("RC:RC",i):n.ArrayRange&&(n.F=ph(n.ArrayRange,i),c.push([Qs(n.F),n.F]))}else for(p=0;p=c[p][0].s.r&&i.r<=c[p][0].e.r&&i.c>=c[p][0].s.c&&i.c<=c[p][0].e.c&&(n.F=c[p][1]);l.cellStyles&&(d.forEach((function(e){!h.patternType&&e.patternType&&(h.patternType=e.patternType)})),n.s=h),void 0!==n.StyleID&&(n.ixfe=n.StyleID)}function Ap(e){e.t=e.v||"",e.t=e.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),e.v=e.w=e.ixfe=void 0}function Mp(e,t){var r=t||{};Co();var n=wi(Za(e));"binary"!=r.type&&"array"!=r.type&&"base64"!=r.type||(n=La(n));var i,o=n.slice(0,1024).toLowerCase(),a=!1;if((1023&(o=o.replace(/".*?"/g,"")).indexOf(">"))>Math.min(1023&o.indexOf(","),1023&o.indexOf(";"))){var s=Zo(r);return s.type="string",Nu.to_workbook(n,s)}if(-1==o.indexOf("=0&&(a=!0)})),a)return function(e,t){var r=e.match(/[\s\S]*?<\/table>/gi);if(!r||0==r.length)throw new Error("Invalid HTML: could not find ");if(1==r.length)return rc(am(r[0],t),t);var n={SheetNames:[],Sheets:{}};return r.forEach((function(e,r){hb(n,am(e,t),"Sheet"+(r+1))})),n}(n,r);_p={"General Number":"General","General Date":qi[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":qi[15],"Short Date":qi[14],"Long Time":qi[19],"Medium Time":qi[18],"Short Time":qi[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:qi[2],Standard:qi[4],Percent:qi[10],Scientific:qi[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var c,l,u=[],f={},h=[],d=r.dense?[]:{},p="",m={},b={},y=Sp(''),v=0,g=0,w=0,_={s:{r:2e6,c:2e6},e:{r:0,c:0}},x={},k={},S="",T=0,E=[],O={},C={},R=0,A=[],M=[],P={},j=[],I=!1,D=[],N=[],F={},L=0,B=0,z={Sheets:[],WBProps:{date1904:!1}},U={};Ja.lastIndex=0,n=n.replace(//gm,"");for(var H="";i=Ja.exec(n);)switch(i[3]=(H=i[3]).toLowerCase()){case"data":if("data"==H){if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else"/"!==i[0].charAt(i[0].length-2)&&u.push([i[3],!0]);break}if(u[u.length-1][1])break;"/"===i[1]?Rp(n.slice(v,i.index),S,y,"comment"==u[u.length-1][0]?P:m,{c:g,r:w},x,j[g],b,D,r):(S="",y=Sp(i[0]),v=i.index+i[0].length);break;case"cell":if("/"===i[1])if(M.length>0&&(m.c=M),(!r.sheetRows||r.sheetRows>w)&&void 0!==m.v&&(r.dense?(d[w]||(d[w]=[]),d[w][g]=m):d[Gs(g)+qs(w)]=m),m.HRef&&(m.l={Target:Ta(m.HRef)},m.HRefScreenTip&&(m.l.Tooltip=m.HRefScreenTip),delete m.HRef,delete m.HRefScreenTip),(m.MergeAcross||m.MergeDown)&&(L=g+(0|parseInt(m.MergeAcross,10)),B=w+(0|parseInt(m.MergeDown,10)),E.push({s:{c:g,r:w},e:{c:L,r:B}})),r.sheetStubs)if(m.MergeAcross||m.MergeDown){for(var W=g;W<=L;++W)for(var $=w;$<=B;++$)(W>g||$>w)&&(r.dense?(d[$]||(d[$]=[]),d[$][W]={t:"z"}):d[Gs(W)+qs($)]={t:"z"});g=L+1}else++g;else m.MergeAcross?g=L+1:++g;else(m=Tp(i[0])).Index&&(g=+m.Index-1),g<_.s.c&&(_.s.c=g),g>_.e.c&&(_.e.c=g),"/>"===i[0].slice(-2)&&++g,M=[];break;case"row":"/"===i[1]||"/>"===i[0].slice(-2)?(w<_.s.r&&(_.s.r=w),w>_.e.r&&(_.e.r=w),"/>"===i[0].slice(-2)&&(b=Sp(i[0])).Index&&(w=+b.Index-1),g=0,++w):((b=Sp(i[0])).Index&&(w=+b.Index-1),F={},("0"==b.AutoFitHeight||b.Height)&&(F.hpx=parseInt(b.Height,10),F.hpt=Tf(F.hpx),N[w]=F),"1"==b.Hidden&&(F.hidden=!0,N[w]=F));break;case"worksheet":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"));h.push(p),_.s.r<=_.e.r&&_.s.c<=_.e.c&&(d["!ref"]=Js(_),r.sheetRows&&r.sheetRows<=_.e.r&&(d["!fullref"]=d["!ref"],_.e.r=r.sheetRows-1,d["!ref"]=Js(_))),E.length&&(d["!merges"]=E),j.length>0&&(d["!cols"]=j),N.length>0&&(d["!rows"]=N),f[p]=d}else _={s:{r:2e6,c:2e6},e:{r:0,c:0}},w=g=0,u.push([i[3],!1]),c=Sp(i[0]),p=Ta(c.Name),d=r.dense?[]:{},E=[],D=[],N=[],U={name:p,Hidden:0},z.Sheets.push(U);break;case"table":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else{if("/>"==i[0].slice(-2))break;u.push([i[3],!1]),j=[],I=!1}break;case"style":"/"===i[1]?Cp(x,k,r):k=Sp(i[0]);break;case"numberformat":k.nf=Ta(Sp(i[0]).Format||"General"),_p[k.nf]&&(k.nf=_p[k.nf]);for(var V=0;392!=V&&qi[V]!=k.nf;++V);if(392==V)for(V=57;392!=V;++V)if(null==qi[V]){Eo(k.nf,V);break}break;case"column":if("table"!==u[u.length-1][0])break;if((l=Sp(i[0])).Hidden&&(l.hidden=!0,delete l.Hidden),l.Width&&(l.wpx=parseInt(l.Width,10)),!I&&l.wpx>10){I=!0,yf=pf;for(var q=0;q0&&(Y.Sheet=z.Sheets.length-1),z.Names.push(Y);break;case"namedcell":case"b":case"i":case"u":case"s":case"em":case"h2":case"h3":case"sub":case"sup":case"span":case"alignment":case"borders":case"border":case"protection":case"paragraphs":case"name":case"pixelsperinch":case"null":break;case"font":if("/>"===i[0].slice(-2))break;"/"===i[1]?S+=n.slice(T,i.index):T=i.index+i[0].length;break;case"interior":if(!r.cellStyles)break;k.Interior=Sp(i[0]);break;case"author":case"title":case"description":case"created":case"keywords":case"subject":case"category":case"company":case"lastauthor":case"lastsaved":case"lastprinted":case"version":case"revision":case"totaltime":case"hyperlinkbase":case"manager":case"contentstatus":case"identifier":case"language":case"appname":if("/>"===i[0].slice(-2))break;"/"===i[1]?ml(O,H,n.slice(R,i.index)):R=i.index+i[0].length;break;case"styles":case"workbook":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else u.push([i[3],!1]);break;case"comment":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"));Ap(P),M.push(P)}else u.push([i[3],!1]),P={a:(c=Sp(i[0])).Author};break;case"autofilter":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else if("/"!==i[0].charAt(i[0].length-2)){var K=Sp(i[0]);d["!autofilter"]={ref:ph(K.Range).replace(/\$/g,"")},u.push([i[3],!0])}break;case"datavalidation":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else"/"!==i[0].charAt(i[0].length-2)&&u.push([i[3],!0]);break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if("/"===i[1]){if((c=u.pop())[0]!==i[3])throw new Error("Bad state: "+c.join("|"))}else"/"!==i[0].charAt(i[0].length-2)&&u.push([i[3],!0]);break;default:if(0==u.length&&"document"==i[3])return dm(n,r);if(0==u.length&&"uof"==i[3])return dm(n,r);var Z=!0;switch(u[u.length-1][0]){case"officedocumentsettings":switch(i[3]){case"allowpng":case"removepersonalinformation":case"downloadcomponents":case"locationofcomponents":case"colors":case"color":case"index":case"rgb":case"targetscreensize":case"readonlyrecommended":break;default:Z=!1}break;case"componentoptions":switch(i[3]){case"toolbar":case"hideofficelogo":case"spreadsheetautofit":case"label":case"caption":case"maxheight":case"maxwidth":case"nextsheetnumber":break;default:Z=!1}break;case"excelworkbook":switch(i[3]){case"date1904":z.WBProps.date1904=!0;break;case"windowheight":case"windowwidth":case"windowtopx":case"windowtopy":case"tabratio":case"protectstructure":case"protectwindow":case"protectwindows":case"activesheet":case"displayinknotes":case"firstvisiblesheet":case"supbook":case"sheetname":case"sheetindex":case"sheetindexfirst":case"sheetindexlast":case"dll":case"acceptlabelsinformulas":case"donotsavelinkvalues":case"iteration":case"maxiterations":case"maxchange":case"path":case"xct":case"count":case"selectedsheets":case"calculation":case"uncalced":case"startupprompt":case"crn":case"externname":case"formula":case"colfirst":case"collast":case"wantadvise":case"boolean":case"error":case"text":case"ole":case"noautorecover":case"publishobjects":case"donotcalculatebeforesave":case"number":case"refmoder1c1":case"embedsavesmarttags":break;default:Z=!1}break;case"workbookoptions":switch(i[3]){case"owcversion":case"height":case"width":break;default:Z=!1}break;case"worksheetoptions":switch(i[3]){case"visible":if("/>"===i[0].slice(-2));else if("/"===i[1])switch(n.slice(R,i.index)){case"SheetHidden":U.Hidden=1;break;case"SheetVeryHidden":U.Hidden=2}else R=i.index+i[0].length;break;case"header":d["!margins"]||fd(d["!margins"]={},"xlml"),isNaN(+_a(i[0]).Margin)||(d["!margins"].header=+_a(i[0]).Margin);break;case"footer":d["!margins"]||fd(d["!margins"]={},"xlml"),isNaN(+_a(i[0]).Margin)||(d["!margins"].footer=+_a(i[0]).Margin);break;case"pagemargins":var J=_a(i[0]);d["!margins"]||fd(d["!margins"]={},"xlml"),isNaN(+J.Top)||(d["!margins"].top=+J.Top),isNaN(+J.Left)||(d["!margins"].left=+J.Left),isNaN(+J.Right)||(d["!margins"].right=+J.Right),isNaN(+J.Bottom)||(d["!margins"].bottom=+J.Bottom);break;case"displayrighttoleft":z.Views||(z.Views=[]),z.Views[0]||(z.Views[0]={}),z.Views[0].RTL=!0;break;case"freezepanes":case"frozennosplit":case"splithorizontal":case"splitvertical":case"donotdisplaygridlines":case"activerow":case"activecol":case"toprowbottompane":case"leftcolumnrightpane":case"unsynced":case"print":case"printerrors":case"panes":case"scale":case"pane":case"number":case"layout":case"pagesetup":case"selected":case"protectobjects":case"enableselection":case"protectscenarios":case"validprinterinfo":case"horizontalresolution":case"verticalresolution":case"numberofcopies":case"activepane":case"toprowvisible":case"leftcolumnvisible":case"fittopage":case"rangeselection":case"papersizeindex":case"pagelayoutzoom":case"pagebreakzoom":case"filteron":case"fitwidth":case"fitheight":case"commentslayout":case"zoom":case"lefttoright":case"gridlines":case"allowsort":case"allowfilter":case"allowinsertrows":case"allowdeleterows":case"allowinsertcols":case"allowdeletecols":case"allowinserthyperlinks":case"allowformatcells":case"allowsizecols":case"allowsizerows":case"tabcolorindex":case"donotdisplayheadings":case"showpagelayoutzoom":case"blackandwhite":case"donotdisplayzeros":case"displaypagebreak":case"rowcolheadings":case"donotdisplayoutline":case"noorientation":case"allowusepivottables":case"zeroheight":case"viewablerange":case"selection":case"protectcontents":break;case"nosummaryrowsbelowdetail":d["!outline"]||(d["!outline"]={}),d["!outline"].above=!0;break;case"nosummarycolumnsrightdetail":d["!outline"]||(d["!outline"]={}),d["!outline"].left=!0;break;default:Z=!1}break;case"pivottable":case"pivotcache":switch(i[3]){case"immediateitemsondrop":case"showpagemultipleitemlabel":case"compactrowindent":case"location":case"pivotfield":case"orientation":case"layoutform":case"layoutsubtotallocation":case"layoutcompactrow":case"position":case"pivotitem":case"datatype":case"datafield":case"sourcename":case"parentfield":case"ptlineitems":case"ptlineitem":case"countofsameitems":case"item":case"itemtype":case"ptsource":case"cacheindex":case"consolidationreference":case"filename":case"reference":case"nocolumngrand":case"norowgrand":case"blanklineafteritems":case"hidden":case"subtotal":case"basefield":case"mapchilditems":case"function":case"refreshonfileopen":case"printsettitles":case"mergelabels":case"defaultversion":case"refreshname":case"refreshdate":case"refreshdatecopy":case"versionlastrefresh":case"versionlastupdate":case"versionupdateablemin":case"versionrefreshablemin":case"calculation":break;default:Z=!1}break;case"pagebreaks":switch(i[3]){case"colbreaks":case"colbreak":case"rowbreaks":case"rowbreak":case"colstart":case"colend":case"rowend":break;default:Z=!1}break;case"autofilter":switch(i[3]){case"autofiltercolumn":case"autofiltercondition":case"autofilterand":case"autofilteror":break;default:Z=!1}break;case"querytable":switch(i[3]){case"id":case"autoformatfont":case"autoformatpattern":case"querysource":case"querytype":case"enableredirections":case"refreshedinxl9":case"urlstring":case"htmltables":case"connection":case"commandtext":case"refreshinfo":case"notitles":case"nextid":case"columninfo":case"overwritecells":case"donotpromptforfile":case"textwizardsettings":case"source":case"number":case"decimal":case"thousandseparator":case"trailingminusnumbers":case"formatsettings":case"fieldtype":case"delimiters":case"tab":case"comma":case"autoformatname":case"versionlastedit":case"versionlastrefresh":break;default:Z=!1}break;case"datavalidation":switch(i[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":case"cellrangelist":break;default:Z=!1}break;case"sorting":case"conditionalformatting":switch(i[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"cellrangelist":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":break;default:Z=!1}break;case"mapinfo":case"schema":case"data":switch(i[3]){case"map":case"entry":case"range":case"xpath":case"field":case"xsdtype":case"filteron":case"aggregate":case"elementtype":case"attributetype":case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":case"row":break;default:Z=!1}break;case"smarttags":break;default:Z=!1}if(Z)break;if(i[3].match(/!\[CDATA/))break;if(!u[u.length-1][1])throw"Unrecognized tag: "+i[3]+"|"+u.join("|");if("customdocumentproperties"===u[u.length-1][0]){if("/>"===i[0].slice(-2))break;"/"===i[1]?Ep(C,H,A,n.slice(R,i.index)):(A=i,R=i.index+i[0].length);break}if(r.WTF)throw"Unrecognized tag: "+i[3]+"|"+u.join("|")}var Q={};return r.bookSheets||r.bookProps||(Q.Sheets=f),Q.SheetNames=h,Q.Workbook=z,Q.SSF=Zo(qi),Q.Props=O,Q.Custprops=C,Q}function Pp(e,t){switch(Vm(t=t||{}),t.type||"base64"){case"base64":return Mp(Ti(e),t);case"binary":case"buffer":case"file":return Mp(e,t);case"array":return Mp(Pi(e),t)}}function jp(e,t){var r=[];return e.Props&&r.push(function(e,t){var r=[];return Do(pl).map((function(e){for(var t=0;t'+i.join("")+""}(e.Props,e.Custprops)),r.join("")}function Ip(e){return Ya("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+bh(e.Ref,{r:0,c:0})})}function Dp(e,t,r,n,i,o,a){if(!e||null==e.v&&null==e.f)return"";var s={};if(e.f&&(s["ss:Formula"]="="+Ca(bh(e.f,a))),e.F&&e.F.slice(0,t.length)==t){var c=Ys(e.F.slice(t.length+1));s["ss:ArrayRange"]="RC:R"+(c.r==a.r?"":"["+(c.r-a.r)+"]")+"C"+(c.c==a.c?"":"["+(c.c-a.c)+"]")}if(e.l&&e.l.Target&&(s["ss:HRef"]=Ca(e.l.Target),e.l.Tooltip&&(s["x:HRefScreenTip"]=Ca(e.l.Tooltip))),r["!merges"])for(var l=r["!merges"],u=0;u!=l.length;++u)l[u].s.c==a.c&&l[u].s.r==a.r&&(l[u].e.c>l[u].s.c&&(s["ss:MergeAcross"]=l[u].e.c-l[u].s.c),l[u].e.r>l[u].s.r&&(s["ss:MergeDown"]=l[u].e.r-l[u].s.r));var f="",h="";switch(e.t){case"z":if(!n.sheetStubs)return"";break;case"n":f="Number",h=String(e.v);break;case"b":f="Boolean",h=e.v?"1":"0";break;case"e":f="Error",h=Wc[e.v];break;case"d":f="DateTime",h=new Date(e.v).toISOString(),null==e.z&&(e.z=e.z||qi[14]);break;case"s":f="String",h=((e.v||"")+"").replace(Ea,(function(e){return Sa[e]})).replace(Aa,(function(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}))}var d=hd(n.cellXfs,e,n);s["ss:StyleID"]="s"+(21+d),s["ss:Index"]=a.c+1;var p=null!=e.v?h:"",m="z"==e.t?"":''+p+"";return(e.c||[]).length>0&&(m+=e.c.map((function(e){var t=Ya("ss:Data",(e.t||"").replace(/(\r\n|[\r\n])/g," "),{xmlns:"http://www.w3.org/TR/REC-html40"});return Ya("Comment",t,{"ss:Author":e.a})})).join("")),Ya("Cell",m,s)}function Np(e,t){var r='"}function Fp(e,t,r){var n=[],i=r.SheetNames[e],o=r.Sheets[i],a=o?function(e,t,r,n){if(!e)return"";if(!((n||{}).Workbook||{}).Names)return"";for(var i=n.Workbook.Names,o=[],a=0;a0&&n.push(""+a+""),a=o?function(e,t,r,n){if(!e["!ref"])return"";var i=Qs(e["!ref"]),o=e["!merges"]||[],a=0,s=[];e["!cols"]&&e["!cols"].forEach((function(e,t){kf(e);var r=!!e.width,n=ud(t,e),i={"ss:Index":t+1};r&&(i["ss:Width"]=vf(n.width)),e.hidden&&(i["ss:Hidden"]="1"),s.push(Ya("Column",null,i))}));for(var c=Array.isArray(e),l=i.s.r;l<=i.e.r;++l){for(var u=[Np(l,(e["!rows"]||[])[l])],f=i.s.c;f<=i.e.c;++f){var h=!1;for(a=0;a!=o.length;++a)if(!(o[a].s.c>f||o[a].s.r>l||o[a].e.c"),u.length>2&&s.push(u.join(""))}return s.join("")}(o,t):"",a.length>0&&n.push("
"+a+"
"),n.push(function(e,t,r,n){if(!e)return"";var i=[];if(e["!margins"]&&(i.push(""),e["!margins"].header&&i.push(Ya("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&i.push(Ya("Footer",null,{"x:Margin":e["!margins"].footer})),i.push(Ya("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),i.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)i.push(Ya("Visible",1==n.Workbook.Sheets[r].Hidden?"SheetHidden":"SheetVeryHidden",{}));else{for(var o=0;o")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(""),e["!protect"]&&(i.push(Xa("ProtectContents","True")),e["!protect"].objects&&i.push(Xa("ProtectObjects","True")),e["!protect"].scenarios&&i.push(Xa("ProtectScenarios","True")),null==e["!protect"].selectLockedCells||e["!protect"].selectLockedCells?null==e["!protect"].selectUnlockedCells||e["!protect"].selectUnlockedCells||i.push(Xa("EnableSelection","UnlockedCells")):i.push(Xa("EnableSelection","NoSelection")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach((function(t){e["!protect"][t[0]]&&i.push("<"+t[1]+"/>")}))),0==i.length?"":Ya("WorksheetOptions",i.join(""),{xmlns:ts.x})}(o,0,e,r)),n.join("")}function Lp(e,t){t||(t={}),e.SSF||(e.SSF=Zo(qi)),e.SSF&&(Co(),Oo(e.SSF),t.revssf=Lo(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],hd(t.cellXfs,{},{revssf:{General:0}}));var r=[];r.push(jp(e,t)),r.push(""),r.push(""),r.push("");for(var n=0;n'];return t.cellXfs.forEach((function(e,t){var n=[];n.push(Ya("NumberFormat",null,{"ss:Format":Ca(qi[e.numFmtId])}));var i={"ss:ID":"s"+(21+t)};r.push(Ya("Style",n.join(""),i))})),Ya("Styles",r.join(""))}(0,t),r[3]=function(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],n=0;n40?t:(r.l-=4,t.Reserved1=r.read_shift(0,"lpstr-ansi"),r.length-r.l<=4||1907505652!==(n=r.read_shift(4))?t:(t.UnicodeClipboardFormat=function(e){return Ac(e,2)}(r),0==(n=r.read_shift(4))||n>40?t:(r.l-=4,void(t.Reserved2=r.read_shift(0,"lpwstr")))))}var zp=[60,1084,2066,2165,2175];function Up(e,t,r,n,i){var o=n,a=[],s=r.slice(r.l,r.l+o);if(i&&i.enc&&i.enc.insitu&&s.length>0)switch(e){case 9:case 521:case 1033:case 2057:case 47:case 405:case 225:case 406:case 312:case 404:case 10:case 133:break;default:i.enc.insitu(s)}a.push(s),r.l+=o;for(var c=Ss(r,r.l),l=Yp[c],u=0;null!=l&&zp.indexOf(c)>-1;)o=Ss(r,r.l+2),u=r.l+4,2066==c?u+=4:2165!=c&&2175!=c||(u+=12),s=r.slice(u,r.l+4+o),a.push(s),r.l+=4+o,l=Yp[c=Ss(r,r.l)];var f=Ii(a);Ds(f,0);var h=0;f.lens=[];for(var d=0;d1||n.sheetRows&&e.r>=n.sheetRows)){if(n.cellStyles&&t.XF&&t.XF.data&&function(e,t,r){var n,i=t.XF.data;i&&i.patternType&&r&&r.cellStyles&&(t.s={},t.s.patternType=i.patternType,(n=hf(E(i.icvFore)))&&(t.s.fgColor={rgb:n}),(n=hf(E(i.icvBack)))&&(t.s.bgColor={rgb:n}))}(0,t,n),delete t.ixfe,delete t.XF,r=e,g=Ks(e),p&&p.s&&p.e||(p={s:{r:0,c:0},e:{r:0,c:0}}),e.rp.e.r&&(p.e.r=e.r+1),e.c+1>p.e.c&&(p.e.c=e.c+1),n.cellFormula&&t.f)for(var i=0;i<_.length;++i)if(!(_[i][0].s.c>e.c||_[i][0].s.r>e.r||_[i][0].e.c>8)!==W)throw new Error("rt mismatch: "+q+"!="+W);12==V.r&&(e.l+=10,$-=10)}var X={};if(X=10===W?V.f(e,$,C):Up(W,V,e,$,C),0==F&&-1===[9,521,1033,2057].indexOf(N))continue;switch(W){case 34:u.opts.Date1904=S.WBProps.date1904=X;break;case 134:u.opts.WriteProtect=!0;break;case 47:if(C.enc||(e.l=0),C.enc=X,!t.password)throw new Error("File is password-protected");if(null==X.valid)throw new Error("Encryption scheme unsupported");if(!X.valid)throw new Error("Password is incorrect");break;case 92:C.lastuser=X;break;case 66:var G=Number(X);switch(G){case 21010:G=1200;break;case 32768:G=1e4;break;case 32769:G=1252}mi(C.codepage=G),U=!0;break;case 317:C.rrtabid=X;break;case 25:C.winlocked=X;break;case 439:u.opts.RefreshAll=X;break;case 12:u.opts.CalcCount=X;break;case 16:u.opts.CalcDelta=X;break;case 17:u.opts.CalcIter=X;break;case 13:u.opts.CalcMode=X;break;case 14:u.opts.CalcPrecision=X;break;case 95:u.opts.CalcSaveRecalc=X;break;case 15:C.CalcRefMode=X;break;case 2211:u.opts.FullCalc=X;break;case 129:X.fDialog&&(h["!type"]="dialog"),X.fBelow||((h["!outline"]||(h["!outline"]={})).above=!0),X.fRight||((h["!outline"]||(h["!outline"]={})).left=!0);break;case 224:x.push(X);break;case 430:I.push([X]),I[I.length-1].XTI=[];break;case 35:case 547:I[I.length-1].push(X);break;case 24:case 536:D={Name:X.Name,Ref:Vh(X.rgce,0,null,I,C)},X.itab>0&&(D.Sheet=X.itab-1),I.names.push(D),I[0]||(I[0]=[],I[0].XTI=[]),I[I.length-1].push(X),"_xlnm._FilterDatabase"==X.Name&&X.itab>0&&X.rgce&&X.rgce[0]&&X.rgce[0][0]&&"PtgArea3d"==X.rgce[0][0][0]&&(z[X.itab-1]={ref:Js(X.rgce[0][0][1][2])});break;case 22:C.ExternCount=X;break;case 23:0==I.length&&(I[0]=[],I[0].XTI=[]),I[I.length-1].XTI=I[I.length-1].XTI.concat(X),I.XTI=I.XTI.concat(X);break;case 2196:if(C.biff<8)break;null!=D&&(D.Comment=X[1]);break;case 18:h["!protect"]=X;break;case 19:0!==X&&C.WTF&&console.error("Password verifier: "+X);break;case 133:d[X.pos]=X,C.snames.push(X.name);break;case 10:if(--F)break;if(p.e){if(p.e.r>0&&p.e.c>0){if(p.e.r--,p.e.c--,h["!ref"]=Js(p),t.sheetRows&&t.sheetRows<=p.e.r){var Y=p.e.r;p.e.r=t.sheetRows-1,h["!fullref"]=h["!ref"],h["!ref"]=Js(p),p.e.r=Y}p.e.r++,p.e.c++}R.length>0&&(h["!merges"]=R),A.length>0&&(h["!objects"]=A),M.length>0&&(h["!cols"]=M),P.length>0&&(h["!rows"]=P),S.Sheets.push(T)}""===y?v=h:f[y]=h,h=t.dense?[]:{};break;case 9:case 521:case 1033:case 2057:if(8===C.biff&&(C.biff={9:2,521:3,1033:4}[W]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[X.BIFFVer]||8),C.biffguess=0==X.BIFFVer,0==X.BIFFVer&&4096==X.dt&&(C.biff=5,U=!0,mi(C.codepage=28591)),8==C.biff&&0==X.BIFFVer&&16==X.dt&&(C.biff=2),F++)break;if(h=t.dense?[]:{},C.biff<8&&!U&&(U=!0,mi(C.codepage=t.codepage||1252)),C.biff<5||0==X.BIFFVer&&4096==X.dt){""===y&&(y="Sheet1"),p={s:{r:0,c:0},e:{r:0,c:0}};var K={pos:e.l-$,name:y};d[K.pos]=K,C.snames.push(y)}else y=(d[H]||{name:""}).name;32==X.dt&&(h["!type"]="chart"),64==X.dt&&(h["!type"]="macro"),R=[],A=[],C.arrayf=_=[],M=[],P=[],j=!1,T={Hidden:(d[H]||{hs:0}).hs,name:y};break;case 515:case 3:case 2:"chart"==h["!type"]&&(t.dense?(h[X.r]||[])[X.c]:h[Ks({c:X.c,r:X.r})])&&++X.c,s={ixfe:X.ixfe,XF:x[X.ixfe]||{},v:X.val,t:"n"},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t);break;case 5:case 517:s={ixfe:X.ixfe,XF:x[X.ixfe],v:X.val,t:X.t},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t);break;case 638:s={ixfe:X.ixfe,XF:x[X.ixfe],v:X.rknum,t:"n"},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t);break;case 189:for(var Z=X.c;Z<=X.C;++Z){var J=X.rkrec[Z-X.c][0];s={ixfe:J,XF:x[J],v:X.rkrec[Z-X.c][1],t:"n"},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:Z,r:X.r},s,t)}break;case 6:case 518:case 1030:if("String"==X.val){m=X;break}if((s=Wp(X.val,X.cell.ixfe,X.tt)).XF=x[s.ixfe],t.cellFormula){var Q=X.formula;if(Q&&Q[0]&&Q[0][0]&&"PtgExp"==Q[0][0][0]){var ee=Q[0][0][1][0],te=Q[0][0][1][1],re=Ks({r:ee,c:te});w[re]?s.f=""+Vh(X.formula,0,X.cell,I,C):s.F=((t.dense?(h[ee]||[])[te]:h[re])||{}).F}else s.f=""+Vh(X.formula,0,X.cell,I,C)}L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O(X.cell,s,t),m=X;break;case 7:case 519:if(!m)throw new Error("String record expects Formula");m.val=X,(s=Wp(X,m.cell.ixfe,"s")).XF=x[s.ixfe],t.cellFormula&&(s.f=""+Vh(m.formula,0,m.cell,I,C)),L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O(m.cell,s,t),m=null;break;case 33:case 545:_.push(X);var ne=Ks(X[0].s);if(n=t.dense?(h[X[0].s.r]||[])[X[0].s.c]:h[ne],t.cellFormula&&n){if(!m)break;if(!ne||!n)break;n.f=""+Vh(X[1],0,X[0],I,C),n.F=Js(X[0])}break;case 1212:if(!t.cellFormula)break;if(g){if(!m)break;w[Ks(m.cell)]=X[0],((n=t.dense?(h[m.cell.r]||[])[m.cell.c]:h[Ks(m.cell)])||{}).f=""+Vh(X[0],0,r,I,C)}break;case 253:s=Wp(b[X.isst].t,X.ixfe,"s"),b[X.isst].h&&(s.h=b[X.isst].h),s.XF=x[s.ixfe],L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t);break;case 513:t.sheetStubs&&(s={ixfe:X.ixfe,XF:x[X.ixfe],t:"z"},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t));break;case 190:if(t.sheetStubs)for(var ie=X.c;ie<=X.C;++ie){var oe=X.ixfe[ie-X.c];s={ixfe:oe,XF:x[oe],t:"z"},L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:ie,r:X.r},s,t)}break;case 214:case 516:case 4:(s=Wp(X.val,X.ixfe,"s")).XF=x[s.ixfe],L>0&&(s.z=B[s.ixfe>>8&63]),Hp(s,t,u.opts.Date1904),O({c:X.c,r:X.r},s,t);break;case 0:case 512:1===F&&(p=X);break;case 252:b=X;break;case 1054:if(4==C.biff){B[L++]=X[1];for(var ae=0;ae=163&&Eo(X[1],L+163)}else Eo(X[1],X[0]);break;case 30:B[L++]=X;for(var se=0;se=163&&Eo(X,L+163);break;case 229:R=R.concat(X);break;case 93:A[X.cmo[0]]=C.lastobj=X;break;case 438:C.lastobj.TxO=X;break;case 127:C.lastobj.ImData=X;break;case 440:for(a=X[0].s.r;a<=X[0].e.r;++a)for(o=X[0].s.c;o<=X[0].e.c;++o)(n=t.dense?(h[a]||[])[o]:h[Ks({c:o,r:a})])&&(n.l=X[1]);break;case 2048:for(a=X[0].s.r;a<=X[0].e.r;++a)for(o=X[0].s.c;o<=X[0].e.c;++o)(n=t.dense?(h[a]||[])[o]:h[Ks({c:o,r:a})])&&n.l&&(n.l.Tooltip=X[1]);break;case 28:if(C.biff<=5&&C.biff>=2)break;n=t.dense?(h[X[0].r]||[])[X[0].c]:h[Ks(X[0])];var ce=A[X[2]];n||(t.dense?(h[X[0].r]||(h[X[0].r]=[]),n=h[X[0].r][X[0].c]={t:"z"}):n=h[Ks(X[0])]={t:"z"},p.e.r=Math.max(p.e.r,X[0].r),p.s.r=Math.min(p.s.r,X[0].r),p.e.c=Math.max(p.e.c,X[0].c),p.s.c=Math.min(p.s.c,X[0].c)),n.c||(n.c=[]),i={a:X[1],t:ce.TxO.t},n.c.push(i);break;case 2173:x[X.ixfe],X.ext.forEach((function(e){e[0]}));break;case 125:if(!C.cellStyles)break;for(;X.e>=X.s;)M[X.e--]={width:X.w/256,level:X.level||0,hidden:!!(1&X.flags)},j||(j=!0,xf(X.w/256)),kf(M[X.e+1]);break;case 520:var le={};null!=X.level&&(P[X.r]=le,le.level=X.level),X.hidden&&(P[X.r]=le,le.hidden=!0),X.hpt&&(P[X.r]=le,le.hpt=X.hpt,le.hpx=Ef(X.hpt));break;case 38:case 39:case 40:case 41:h["!margins"]||fd(h["!margins"]={}),h["!margins"][{38:"left",39:"right",40:"top",41:"bottom"}[W]]=X;break;case 161:h["!margins"]||fd(h["!margins"]={}),h["!margins"].header=X.header,h["!margins"].footer=X.footer;break;case 574:X.RTL&&(S.Views[0].RTL=!0);break;case 146:k=X;break;case 2198:l=X;break;case 140:c=X;break;case 442:y?T.CodeName=X||T.name:S.WBProps.CodeName=X||"ThisWorkbook"}}else V||console.error("Missing Info for XLS Record 0x"+W.toString(16)),e.l+=$}return u.SheetNames=Do(d).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return d[e].name})),t.bookSheets||(u.Sheets=f),!u.SheetNames.length&&v["!ref"]?(u.SheetNames.push("Sheet1"),u.Sheets&&(u.Sheets.Sheet1=v)):u.Preamble=v,u.Sheets&&z.forEach((function(e,t){u.Sheets[u.SheetNames[t]]["!autofilter"]=e})),u.Strings=b,u.SSF=Zo(qi),C.enc&&(u.Encryption=C.enc),l&&(u.Themes=l),u.Metadata={},void 0!==c&&(u.Metadata.Country=c),I.names.length>0&&(S.Names=I.names),u.Workbook=S,u}var Vp={SI:"e0859ff2f94f6810ab9108002b27b3d9",DSI:"02d5cdd59c2e1b10939708002b2cf9ae",UDI:"05d5cdd59c2e1b10939708002b2cf9ae"};function qp(e,t){var r,n,i,o;if(t||(t={}),Vm(t),bi(),t.codepage&&pi(t.codepage),e.FullPaths){if(Po.find(e,"/encryption"))throw new Error("File is password-protected");r=Po.find(e,"!CompObj"),n=Po.find(e,"/Workbook")||Po.find(e,"/Book")}else{switch(t.type){case"base64":e=Ai(Ti(e));break;case"binary":e=Ai(e);break;case"buffer":break;case"array":Array.isArray(e)||(e=Array.prototype.slice.call(e))}Ds(e,0),n={content:e}}if(r&&Bp(r),t.bookProps&&!t.bookSheets)i={};else{var a=Ei?"buffer":"array";if(n&&n.content)i=$p(n.content,t);else if((o=Po.find(e,"PerfectOffice_MAIN"))&&o.content)i=Fu.to_workbook(o.content,(t.type=a,t));else{if(!(o=Po.find(e,"NativeContent_MAIN"))||!o.content)throw(o=Po.find(e,"MN0"))&&o.content?new Error("Unsupported Works 4 for Mac file"):new Error("Cannot find Workbook stream");i=Fu.to_workbook(o.content,(t.type=a,t))}t.bookVBA&&e.FullPaths&&Po.find(e,"/_VBA_PROJECT_CUR/VBA/dir")&&(i.vbaraw=function(e){var t=Po.utils.cfb_new({root:"R"});return e.FullPaths.forEach((function(r,n){if("/"!==r.slice(-1)&&r.match(/_VBA_PROJECT_CUR/)){var i=r.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/,"");Po.utils.cfb_add(t,i,e.FileIndex[n].content)}})),Po.write(t)}(e))}var s={};return e.FullPaths&&function(e,t,r){var n=Po.find(e,"/!DocumentSummaryInformation");if(n&&n.size>0)try{var i=Al(n,Fc,Vp.DSI);for(var o in i)t[o]=i[o]}catch(e){if(r.WTF)throw e}var a=Po.find(e,"/!SummaryInformation");if(a&&a.size>0)try{var s=Al(a,Lc,Vp.SI);for(var c in s)null==t[c]&&(t[c]=s[c])}catch(e){if(r.WTF)throw e}t.HeadingPairs&&t.TitlesOfParts&&(ll(t.HeadingPairs,t.TitlesOfParts,t,r),delete t.HeadingPairs,delete t.TitlesOfParts)}(e,s,t),i.Props=i.Custprops=s,t.bookFiles&&(i.cfb=e),i}function Xp(e,t){var r=t||{},n=Po.utils.cfb_new({root:"R"}),i="/Workbook";switch(r.bookType||"xls"){case"xls":r.bookType="biff8";case"xla":r.bookType||(r.bookType="xla");case"biff8":i="/Workbook",r.biff=8;break;case"biff5":i="/Book",r.biff=5;break;default:throw new Error("invalid type "+r.bookType+" for XLS CFB")}return Po.utils.cfb_add(n,i,om(e,r)),8==r.biff&&(e.Props||e.Custprops)&&function(e,t){var r,n=[],i=[],o=[],a=0,s=No(Fc,"n"),c=No(Lc,"n");if(e.Props)for(r=Do(e.Props),a=0;a-1||cl.indexOf(o[a][0])>-1||null!=o[a][1]&&l.push(o[a]);i.length&&Po.utils.cfb_add(t,"/SummaryInformation",Ml(i,Vp.SI,c,Lc)),(n.length||l.length)&&Po.utils.cfb_add(t,"/DocumentSummaryInformation",Ml(n,Vp.DSI,s,Fc,l.length?l:null,Vp.UDI))}(e,n),8==r.biff&&e.vbaraw&&function(e,t){t.FullPaths.forEach((function(r,n){if(0!=n){var i=r.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");"/"!==i.slice(-1)&&Po.utils.cfb_add(e,i,t.FileIndex[n].content)}}))}(n,Po.read(e.vbaraw,{type:"string"==typeof e.vbaraw?"binary":"buffer"})),n}var Gp={0:{f:function(e,t){var r={},n=e.l+t;r.r=e.read_shift(4),e.l+=4;var i=e.read_shift(2);e.l+=1;var o=e.read_shift(1);return e.l=n,7&o&&(r.level=7&o),16&o&&(r.hidden=!0),32&o&&(r.hpt=i/20),r}},1:{f:function(e){return[fc(e)]}},2:{f:function(e){return[fc(e),xc(e),"n"]}},3:{f:function(e){return[fc(e),e.read_shift(1),"e"]}},4:{f:function(e){return[fc(e),e.read_shift(1),"b"]}},5:{f:function(e){return[fc(e),Oc(e),"n"]}},6:{f:function(e){return[fc(e),oc(e),"str"]}},7:{f:function(e){return[fc(e),e.read_shift(4),"s"]}},8:{f:function(e,t,r){var n=e.l+t,i=fc(e);i.r=r["!row"];var o=[i,oc(e),"str"];if(r.cellFormula){e.l+=2;var a=Jh(e,n-e.l,r);o[3]=Vh(a,0,i,r.supbooks,r)}else e.l=n;return o}},9:{f:function(e,t,r){var n=e.l+t,i=fc(e);i.r=r["!row"];var o=[i,Oc(e),"n"];if(r.cellFormula){e.l+=2;var a=Jh(e,n-e.l,r);o[3]=Vh(a,0,i,r.supbooks,r)}else e.l=n;return o}},10:{f:function(e,t,r){var n=e.l+t,i=fc(e);i.r=r["!row"];var o=[i,e.read_shift(1),"b"];if(r.cellFormula){e.l+=2;var a=Jh(e,n-e.l,r);o[3]=Vh(a,0,i,r.supbooks,r)}else e.l=n;return o}},11:{f:function(e,t,r){var n=e.l+t,i=fc(e);i.r=r["!row"];var o=[i,e.read_shift(1),"e"];if(r.cellFormula){e.l+=2;var a=Jh(e,n-e.l,r);o[3]=Vh(a,0,i,r.supbooks,r)}else e.l=n;return o}},12:{f:function(e){return[dc(e)]}},13:{f:function(e){return[dc(e),xc(e),"n"]}},14:{f:function(e){return[dc(e),e.read_shift(1),"e"]}},15:{f:function(e){return[dc(e),e.read_shift(1),"b"]}},16:{f:Nd},17:{f:function(e){return[dc(e),oc(e),"str"]}},18:{f:function(e){return[dc(e),e.read_shift(4),"s"]}},19:{f:cc},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:function(e,t,r){var n=e.l+t;e.l+=4,e.l+=1;var i=e.read_shift(4),o=gc(e),a=Qh(e,0,r),s=yc(e);e.l=n;var c={Name:o,Ptg:a};return i<268435455&&(c.Sheet=i),s&&(c.Comment=s),c}},40:{},42:{},43:{f:function(e,t,r){var n={};n.sz=e.read_shift(2)/20;var i=function(e){var t=e.read_shift(1);return e.l++,{fBold:1&t,fItalic:2&t,fUnderline:4&t,fStrikeout:8&t,fOutline:16&t,fShadow:32&t,fCondense:64&t,fExtend:128&t}}(e);switch(i.fItalic&&(n.italic=1),i.fCondense&&(n.condense=1),i.fExtend&&(n.extend=1),i.fShadow&&(n.shadow=1),i.fOutline&&(n.outline=1),i.fStrikeout&&(n.strike=1),700===e.read_shift(2)&&(n.bold=1),e.read_shift(2)){case 1:n.vertAlign="superscript";break;case 2:n.vertAlign="subscript"}var o=e.read_shift(1);0!=o&&(n.underline=o);var a=e.read_shift(1);a>0&&(n.family=a);var s=e.read_shift(1);switch(s>0&&(n.charset=s),e.l++,n.color=function(e){var t={},r=e.read_shift(1)>>>1,n=e.read_shift(1),i=e.read_shift(2,"i"),o=e.read_shift(1),a=e.read_shift(1),s=e.read_shift(1);switch(e.l++,r){case 0:t.auto=1;break;case 1:t.index=n;var c=Hc[n];c&&(t.rgb=hf(c));break;case 2:t.rgb=hf([o,a,s]);break;case 3:t.theme=n}return 0!=i&&(t.tint=i>0?i/32767:i/32768),t}(e),e.read_shift(1)){case 1:n.scheme="major";break;case 2:n.scheme="minor"}return n.name=oc(e),n}},44:{f:function(e,t){return[e.read_shift(2),oc(e)]}},45:{f:Nf},46:{f:zf},47:{f:function(e,t){var r=e.l+t,n=e.read_shift(2),i=e.read_shift(2);return e.l=r,{ixfe:n,numFmtId:i}}},48:{},49:{f:function(e){return e.read_shift(4,"i")}},50:{},51:{f:function(e){for(var t=[],r=e.read_shift(4);r-- >0;)t.push([e.read_shift(4),e.read_shift(4)]);return t}},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:Ou},62:{f:function(e){return[fc(e),cc(e),"is"]}},63:{f:function(e){var t={};t.i=e.read_shift(4);var r={};r.r=e.read_shift(4),r.c=e.read_shift(4),t.r=Ks(r);var n=e.read_shift(1);return 2&n&&(t.l="1"),8&n&&(t.a="1"),t}},64:{f:function(){}},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:Ns,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:function(e){var t=e.read_shift(2);return e.l+=28,{RTL:32&t}}},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:function(e,t){var r={},n=e[e.l];return++e.l,r.above=!(64&n),r.left=!(128&n),e.l+=18,r.name=mc(e),r}},148:{f:Id,p:16},151:{f:function(){}},152:{},153:{f:function(e,t){var r={},n=e.read_shift(4);r.defaultThemeVersion=e.read_shift(4);var i=t>8?oc(e):"";return i.length>0&&(r.CodeName=i),r.autoCompressPictures=!!(65536&n),r.backupFile=!!(64&n),r.checkCompatibility=!!(4096&n),r.date1904=!!(1&n),r.filterPrivacy=!!(8&n),r.hidePivotFieldList=!!(1024&n),r.promptedSolutions=!!(16&n),r.publishItems=!!(2048&n),r.refreshAllConnections=!!(262144&n),r.saveExternalLinkValues=!!(128&n),r.showBorderUnselectedTables=!!(4&n),r.showInkAnnotation=!!(32&n),r.showObjects=["all","placeholders","none"][n>>13&3],r.showPivotChartFilter=!!(32768&n),r.updateLinks=["userSet","never","always"][n>>8&3],r}},154:{},155:{},156:{f:function(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=wc(e),r.name=oc(e),r}},157:{},158:{},159:{T:1,f:function(e){return[e.read_shift(4),e.read_shift(4)]}},160:{T:-1},161:{T:1,f:Tc},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:Fd},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:function(e,t){return{flags:e.read_shift(4),version:e.read_shift(4),name:oc(e)}}},336:{T:-1},337:{f:function(e){return e.l+=4,0!=e.read_shift(4)},T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:wc},357:{},358:{},359:{},360:{T:1},361:{},362:{f:xu},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:function(e,t,r){var n=e.l+t,i=Sc(e),o=e.read_shift(1),a=[i];if(a[2]=o,r.cellFormula){var s=Zh(e,n-e.l,r);a[1]=s}else e.l=n;return a}},427:{f:function(e,t,r){var n=e.l+t,i=[Tc(e)];if(r.cellFormula){var o=ed(e,n-e.l,r);i[1]=o,e.l=n}else e.l=n;return i}},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:function(e){var t={};return Bd.forEach((function(r){t[r]=Oc(e)})),t}},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:function(){}},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:function(e,t){var r=e.l+t,n=Tc(e),i=yc(e),o=oc(e),a=oc(e),s=oc(e);e.l=r;var c={rfx:n,relId:i,loc:o,display:s};return a&&(c.Tooltip=a),c}},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:wc},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:uh},633:{T:1},634:{T:-1},635:{T:1,f:function(e){var t={};t.iauthor=e.read_shift(4);var r=Tc(e);return t.rfx=r.s,t.ref=Ks(r.s),e.l+=16,t}},636:{T:-1},637:{f:lc},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:function(e,t){return e.l+=10,{name:oc(e)}}},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:function(){}},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}},Yp={6:{f:Gh},10:{f:Pl},12:{f:Dl},13:{f:Dl},14:{f:jl},15:{f:jl},16:{f:Oc},17:{f:jl},18:{f:jl},19:{f:Dl},20:{f:vu},21:{f:vu},23:{f:xu},24:{f:_u},25:{f:jl},26:{},27:{},28:{f:function(e,t,r){return function(e,t,r){if(!(r.biff<8)){var n=e.read_shift(2),i=e.read_shift(2),o=e.read_shift(2),a=e.read_shift(2),s=$l(e,0,r);return r.biff<8&&e.read_shift(1),[{r:n,c:i},s,a,o]}}(e,0,r)}},29:{},34:{f:jl},35:{f:gu},38:{f:Oc},39:{f:Oc},40:{f:Oc},41:{f:Oc},42:{f:jl},43:{f:jl},47:{f:function(e,t,r){var n={Type:r.biff>=8?e.read_shift(2):0};return n.Type?uf(e,t-2,n):function(e,t,r,n){var i={key:Dl(e),verificationBytes:Dl(e)};r.password&&(i.verifier=sf(r.password)),n.valid=i.verificationBytes===i.verifier,n.valid&&(n.insitu=lf(r.password))}(e,r.biff,r,n),n}},49:{f:function(e,t,r){var n={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(r&&r.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return n.name=Bl(e,0,r),n}},51:{f:Dl},60:{},61:{f:function(e){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{f:jl},65:{f:function(){}},66:{f:Dl},77:{},80:{},81:{},82:{},85:{f:Dl},89:{},90:{},91:{},92:{f:function(e,t,r){if(r.enc)return e.l+=t,"";var n=e.l,i=$l(e,0,r);return e.read_shift(t+n-e.l),i}},93:{f:function(e,t,r){if(r&&r.biff<8)return function(e,t,r){e.l+=4;var n=e.read_shift(2),i=e.read_shift(2),o=e.read_shift(2);e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=6,t-=36;var a=[];return a.push((Su[n]||Ns)(e,t,r)),{cmo:[i,n,o],ft:a}}(e,t,r);var n=au(e),i=function(e,t){for(var r=e.l+t,n=[];e.l7||t[1]>7)throw new Error("Bad Gutters: "+t.join("|"));return t}},129:{f:function(e,t,r){var n=r&&8==r.biff||2==t?e.read_shift(2):(e.l+=t,0);return{fDialog:16&n,fBelow:64&n,fRight:128&n}}},130:{f:Dl},131:{f:jl},132:{f:jl},133:{f:function(e,t,r){var n=e.read_shift(4),i=3&e.read_shift(1),o=e.read_shift(1);switch(o){case 0:o="Worksheet";break;case 1:o="Macrosheet";break;case 2:o="Chartsheet";break;case 6:o="VBAModule"}var a=Bl(e,0,r);return 0===a.length&&(a="Sheet1"),{pos:n,hs:i,dt:o,name:a}}},134:{},140:{f:function(e){var t,r=[0,0];return t=e.read_shift(2),r[0]=Bc[t]||t,t=e.read_shift(2),r[1]=Bc[t]||t,r}},141:{f:Dl},144:{},146:{f:function(e){for(var t=e.read_shift(2),r=[];t-- >0;)r.push(Zl(e));return r}},151:{},152:{},153:{},154:{},155:{},156:{f:Dl},157:{},158:{},160:{f:Ru},161:{f:function(e,t){var r={};return t<32||(e.l+=16,r.header=Oc(e),r.footer=Oc(e),e.l+=2),r}},174:{},175:{},176:{},177:{},178:{},180:{},181:{},182:{},184:{},185:{},189:{f:function(e,t){for(var r=e.l+t-2,n=e.read_shift(2),i=e.read_shift(2),o=[];e.l>2&1,6,n.data=function(e,t,r,n){var i={},o=e.read_shift(4),a=e.read_shift(4),s=e.read_shift(4),c=e.read_shift(2);return i.patternType=zc[s>>26],n.cellStyles?(i.alc=7&o,i.fWrap=o>>3&1,i.alcV=o>>4&7,i.fJustLast=o>>7&1,i.trot=o>>8&255,i.cIndent=o>>16&15,i.fShrinkToFit=o>>20&1,i.iReadOrder=o>>22&2,i.fAtrNum=o>>26&1,i.fAtrFnt=o>>27&1,i.fAtrAlc=o>>28&1,i.fAtrBdr=o>>29&1,i.fAtrPat=o>>30&1,i.fAtrProt=o>>31&1,i.dgLeft=15&a,i.dgRight=a>>4&15,i.dgTop=a>>8&15,i.dgBottom=a>>12&15,i.icvLeft=a>>16&127,i.icvRight=a>>23&127,i.grbitDiag=a>>30&3,i.icvTop=127&s,i.icvBottom=s>>7&127,i.icvDiag=s>>14&127,i.dgDiag=s>>21&15,i.icvFore=127&c,i.icvBack=c>>7&127,i.fsxButton=c>>14&1,i):i}(e,0,n.fStyle,r),n}},225:{f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{f:Pl},227:{},229:{f:function(e,t){for(var r=[],n=e.read_shift(2);n--;)r.push(ru(e));return r}},233:{},235:{},236:{},237:{},239:{},240:{},241:{},242:{},244:{},245:{},246:{},247:{},248:{},249:{},251:{},252:{f:function(e,t){for(var r=e.l+t,n=e.read_shift(4),i=e.read_shift(4),o=[],a=0;a!=i&&e.l255)throw new Error("Unexpected SupBook type: "+o);for(var a=Hl(e,o),s=[];n>e.l;)s.push(Wl(e));return[o,i,a,s]}},431:{f:jl},432:{},433:{},434:{},437:{},438:{f:function(e,t,r){var n=e.l,i="";try{e.l+=4;var o=(r.lastobj||{cmo:[0,0]}).cmo[1];-1==[0,5,7,11,12,14].indexOf(o)?e.l+=6:function(e){var t=e.read_shift(1);e.l++;var r=e.read_shift(2);return e.l+=2,[t,r]}(e);var a=e.read_shift(2);e.read_shift(2),Dl(e);var s=e.read_shift(2);e.l+=s;for(var c=1;c=(l?a:2*a))break}if(i.length!==a&&i.length!==2*a)throw new Error("cchText: "+a+" != "+i.length);return e.l=n+t,{t:i}}catch(r){return e.l=n+t,{t:i}}}},439:{f:jl},440:{f:function(e,t){var r=ru(e);e.l+=16;var n=function(e,t){var r=e.l+t,n=e.read_shift(4);if(2!==n)throw new Error("Unrecognized streamVersion: "+n);var i=e.read_shift(2);e.l+=2;var o,a,s,c,l,u,f="";16&i&&(o=Xl(e,e.l)),128&i&&(a=Xl(e,e.l)),257==(257&i)&&(s=Xl(e,e.l)),1==(257&i)&&(c=ql(e,e.l)),8&i&&(f=Xl(e,e.l)),32&i&&(l=e.read_shift(16)),64&i&&(u=bl(e)),e.l=r;var h=a||s||c||"";h&&f&&(h+="#"+f),h||(h="#"+f),2&i&&"/"==h.charAt(0)&&"/"!=h.charAt(1)&&(h="file://"+h);var d={Target:h};return l&&(d.guid=l),u&&(d.time=u),o&&(d.Tooltip=o),d}(e,t-24);return[r,n]}},441:{},442:{f:Wl},443:{},444:{f:Dl},445:{},446:{},448:{f:Pl},449:{f:function(e){return e.read_shift(2),e.read_shift(4)},r:2},450:{f:Pl},512:{f:mu},513:{f:Cu},515:{f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5);var n=Jl(e),i=Oc(e);return n.val=i,n}},516:{f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5),e.l;var n=Jl(e);2==r.biff&&e.l++;var i=Wl(e,e.l,r);return n.val=i,n}},517:{f:yu},519:{f:Au},520:{f:function(e){var t={};t.r=e.read_shift(2),t.c=e.read_shift(2),t.cnt=e.read_shift(2)-t.c;var r=e.read_shift(2);e.l+=4;var n=e.read_shift(1);return e.l+=3,7&n&&(t.level=7&n),32&n&&(t.hidden=!0),64&n&&(t.hpt=r/20),t}},523:{},545:{f:ku},549:{f:hu},566:{},574:{f:function(e,t,r){return r&&r.biff>=2&&r.biff<5?{}:{RTL:64&e.read_shift(2)}}},638:{f:function(e){var t=e.read_shift(2),r=e.read_shift(2),n=tu(e);return{r:t,c:r,ixfe:n[0],rknum:n[1]}}},659:{},1048:{},1054:{f:function(e,t,r){return[e.read_shift(2),$l(e,0,r)]}},1084:{},1212:{f:function(e,t,r){var n=iu(e);e.l++;var i=e.read_shift(1);return[Xh(e,t-=8,r),i,n]}},2048:{f:function(e,t){e.read_shift(2);var r=ru(e),n=e.read_shift((t-10)/2,"dbcs-cont");return[r,n=n.replace(Di,"")]}},2049:{},2050:{},2051:{},2052:{},2053:{},2054:{},2055:{},2056:{},2057:{f:lu},2058:{},2059:{},2060:{},2061:{},2062:{},2063:{},2064:{},2066:{},2067:{},2128:{},2129:{},2130:{},2131:{},2132:{},2133:{},2134:{},2135:{},2136:{},2137:{},2138:{},2146:{},2147:{r:12},2148:{},2149:{},2150:{},2151:{f:Pl},2152:{},2154:{},2155:{},2156:{},2161:{},2162:{},2164:{},2165:{},2166:{},2167:{},2168:{},2169:{},2170:{},2171:{},2172:{f:function(e){e.l+=2;var t={cxfs:0,crc:0};return t.cxfs=e.read_shift(2),t.crc=e.read_shift(4),t},r:12},2173:{f:function(e,t){e.l,e.l+=2;var r=e.read_shift(2);e.l+=2;for(var n=e.read_shift(2),i=[];n-- >0;)i.push(rh(e,e.l));return{ixfe:r,ext:i}},r:12},2174:{},2175:{},2180:{},2181:{},2182:{},2183:{},2184:{},2185:{},2186:{},2187:{},2188:{f:jl,r:12},2189:{},2190:{r:12},2191:{},2192:{},2194:{},2195:{},2196:{f:function(e,t,r){if(!(r.biff<8)){var n=e.read_shift(2),i=e.read_shift(2);return[Hl(e,n,r),Hl(e,i,r)]}e.l+=t},r:12},2197:{},2198:{f:function(e,t,r){var n=e.l+t;if(124226!==e.read_shift(4))if(r.cellStyles){var i,o=e.slice(e.l);e.l=n;try{i=da(o,{type:"array"})}catch(e){return}var a=ca(i,"theme/theme/theme1.xml",!0);if(a)return Qf(a,r)}else e.l=n},r:12},2199:{},2200:{},2201:{},2202:{f:function(e){return[0!==e.read_shift(4),0!==e.read_shift(4),e.read_shift(4)]},r:12},2203:{f:Pl},2204:{},2205:{},2206:{},2207:{},2211:{f:function(e){var t=function(e){var t=e.read_shift(2),r=e.read_shift(2);return e.l+=8,{type:t,flags:r}}(e);if(2211!=t.type)throw new Error("Invalid Future Record "+t.type);return 0!==e.read_shift(4)}},2212:{},2213:{},2214:{},2215:{},4097:{},4098:{},4099:{},4102:{},4103:{},4105:{},4106:{},4107:{},4108:{},4109:{},4116:{},4117:{},4118:{},4119:{},4120:{},4121:{},4122:{},4123:{},4124:{},4125:{},4126:{},4127:{},4128:{},4129:{},4130:{},4132:{},4133:{},4134:{f:Dl},4135:{},4146:{},4147:{},4148:{},4149:{},4154:{},4156:{},4157:{},4158:{},4159:{},4160:{},4161:{},4163:{},4164:{f:function(e,t,r){var n={area:!1};if(5!=r.biff)return e.l+=t,n;var i=e.read_shift(1);return e.l+=3,16&i&&(n.area=!0),n}},4165:{},4166:{},4168:{},4170:{},4171:{},4174:{},4175:{},4176:{},4177:{},4187:{},4188:{f:function(e){for(var t=e.read_shift(2),r=[];t-- >0;)r.push(Zl(e));return r}},4189:{},4191:{},4192:{},4193:{},4194:{},4195:{},4196:{},4197:{},4198:{},4199:{},4200:{},0:{f:mu},1:{},2:{f:function(e){var t=Jl(e);++e.l;var r=e.read_shift(2);return t.t="n",t.val=r,t}},3:{f:function(e){var t=Jl(e);++e.l;var r=Oc(e);return t.t="n",t.val=r,t}},4:{f:function(e,t,r){r.biffguess&&5==r.biff&&(r.biff=2);var n=Jl(e);++e.l;var i=$l(e,0,r);return n.t="str",n.val=i,n}},5:{f:yu},7:{f:function(e){var t=e.read_shift(1);return 0===t?(e.l++,""):e.read_shift(t,"sbcs-cont")}},8:{},9:{f:lu},11:{},22:{f:Dl},30:{f:pu},31:{},32:{},33:{f:ku},36:{},37:{f:hu},50:{f:function(e,t){e.l+=6,e.l+=2,e.l+=1,e.l+=3,e.l+=1,e.l+=t-13}},62:{},52:{},67:{},68:{f:Dl},69:{},86:{},126:{},127:{f:function(e){var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),i={fmt:t,env:r,len:n,data:e.slice(e.l,e.l+n)};return e.l+=n,i}},135:{},136:{},137:{},145:{},148:{},149:{},150:{},169:{},171:{},188:{},191:{},192:{},194:{},195:{},214:{f:function(e,t,r){var n=e.l+t,i=Jl(e),o=e.read_shift(2),a=Hl(e,o,r);return e.l=n,i.t="str",i.val=a,i}},223:{},234:{},354:{},421:{},518:{f:Gh},521:{f:lu},536:{f:_u},547:{f:gu},561:{},579:{},1030:{f:Gh},1033:{f:lu},1091:{},2157:{},2163:{},2177:{},2240:{},2241:{},2242:{},2243:{},2244:{},2245:{},2246:{},2247:{},2248:{},2249:{},2250:{},2251:{},2262:{r:12},29282:{}};function Kp(e,t,r,n){var i=t;if(!isNaN(i)){var o=n||(r||[]).length||0,a=e.next(4);a.write_shift(2,i),a.write_shift(2,o),o>0&&xs(r)&&e.push(r)}}function Zp(e,t,r){return e||(e=Fs(7)),e.write_shift(2,t),e.write_shift(2,r),e.write_shift(2,0),e.write_shift(1,0),e}function Jp(e,t,r,n){if(null!=t.v)switch(t.t){case"d":case"n":var i="d"==t.t?zo(Yo(t.v)):t.v;return void(i==(0|i)&&i>=0&&i<65536?Kp(e,2,(o=r,a=n,s=i,c=Fs(9),Zp(c,o,a),c.write_shift(2,s),c)):Kp(e,3,function(e,t,r){var n=Fs(15);return Zp(n,e,t),n.write_shift(8,r,"f"),n}(r,n,i)));case"b":case"e":return void Kp(e,5,function(e,t,r,n){var i=Fs(9);return Zp(i,e,t),Ll(r,n||"b",i),i}(r,n,t.v,t.t));case"s":case"str":return void Kp(e,4,function(e,t,r){var n=Fs(8+2*r.length);return Zp(n,e,t),n.write_shift(1,r.length),n.write_shift(r.length,r,"sbcs"),n.l255||a.e.r>16383){if(n.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");a.e.c=Math.min(a.e.c,255),a.e.r=Math.min(a.e.c,16383),i=Js(a)}for(var l=a.s.r;l<=a.e.r;++l){s=qs(l);for(var u=a.s.c;u<=a.e.c;++u){l===a.s.r&&(c[u]=Gs(u)),i=c[u]+s;var f=o?(t[l]||[])[u]:t[i];f&&Jp(e,f,l,u)}}}(n,e.Sheets[e.SheetNames[i]],0,r),Kp(n,10),n.end()}function em(e,t,r){Kp(e,49,function(e,t){var r=e.name||"Arial",n=t&&5==t.biff,i=Fs(n?15+r.length:16+2*r.length);return i.write_shift(2,20*(e.sz||12)),i.write_shift(4,0),i.write_shift(2,400),i.write_shift(4,0),i.write_shift(2,0),i.write_shift(1,r.length),n||i.write_shift(1,1),i.write_shift((n?1:2)*r.length,r,n?"sbcs":"utf16le"),i}({sz:12,color:{theme:1},name:"Arial",family:2,scheme:"minor"},r))}function tm(e,t){if(t){var r=0;t.forEach((function(t,n){++r<=256&&t&&Kp(e,125,function(e,t){var r=Fs(12);r.write_shift(2,t),r.write_shift(2,t),r.write_shift(2,256*e.width),r.write_shift(2,0);var n=0;return e.hidden&&(n|=1),r.write_shift(1,n),n=e.level||0,r.write_shift(1,n),r.write_shift(2,0),r}(ud(n,t),n))}))}}function rm(e,t,r,n,i){var o=16+hd(i.cellXfs,t,i);if(null!=t.v||t.bf)if(t.bf)Kp(e,6,Yh(t,r,n,0,o));else switch(t.t){case"d":case"n":Kp(e,515,function(e,t,r,n){var i=Fs(14);return Ql(e,t,n,i),Cc(r,i),i}(r,n,"d"==t.t?zo(Yo(t.v)):t.v,o));break;case"b":case"e":Kp(e,517,function(e,t,r,n,i,o){var a=Fs(8);return Ql(e,t,n,a),Ll(r,o,a),a}(r,n,t.v,o,0,t.t));break;case"s":case"str":if(i.bookSST)Kp(e,253,function(e,t,r,n){var i=Fs(10);return Ql(e,t,n,i),i.write_shift(4,r),i}(r,n,ld(i.Strings,t.v,i.revStrings),o));else Kp(e,516,function(e,t,r,n,i){var o=!i||8==i.biff,a=Fs(+o+8+(1+o)*r.length);return Ql(e,t,n,a),a.write_shift(2,r.length),o&&a.write_shift(1,1),a.write_shift((1+o)*r.length,r,o?"utf16le":"sbcs"),a}(r,n,(t.v||"").slice(0,255),o,i));break;default:Kp(e,513,Ql(r,n,o))}else Kp(e,513,Ql(r,n,o))}function nm(e,t,r){var n,i,o,a=Bs(),s=r.SheetNames[e],c=r.Sheets[s]||{},l=(r||{}).Workbook||{},u=(l.Sheets||[])[e]||{},f=Array.isArray(c),h=8==t.biff,d="",p=[],m=Qs(c["!ref"]||"A1"),b=h?65536:16384;if(m.e.c>255||m.e.r>=b){if(t.WTF)throw new Error("Range "+(c["!ref"]||"A1")+" exceeds format limit A1:IV16384");m.e.c=Math.min(m.e.c,255),m.e.r=Math.min(m.e.c,b-1)}Kp(a,2057,uu(0,16,t)),Kp(a,13,Nl(1)),Kp(a,12,Nl(100)),Kp(a,15,Il(!0)),Kp(a,17,Il(!1)),Kp(a,16,Cc(.001)),Kp(a,95,Il(!0)),Kp(a,42,Il(!1)),Kp(a,43,Il(!1)),Kp(a,130,Nl(1)),Kp(a,128,(i=[0,0],(o=Fs(8)).write_shift(4,0),o.write_shift(2,i[0]?i[0]+1:0),o.write_shift(2,i[1]?i[1]+1:0),o)),Kp(a,131,Il(!1)),Kp(a,132,Il(!1)),h&&tm(a,c["!cols"]),Kp(a,512,function(e,t){var r=8!=t.biff&&t.biff?2:4,n=Fs(2*r+6);return n.write_shift(r,e.s.r),n.write_shift(r,e.e.r+1),n.write_shift(2,e.s.c),n.write_shift(2,e.e.c+1),n.write_shift(2,0),n}(m,t)),h&&(c["!links"]=[]);for(var y=m.s.r;y<=m.e.r;++y){d=qs(y);for(var v=m.s.c;v<=m.e.c;++v){y===m.s.r&&(p[v]=Gs(v)),n=p[v]+d;var g=f?(c[y]||[])[v]:c[n];g&&(rm(a,g,y,v,t),h&&g.l&&c["!links"].push([n,g.l]))}}var w=u.CodeName||u.name||s;return h&&Kp(a,574,function(e){var t=Fs(18),r=1718;return e&&e.RTL&&(r|=64),t.write_shift(2,r),t.write_shift(4,0),t.write_shift(4,64),t.write_shift(4,0),t.write_shift(4,0),t}((l.Views||[])[0])),h&&(c["!merges"]||[]).length&&Kp(a,229,function(e){var t=Fs(2+8*e.length);t.write_shift(2,e.length);for(var r=0;r255&&"undefined"!=typeof console&&console.error&&console.error("Worksheet '"+e.SheetNames[r]+"' extends beyond column IV (255). Data may be lost.")}var i=t||{};switch(i.biff||2){case 8:case 5:return function(e,t){var r=t||{},n=[];e&&!e.SSF&&(e.SSF=Zo(qi)),e&&e.SSF&&(Co(),Oo(e.SSF),r.revssf=Lo(e.SSF),r.revssf[e.SSF[65535]]=0,r.ssf=e.SSF),r.Strings=[],r.Strings.Count=0,r.Strings.Unique=0,qm(r),r.cellXfs=[],hd(r.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={});for(var i=0;i/g,"")).match(/");var o=e.match(/<\/table/i),a=i.index,s=o&&o.index||e.length,c=ra(e.slice(a,s),/(:?]*>)/i,""),l=-1,u=0,f=0,h=0,d={s:{r:1e7,c:1e7},e:{r:0,c:0}},p=[];for(a=0;a/i);for(s=0;s"))>-1;)g=g.slice(w+1);for(var _=0;_")));h=k.colspan?+k.colspan:1,((f=+k.rowspan)>1||h>1)&&p.push({s:{r:l,c:u},e:{r:l+(f||1)-1,c:u+h-1}});var S=k.t||k["data-t"]||"";if(g.length)if(g=Ua(g),d.s.r>l&&(d.s.r=l),d.e.ru&&(d.s.c=u),d.e.cr||i[l].s.c>a||i[l].e.r1&&(d.rowspan=s),c>1&&(d.colspan=c),n.editable?h=''+h+"":f&&(d["data-t"]=f&&f.t||"z",null!=f.v&&(d["data-v"]=f.v),null!=f.z&&(d["data-z"]=f.z),f.l&&"#"!=(f.l.Target||"#").charAt(0)&&(h=''+h+"")),d.id=(n.id||"sjs")+"-"+u,o.push(Ya("td",h,d))}}return""+o.join("")+""}var cm='SheetJS Table Export',lm="";var um={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"],era:["e","ee"],quarter:["\\Qm",'m\\"th quarter"']};function fm(e,t){var r,n,i,o,a,s,c,l,u=t||{},f=Za(e),h=[],d={name:""},p="",m=0,b={},y=[],v=u.dense?[]:{},g={value:""},w="",_=0,x=[],k=-1,S=-1,T={s:{r:1e6,c:1e7},e:{r:0,c:0}},E=0,O={},C=[],R={},A=[],M=1,P=1,j=[],I={Names:[]},D={},N=["",""],F=[],L={},B="",z=0,U=!1,H=!1,W=0;for(Ja.lastIndex=0,f=f.replace(//gm,"").replace(//gm,"");a=Ja.exec(f);)switch(a[3]=a[3].replace(/_.*$/,"")){case"table":case"工作表":"/"===a[1]?(T.e.c>=T.s.c&&T.e.r>=T.s.r?v["!ref"]=Js(T):v["!ref"]="A1:A1",u.sheetRows>0&&u.sheetRows<=T.e.r&&(v["!fullref"]=v["!ref"],T.e.r=u.sheetRows-1,v["!ref"]=Js(T)),C.length&&(v["!merges"]=C),A.length&&(v["!rows"]=A),i.name=i["名称"]||i.name,"undefined"!=typeof JSON&&JSON.stringify(i),y.push(i.name),b[i.name]=v,H=!1):"/"!==a[0].charAt(a[0].length-2)&&(i=_a(a[0],!1),k=S=-1,T.s.r=T.s.c=1e7,T.e.r=T.e.c=0,v=u.dense?[]:{},C=[],A=[],H=!0);break;case"table-row-group":"/"===a[1]?--E:++E;break;case"table-row":case"行":if("/"===a[1]){k+=M,M=1;break}if((o=_a(a[0],!1))["行号"]?k=o["行号"]-1:-1==k&&(k=0),(M=+o["number-rows-repeated"]||1)<10)for(W=0;W0&&(A[k+W]={level:E});S=-1;break;case"covered-table-cell":"/"!==a[1]&&++S,u.sheetStubs&&(u.dense?(v[k]||(v[k]=[]),v[k][S]={t:"z"}):v[Ks({r:k,c:S})]={t:"z"}),w="",x=[];break;case"table-cell":case"数据":if("/"===a[0].charAt(a[0].length-2))++S,g=_a(a[0],!1),P=parseInt(g["number-columns-repeated"]||"1",10),s={t:"z",v:null},g.formula&&0!=u.cellFormula&&(s.f=id(Ta(g.formula))),"string"==(g["数据类型"]||g["value-type"])&&(s.t="s",s.v=Ta(g["string-value"]||""),u.dense?(v[k]||(v[k]=[]),v[k][S]=s):v[Ks({r:k,c:S})]=s),S+=P-1;else if("/"!==a[1]){w="",_=0,x=[],P=1;var $=M?k+M-1:k;if(++S>T.e.c&&(T.e.c=S),ST.e.r&&(T.e.r=$),F=[],L={},s={t:(g=_a(a[0],!1))["数据类型"]||g["value-type"],v:null},u.cellFormula)if(g.formula&&(g.formula=Ta(g.formula)),g["number-matrix-columns-spanned"]&&g["number-matrix-rows-spanned"]&&(R={s:{r:k,c:S},e:{r:k+(parseInt(g["number-matrix-rows-spanned"],10)||0)-1,c:S+(parseInt(g["number-matrix-columns-spanned"],10)||0)-1}},s.F=Js(R),j.push([R,s.F])),g.formula)s.f=id(g.formula);else for(W=0;W=j[W][0].s.r&&k<=j[W][0].e.r&&S>=j[W][0].s.c&&S<=j[W][0].e.c&&(s.F=j[W][1]);switch((g["number-columns-spanned"]||g["number-rows-spanned"])&&(R={s:{r:k,c:S},e:{r:k+(parseInt(g["number-rows-spanned"],10)||0)-1,c:S+(parseInt(g["number-columns-spanned"],10)||0)-1}},C.push(R)),g["number-columns-repeated"]&&(P=parseInt(g["number-columns-repeated"],10)),s.t){case"boolean":s.t="b",s.v=ja(g["boolean-value"]);break;case"float":case"percentage":case"currency":s.t="n",s.v=parseFloat(g.value);break;case"date":s.t="d",s.v=Yo(g["date-value"]),u.cellDates||(s.t="n",s.v=zo(s.v)),s.z="m/d/yy";break;case"time":s.t="n",s.v=Vo(g["time-value"])/86400,u.cellDates&&(s.t="d",s.v=$o(s.v)),s.z="HH:MM:SS";break;case"number":s.t="n",s.v=parseFloat(g["数据数值"]);break;default:if("string"!==s.t&&"text"!==s.t&&s.t)throw new Error("Unsupported value type "+s.t);s.t="s",null!=g["string-value"]&&(w=Ta(g["string-value"]),x=[])}}else{if(U=!1,"s"===s.t&&(s.v=w||"",x.length&&(s.R=x),U=0==_),D.Target&&(s.l=D),F.length>0&&(s.c=F,F=[]),w&&!1!==u.cellText&&(s.w=w),U&&(s.t="z",delete s.v),(!U||u.sheetStubs)&&!(u.sheetRows&&u.sheetRows<=k))for(var V=0;V0;)v[k+V][S+P]=Zo(s);else for(v[Ks({r:k+V,c:S})]=s;--P>0;)v[Ks({r:k+V,c:S+P})]=Zo(s);T.e.c<=S&&(T.e.c=S)}S+=(P=parseInt(g["number-columns-repeated"]||"1",10))-1,P=0,s={},w="",x=[]}D={};break;case"document":case"document-content":case"电子表格文档":case"spreadsheet":case"主体":case"scripts":case"styles":case"font-face-decls":case"master-styles":if("/"===a[1]){if((r=h.pop())[0]!==a[3])throw"Bad state: "+r}else"/"!==a[0].charAt(a[0].length-2)&&h.push([a[3],!0]);break;case"annotation":if("/"===a[1]){if((r=h.pop())[0]!==a[3])throw"Bad state: "+r;L.t=w,x.length&&(L.R=x),L.a=B,F.push(L)}else"/"!==a[0].charAt(a[0].length-2)&&h.push([a[3],!1]);B="",z=0,w="",_=0,x=[];break;case"creator":"/"===a[1]?B=f.slice(z,a.index):z=a.index+a[0].length;break;case"meta":case"元数据":case"settings":case"config-item-set":case"config-item-map-indexed":case"config-item-map-entry":case"config-item-map-named":case"shapes":case"frame":case"text-box":case"image":case"data-pilot-tables":case"list-style":case"form":case"dde-links":case"event-listeners":case"chart":if("/"===a[1]){if((r=h.pop())[0]!==a[3])throw"Bad state: "+r}else"/"!==a[0].charAt(a[0].length-2)&&h.push([a[3],!1]);w="",_=0,x=[];break;case"scientific-number":case"currency-symbol":case"currency-style":case"script":case"libraries":case"automatic-styles":case"default-style":case"page-layout":case"style":case"map":case"font-face":case"paragraph-properties":case"table-properties":case"table-column-properties":case"table-row-properties":case"table-cell-properties":case"fraction":case"boolean-style":case"boolean":case"text-style":case"text-content":case"text-properties":case"embedded-text":case"body":case"电子表格":case"forms":case"table-column":case"table-header-rows":case"table-rows":case"table-column-group":case"table-header-columns":case"table-columns":case"null-date":case"graphic-properties":case"calculation-settings":case"named-expressions":case"label-range":case"label-ranges":case"named-expression":case"sort":case"sort-by":case"sort-groups":case"tab":case"line-break":case"span":case"s":case"date":case"object":case"title":case"标题":case"desc":case"binary-data":case"table-source":case"scenario":case"iteration":case"content-validations":case"content-validation":case"help-message":case"error-message":case"database-ranges":case"filter":case"filter-and":case"filter-or":case"filter-condition":case"list-level-style-bullet":case"list-level-style-number":case"list-level-properties":case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":case"event-listener":case"initial-creator":case"creation-date":case"print-date":case"generator":case"document-statistic":case"user-defined":case"editing-duration":case"editing-cycles":case"config-item":case"page-number":case"page-count":case"time":case"cell-range-source":case"detective":case"operation":case"highlighted-range":case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":case"rect":case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":case"properties":case"property":case"table-protection":case"data-pilot-grand-total":case"office-document-common-attrs":break;case"number-style":case"percentage-style":case"date-style":case"time-style":if("/"===a[1]){if(O[d.name]=p,(r=h.pop())[0]!==a[3])throw"Bad state: "+r}else"/"!==a[0].charAt(a[0].length-2)&&(p="",d=_a(a[0],!1),h.push([a[3],!0]));break;case"number":case"day":case"month":case"year":case"era":case"day-of-week":case"week-of-year":case"quarter":case"hours":case"minutes":case"seconds":case"am-pm":switch(h[h.length-1][0]){case"time-style":case"date-style":n=_a(a[0],!1),p+=um[a[3]]["long"===n.style?1:0]}break;case"text":if("/>"===a[0].slice(-2))break;if("/"===a[1])switch(h[h.length-1][0]){case"number-style":case"date-style":case"time-style":p+=f.slice(m,a.index)}else m=a.index+a[0].length;break;case"named-range":N=od((n=_a(a[0],!1))["cell-range-address"]);var q={Name:n.name,Ref:N[0]+"!"+N[1]};H&&(q.Sheet=y.length),I.Names.push(q);break;case"p":case"文本串":if(["master-styles"].indexOf(h[h.length-1][0])>-1)break;if("/"!==a[1]||g&&g["string-value"])_a(a[0],!1),_=a.index+a[0].length;else{var X=(c=f.slice(_,a.index),l=void 0,l=c.replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(//g," ").replace(//g,(function(e,t){return Array(parseInt(t,10)+1).join(" ")})).replace(/]*\/>/g,"\t").replace(//g,"\n"),[Ta(l.replace(/<[^>]*>/g,""))]);w=(w.length>0?w+"\n":"")+X[0]}break;case"database-range":if("/"===a[1])break;try{b[(N=od(_a(a[0])["target-range-address"]))[0]]["!autofilter"]={ref:N[1]}}catch(e){}break;case"a":if("/"!==a[1]){if(!(D=_a(a[0],!1)).href)break;D.Target=Ta(D.href),delete D.href,"#"==D.Target.charAt(0)&&D.Target.indexOf(".")>-1?(N=od(D.Target.slice(1)),D.Target="#"+N[0]+"!"+N[1]):D.Target.match(/^\.\.[\\\/]/)&&(D.Target=D.Target.slice(3))}break;default:switch(a[2]){case"dc:":case"calcext:":case"loext:":case"ooo:":case"chartooo:":case"draw:":case"style:":case"chart:":case"form:":case"uof:":case"表:":case"字:":break;default:if(u.WTF)throw new Error(a)}}var G={Sheets:b,SheetNames:y,Workbook:I};return u.bookSheets&&delete G.Sheets,G}function hm(e,t){t=t||{},oa(e,"META-INF/manifest.xml")&&function(e,t){for(var r,n,i=Za(e);r=Ja.exec(i);)switch(r[3]){case"manifest":break;case"file-entry":if("/"==(n=_a(r[0],!1)).path&&n.type!==Qc)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(t&&t.WTF)throw r}}(sa(e,"META-INF/manifest.xml"),t);var r=ca(e,"content.xml");if(!r)throw new Error("Missing content.xml in ODS / UOF file");var n=fm(La(r),t);return oa(e,"meta.xml")&&(n.Props=il(sa(e,"meta.xml"))),n}function dm(e,t){return fm(e,t)}var pm=function(){var e=["",'',"",'',"",'',"",""].join(""),t=""+e+"";return function(){return ma+t}}(),mm=function(){var e=" \n",t=function(t,r,n){var i=[];i.push(' \n');var o=0,a=0,s=Zs(t["!ref"]||"A1"),c=t["!merges"]||[],l=0,u=Array.isArray(t);if(t["!cols"])for(a=0;a<=s.e.c;++a)i.push(" \n");var f="",h=t["!rows"]||[];for(o=0;o\n");for(;o<=s.e.r;++o){for(f=h[o]?' table:style-name="ro'+h[o].ods+'"':"",i.push(" \n"),a=0;aa||c[l].s.r>o||c[l].e.c\n");else{var b=Ks({r:o,c:a}),y=u?(t[o]||[])[a]:t[b];if(y&&y.f&&(p["table:formula"]=Ca(("of:="+y.f.replace(mh,"$1[.$2$3$4$5]").replace(/\]:\[/g,":")).replace(/;/g,"|").replace(/,/g,";")),y.F&&y.F.slice(0,b.length)==b)){var v=Zs(y.F);p["table:number-matrix-columns-spanned"]=v.e.c-v.s.c+1,p["table:number-matrix-rows-spanned"]=v.e.r-v.s.r+1}if(y){switch(y.t){case"b":m=y.v?"TRUE":"FALSE",p["office:value-type"]="boolean",p["office:boolean-value"]=y.v?"true":"false";break;case"n":m=y.w||String(y.v||0),p["office:value-type"]="float",p["office:value"]=y.v||0;break;case"s":case"str":m=null==y.v?"":y.v,p["office:value-type"]="string";break;case"d":m=y.w||Yo(y.v).toISOString(),p["office:value-type"]="date",p["office:date-value"]=Yo(y.v).toISOString(),p["table:style-name"]="ce1";break;default:i.push(e);continue}var g=Ca(m).replace(/ +/g,(function(e){return''})).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"");if(y.l&&y.l.Target){var w=y.l.Target;"#"==(w="#"==w.charAt(0)?"#"+w.slice(1).replace(/\./,"!"):w).charAt(0)||w.match(/^\w+:/)||(w="../"+w),g=Ya("text:a",g,{"xlink:href":w.replace(/&/g,"&")})}i.push(" "+Ya("table:table-cell",Ya("text:p",g,{}),p)+"\n")}else i.push(e)}}i.push(" \n")}return i.push(" \n"),i.join("")};return function(e,r){var n=[ma],i=Ga({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),o=Ga({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});"fods"==r.bookType?(n.push("\n"),n.push(tl().replace(/office:document-meta/g,"office:meta"))):n.push("\n"),function(e,t){e.push(" \n"),e.push(' \n'),e.push(' \n'),e.push(" /\n"),e.push(' \n'),e.push(" /\n"),e.push(" \n"),e.push(" \n");var r=0;t.SheetNames.map((function(e){return t.Sheets[e]})).forEach((function(t){if(t&&t["!cols"])for(var n=0;n\n'),e.push(' \n'),e.push(" \n"),++r}}));var n=0;t.SheetNames.map((function(e){return t.Sheets[e]})).forEach((function(t){if(t&&t["!rows"])for(var r=0;r\n'),e.push(' \n'),e.push(" \n"),++n}})),e.push(' \n'),e.push(' \n'),e.push(" \n"),e.push(' \n'),e.push(" \n")}(n,e),n.push(" \n"),n.push(" \n");for(var a=0;a!=e.SheetNames.length;++a)n.push(t(e.Sheets[e.SheetNames[a]],e,a));return n.push(" \n"),n.push(" \n"),"fods"==r.bookType?n.push(""):n.push(""),n.join("")}}();function bm(e,t){if("fods"==t.bookType)return mm(e,t);var r=ha(),n="",i=[],o=[];return fa(r,n="mimetype","application/vnd.oasis.opendocument.spreadsheet"),fa(r,n="content.xml",mm(e,t)),i.push([n,"text/xml"]),o.push([n,"ContentFile"]),fa(r,n="styles.xml",pm(e,t)),i.push([n,"text/xml"]),o.push([n,"StylesFile"]),fa(r,n="meta.xml",ma+tl()),i.push([n,"text/xml"]),o.push([n,"MetadataFile"]),fa(r,n="manifest.rdf",function(e){var t,r,n=[ma];n.push('\n');for(var i=0;i!=e.length;++i)n.push(el(e[i][0],e[i][1])),n.push((t="",r=e[i][0],[' \n',' \n'," \n"].join("")));return n.push(el("","Document","pkg")),n.push(""),n.join("")}(o)),i.push([n,"application/rdf+xml"]),fa(r,n="META-INF/manifest.xml",function(e){var t=[ma];t.push('\n'),t.push(' \n');for(var r=0;r\n');return t.push(""),t.join("")}(i)),r} +/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function ym(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function vm(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):La(Pi(e))}function gm(e){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(e):Ai(Ba(e))}function wm(e){var t=e.reduce((function(e,t){return e+t.length}),0),r=new Uint8Array(t),n=0;return e.forEach((function(e){r.set(e,n),n+=e.length})),r}function _m(e){return 16843009*((e=(858993459&(e-=e>>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135)>>>24}function xm(e,t){var r=t?t[0]:0,n=127&e[r];e:if(e[r++]>=128){if(n|=(127&e[r])<<7,e[r++]<128)break e;if(n|=(127&e[r])<<14,e[r++]<128)break e;if(n|=(127&e[r])<<21,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,28),++r,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,35),++r,e[r++]<128)break e;if(n+=(127&e[r])*Math.pow(2,42),++r,e[r++]<128)break e}return t&&(t[0]=r),n}function km(e){var t=new Uint8Array(7);t[0]=127&e;var r=1;e:if(e>127){if(t[r-1]|=128,t[r]=e>>7&127,++r,e<=16383)break e;if(t[r-1]|=128,t[r]=e>>14&127,++r,e<=2097151)break e;if(t[r-1]|=128,t[r]=e>>21&127,++r,e<=268435455)break e;if(t[r-1]|=128,t[r]=e/256>>>21&127,++r,e<=34359738367)break e;if(t[r-1]|=128,t[r]=e/65536>>>21&127,++r,e<=4398046511103)break e;t[r-1]|=128,t[r]=e/16777216>>>21&127,++r}return t.slice(0,r)}function Sm(e){var t=0,r=127&e[t];e:if(e[t++]>=128){if(r|=(127&e[t])<<7,e[t++]<128)break e;if(r|=(127&e[t])<<14,e[t++]<128)break e;if(r|=(127&e[t])<<21,e[t++]<128)break e;r|=(127&e[t])<<28}return r}function Tm(e){for(var t=[],r=[0];r[0]=128;);n=e.slice(c,r[0]);break;case 5:s=4,n=e.slice(r[0],r[0]+s),r[0]+=s;break;case 1:s=8,n=e.slice(r[0],r[0]+s),r[0]+=s;break;case 2:s=xm(e,r),n=e.slice(r[0],r[0]+s),r[0]+=s;break;default:throw new Error("PB Type ".concat(a," for Field ").concat(o," at offset ").concat(i))}var l={data:n,type:a};null==t[o]?t[o]=[l]:t[o].push(l)}return t}function Em(e){var t=[];return e.forEach((function(e,r){e.forEach((function(e){e.data&&(t.push(km(8*r+e.type)),2==e.type&&t.push(km(e.data.length)),t.push(e.data))}))})),wm(t)}function Om(e,t){return(null==e?void 0:e.map((function(e){return t(e.data)})))||[]}function Cm(e){for(var t,r=[],n=[0];n[0]>>0>0),r.push(a)}return r}function Rm(e){var t=[];return e.forEach((function(e){var r=[];r[1]=[{data:km(e.id),type:0}],r[2]=[],null!=e.merge&&(r[3]=[{data:km(+!!e.merge),type:0}]);var n=[];e.messages.forEach((function(e){n.push(e.data),e.meta[3]=[{type:0,data:km(e.data.length)}],r[2].push({data:Em(e.meta),type:2})}));var i=Em(r);t.push(km(i.length)),t.push(i),n.forEach((function(e){return t.push(e)}))})),wm(t)}function Am(e,t){if(0!=e)throw new Error("Unexpected Snappy chunk type ".concat(e));for(var r=[0],n=xm(t,r),i=[];r[0]>2&7),a=(224&t[r[0]++])<<3,a|=t[r[0]++]):(s=1+(t[r[0]++]>>2),2==o?(a=t[r[0]]|t[r[0]+1]<<8,r[0]+=2):(a=(t[r[0]]|t[r[0]+1]<<8|t[r[0]+2]<<16|t[r[0]+3]<<24)>>>0,r[0]+=4)),i=[wm(i)],0==a)throw new Error("Invalid offset 0");if(a>i[0].length)throw new Error("Invalid offset beyond length");if(s>=a)for(i.push(i[0].slice(-a)),s-=a;s>=i[i.length-1].length;)i.push(i[i.length-1]),s-=i[i.length-1].length;i.push(i[0].slice(-a,-a+s))}else{var c=t[r[0]++]>>2;if(c<60)++c;else{var l=c-59;c=t[r[0]],l>1&&(c|=t[r[0]+1]<<8),l>2&&(c|=t[r[0]+2]<<16),l>3&&(c|=t[r[0]+3]<<24),c>>>=0,c++,r[0]+=l}i.push(t.slice(r[0],r[0]+c)),r[0]+=c}}var u=wm(i);if(u.length!=n)throw new Error("Unexpected length: ".concat(u.length," != ").concat(n));return u}function Mm(e){for(var t=[],r=0;r>8&255]))):n<=16777216?(a+=4,t.push(new Uint8Array([248,n-1&255,n-1>>8&255,n-1>>16&255]))):n<=4294967296&&(a+=5,t.push(new Uint8Array([252,n-1&255,n-1>>8&255,n-1>>16&255,n-1>>>24&255]))),t.push(e.slice(r,r+n)),a+=n,i[0]=0,i[1]=255&a,i[2]=a>>8&255,i[3]=a>>16&255,r+=n}return wm(t)}function jm(e,t,r){var n,i=ym(e),o=i.getUint32(8,!0),a=12,s=-1,c=-1,l=NaN,u=NaN,f=new Date(2001,0,1);switch(1&o&&(l=function(e,t){for(var r=(127&e[t+15])<<7|e[t+14]>>1,n=1&e[t+14],i=t+13;i>=t;--i)n=256*n+e[i];return(128&e[t+15]?-n:n)*Math.pow(10,r-6176)}(e,a),a+=16),2&o&&(u=i.getFloat64(a,!0),a+=8),4&o&&(f.setTime(f.getTime()+1e3*i.getFloat64(a,!0)),a+=8),8&o&&(c=i.getUint32(a,!0),a+=4),16&o&&(s=i.getUint32(a,!0),a+=4),e[1]){case 0:break;case 2:case 10:n={t:"n",v:l};break;case 3:n={t:"s",v:t[c]};break;case 5:n={t:"d",v:f};break;case 6:n={t:"b",v:u>0};break;case 7:n={t:"n",v:u/86400};break;case 8:n={t:"e",v:0};break;case 9:if(!(s>-1))throw new Error("Unsupported cell type ".concat(e[1]," : ").concat(31&o," : ").concat(e.slice(0,4)));n={t:"s",v:r[s]};break;default:throw new Error("Unsupported cell type ".concat(e[1]," : ").concat(31&o," : ").concat(e.slice(0,4)))}return n}function Im(e,t){var r=new Uint8Array(32),n=ym(r),i=12,o=0;switch(r[0]=5,e.t){case"n":r[1]=2,function(e,t,r){var n=Math.floor(0==r?0:Math.LOG10E*Math.log(Math.abs(r)))+6176-20,i=r/Math.pow(10,n-6176);e[t+15]|=n>>7,e[t+14]|=(127&n)<<1;for(var o=0;i>=1;++o,i/=256)e[t+o]=255&i;e[t+15]|=r>=0?0:128}(r,i,e.v),o|=1,i+=16;break;case"b":r[1]=6,n.setFloat64(i,e.v?1:0,!0),o|=2,i+=8;break;case"s":if(-1==t.indexOf(e.v))throw new Error("Value ".concat(e.v," missing from SST!"));r[1]=3,n.setUint32(i,t.indexOf(e.v),!0),o|=8,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(8,o,!0),r.slice(0,i)}function Dm(e,t){var r=new Uint8Array(32),n=ym(r),i=12,o=0;switch(r[0]=3,e.t){case"n":r[2]=2,n.setFloat64(i,e.v,!0),o|=32,i+=8;break;case"b":r[2]=6,n.setFloat64(i,e.v?1:0,!0),o|=32,i+=8;break;case"s":if(-1==t.indexOf(e.v))throw new Error("Value ".concat(e.v," missing from SST!"));r[2]=3,n.setUint32(i,t.indexOf(e.v),!0),o|=16,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(4,o,!0),r.slice(0,i)}function Nm(e,t,r){switch(e[0]){case 0:case 1:case 2:case 3:return function(e,t,r,n){var i,o=ym(e),a=o.getUint32(4,!0),s=(n>1?12:8)+4*_m(a&(n>1?3470:398)),c=-1,l=-1,u=NaN,f=new Date(2001,0,1);switch(512&a&&(c=o.getUint32(s,!0),s+=4),s+=4*_m(a&(n>1?12288:4096)),16&a&&(l=o.getUint32(s,!0),s+=4),32&a&&(u=o.getFloat64(s,!0),s+=8),64&a&&(f.setTime(f.getTime()+1e3*o.getFloat64(s,!0)),s+=8),e[2]){case 0:break;case 2:i={t:"n",v:u};break;case 3:i={t:"s",v:t[l]};break;case 5:i={t:"d",v:f};break;case 6:i={t:"b",v:u>0};break;case 7:i={t:"n",v:u/86400};break;case 8:i={t:"e",v:0};break;case 9:if(c>-1)i={t:"s",v:r[c]};else if(l>-1)i={t:"s",v:t[l]};else{if(isNaN(u))throw new Error("Unsupported cell type ".concat(e.slice(0,4)));i={t:"n",v:u}}break;default:throw new Error("Unsupported cell type ".concat(e.slice(0,4)))}return i}(e,t,r,e[0]);case 5:return jm(e,t,r);default:throw new Error("Unsupported payload version ".concat(e[0]))}}function Fm(e){return xm(Tm(e)[1][0].data)}function Lm(e,t){var r=Tm(t.data),n=Sm(r[1][0].data),i=r[3],o=[];return(i||[]).forEach((function(t){var r=Tm(t.data),i=Sm(r[1][0].data)>>>0;switch(n){case 1:o[i]=vm(r[3][0].data);break;case 8:var a=Tm(e[Fm(r[9][0].data)][0].data),s=e[Fm(a[1][0].data)][0],c=Sm(s.meta[1][0].data);if(2001!=c)throw new Error("2000 unexpected reference to ".concat(c));var l=Tm(s.data);o[i]=l[3].map((function(e){return vm(e.data)})).join("")}})),o}function Bm(e,t){var r,n=Tm(t.data),i=(null==(r=null==n?void 0:n[7])?void 0:r[0])?Sm(n[7][0].data)>>>0>0?1:0:-1,o=Om(n[5],(function(e){return function(e,t){var r,n,i,o,a,s,c,l,u,f,h,d,p,m,b,y,v=Tm(e),g=Sm(v[1][0].data)>>>0,w=Sm(v[2][0].data)>>>0,_=(null==(n=null==(r=v[8])?void 0:r[0])?void 0:n.data)&&Sm(v[8][0].data)>0||!1;if((null==(o=null==(i=v[7])?void 0:i[0])?void 0:o.data)&&0!=t)b=null==(s=null==(a=v[7])?void 0:a[0])?void 0:s.data,y=null==(l=null==(c=v[6])?void 0:c[0])?void 0:l.data;else{if(!(null==(f=null==(u=v[4])?void 0:u[0])?void 0:f.data)||1==t)throw"NUMBERS Tile missing ".concat(t," cell storage");b=null==(d=null==(h=v[4])?void 0:h[0])?void 0:d.data,y=null==(m=null==(p=v[3])?void 0:p[0])?void 0:m.data}for(var x=_?4:1,k=ym(b),S=[],T=0;T=1&&(O[S[S.length-1][0]]=y.subarray(S[S.length-1][1]*x)),{R:g,cells:O}}(e,i)}));return{nrows:Sm(n[4][0].data)>>>0,data:o.reduce((function(e,t){return e[t.R]||(e[t.R]=[]),t.cells.forEach((function(r,n){if(e[t.R][n])throw new Error("Duplicate cell r=".concat(t.R," c=").concat(n));e[t.R][n]=r})),e}),[])}}function zm(e,t){var r={"!ref":"A1"},n=e[Fm(Tm(t.data)[2][0].data)],i=Sm(n[0].meta[1][0].data);if(6001!=i)throw new Error("6000 unexpected reference to ".concat(i));return function(e,t,r){var n,i=Tm(t.data),o={s:{r:0,c:0},e:{r:0,c:0}};if(o.e.r=(Sm(i[6][0].data)>>>0)-1,o.e.r<0)throw new Error("Invalid row varint ".concat(i[6][0].data));if(o.e.c=(Sm(i[7][0].data)>>>0)-1,o.e.c<0)throw new Error("Invalid col varint ".concat(i[7][0].data));r["!ref"]=Js(o);var a=Tm(i[4][0].data),s=Lm(e,e[Fm(a[4][0].data)][0]),c=(null==(n=a[17])?void 0:n[0])?Lm(e,e[Fm(a[17][0].data)][0]):[],l=Tm(a[3][0].data),u=0;l[1].forEach((function(t){var n=Tm(t.data),i=e[Fm(n[2][0].data)][0],o=Sm(i.meta[1][0].data);if(6002!=o)throw new Error("6001 unexpected reference to ".concat(o));var a=Bm(0,i);a.data.forEach((function(e,t){e.forEach((function(e,n){var i=Ks({r:u+t,c:n}),o=Nm(e,s,c);o&&(r[i]=o)}))})),u+=a.nrows}))}(e,n[0],r),r}function Um(e,t){var r={SheetNames:[],Sheets:{}};if(Om(Tm(t.data)[1],Fm).forEach((function(t){e[t].forEach((function(t){if(2==Sm(t.meta[1][0].data)){var n=function(e,t){var r,n=Tm(t.data),i={name:(null==(r=n[1])?void 0:r[0])?vm(n[1][0].data):"",sheets:[]};return Om(n[2],Fm).forEach((function(t){e[t].forEach((function(t){6e3==Sm(t.meta[1][0].data)&&i.sheets.push(zm(e,t))}))})),i}(e,t);n.sheets.forEach((function(e,t){hb(r,e,0==t?n.name:n.name+"_"+t,!0)}))}}))})),0==r.SheetNames.length)throw new Error("Empty NUMBERS file");return r}function Hm(e){var t,r,n,i,o={},a=[];if(e.FullPaths.forEach((function(e){if(e.match(/\.iwpv2/))throw new Error("Unsupported password protection")})),e.FileIndex.forEach((function(e){if(e.name.match(/\.iwa$/)){var t,r;try{t=Mm(e.content)}catch(t){return console.log("?? "+e.content.length+" "+(t.message||t))}try{r=Cm(t)}catch(e){return console.log("## "+(e.message||e))}r.forEach((function(e){o[e.id]=e.messages,a.push(e.id)}))}})),!a.length)throw new Error("File has no messages");var s=(null==(i=null==(n=null==(r=null==(t=null==o?void 0:o[1])?void 0:t[0])?void 0:r.meta)?void 0:n[1])?void 0:i[0].data)&&1==Sm(o[1][0].meta[1][0].data)&&o[1][0];if(s||a.forEach((function(e){o[e].forEach((function(e){if(1==Sm(e.meta[1][0].data)>>>0){if(s)throw new Error("Document has multiple roots");s=e}}))})),!s)throw new Error("Cannot find Document root");return Um(o,s)}function Wm(e,t,r){var n,i,o,a;if(!(null==(n=e[6])?void 0:n[0])||!(null==(i=e[7])?void 0:i[0]))throw"Mutation only works on post-BNC storages!";if((null==(a=null==(o=e[8])?void 0:o[0])?void 0:a.data)&&Sm(e[8][0].data)>0||!1)throw"Math only works with normal offsets";for(var s=0,c=ym(e[7][0].data),l=0,u=[],f=ym(e[4][0].data),h=0,d=[],p=0;p]*r:id="([^"]*)"/)||["",""])[1];return t["!id"][r].Target}(ca(e,p,!0),Kc(ca(e,m,!0),p)),y=pa(b,p),v=Yc(y);h=Gd(ca(e,y,!0),0,0,Kc(ca(e,v,!0),y),0,h);break;case"macro":w=t,o[n],w.slice(-4),h={"!type":"macro"};break;case"dialog":h=function(e,t,r,n,i,o,a,s){return t.slice(-4),{"!type":"dialog"}}(0,t,0,0,o[n]);break;default:throw new Error("Unrecognized sheet type "+s)}a[n]=h;var g=[];o&&o[n]&&Do(o[n]).forEach((function(r){var i="";if(o[n][r].Type==Gc.CMNT){i=pa(o[n][r].Target,t);var a=mp(sa(e,i,!0),i,c);if(!a||!a.length)return;sh(h,a,!1)}o[n][r].Type==Gc.TCMNT&&(i=pa(o[n][r].Target,t),g=g.concat(function(e,t){var r=[],n=!1,i={},o=0;return e.replace(va,(function(a,s){var c=_a(a);switch(xa(c[0])){case"":case"":case"":case"":break;case"":null!=i.t&&r.push(i);break;case"":case"":i.t=e.slice(o,s).replace(/\r\n/g,"\n").replace(/\r/g,"\n");break;case"":case"":case"":n=!1;break;default:if(!n&&t.WTF)throw new Error("unrecognized "+c[0]+" in threaded comments")}return a})),r}(sa(e,i,!0),c)))})),g&&g.length&&sh(h,g,!0,c.people||[])}catch(e){if(c.WTF)throw e}var w}function Gm(e){return"/"==e.charAt(0)?e.slice(1):e}function Ym(e,t){if(Co(),Vm(t=t||{}),oa(e,"META-INF/manifest.xml"))return hm(e,t);if(oa(e,"objectdata.xml"))return hm(e,t);if(oa(e,"Index/Document.iwa")){if("undefined"==typeof Uint8Array)throw new Error("NUMBERS file parsing requires Uint8Array support");if(void 0!==Hm){if(e.FileIndex)return Hm(e);var r=Po.utils.cfb_new();return ua(e).forEach((function(t){fa(r,t,la(e,t))})),Hm(r)}throw new Error("Unsupported NUMBERS file")}if(!oa(e,"[Content_Types].xml")){if(oa(e,"index.xml.gz"))throw new Error("Unsupported NUMBERS 08 file");if(oa(e,"index.xml"))throw new Error("Unsupported NUMBERS 09 file");throw new Error("Unsupported ZIP file")}var n,i,o=ua(e),a=function(e){var t={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};if(!e||!e.match)return t;var r={};if((e.match(va)||[]).forEach((function(e){var n=_a(e);switch(n[0].replace(ga,"<")){case"0?t.calcchains[0]:"",t.sst=t.strs.length>0?t.strs[0]:"",t.style=t.styles.length>0?t.styles[0]:"",t.defaults=r,delete t.calcchains,t}(ca(e,"[Content_Types].xml")),s=!1;if(0===a.workbooks.length&&sa(e,i="xl/workbook.xml",!0)&&a.workbooks.push(i),0===a.workbooks.length){if(!sa(e,i="xl/workbook.bin",!0))throw new Error("Could not find workbook");a.workbooks.push(i),s=!0}"bin"==a.workbooks[0].slice(-3)&&(s=!0);var c={},l={};if(!t.bookSheets&&!t.bookProps){if(ad=[],a.sst)try{ad=pp(sa(e,Gm(a.sst)),a.sst,t)}catch(e){if(t.WTF)throw e}t.cellStyles&&a.themes.length&&(c=function(e,t,r){return Qf(e,r)}(ca(e,a.themes[0].replace(/^\//,""),!0)||"",a.themes[0],t)),a.style&&(l=dp(sa(e,Gm(a.style)),a.style,c,t))}a.links.map((function(r){try{Kc(ca(e,Yc(Gm(r))),r);return yp(sa(e,Gm(r)),0,r,t)}catch(e){}}));var u=up(sa(e,Gm(a.workbooks[0])),a.workbooks[0],t),f={},h="";a.coreprops.length&&((h=sa(e,Gm(a.coreprops[0]),!0))&&(f=il(h)),0!==a.extprops.length&&(h=sa(e,Gm(a.extprops[0]),!0))&&function(e,t,r){var n={};t||(t={}),e=La(e),sl.forEach((function(r){var i=(e.match(za(r[0]))||[])[1];switch(r[2]){case"string":i&&(t[r[1]]=Ta(i));break;case"bool":t[r[1]]="true"===i;break;case"raw":var o=e.match(new RegExp("<"+r[0]+"[^>]*>([\\s\\S]*?)"));o&&o.length>0&&(n[r[1]]=o[1])}})),n.HeadingPairs&&n.TitlesOfParts&&ll(n.HeadingPairs,n.TitlesOfParts,t,r)}(h,f,t));var d={};t.bookSheets&&!t.bookProps||0!==a.custprops.length&&(h=ca(e,Gm(a.custprops[0]),!0))&&(d=function(e,t){var r={},n="",i=e.match(fl);if(i)for(var o=0;o!=i.length;++o){var a=i[o],s=_a(a);switch(s[0]){case"":n=null;break;default:if(0===a.indexOf(""),l=c[0].slice(4),u=c[1];switch(l){case"lpstr":case"bstr":case"lpwstr":case"cy":case"error":r[n]=Ta(u);break;case"bool":r[n]=ja(u);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":r[n]=parseInt(u,10);break;case"r4":case"r8":case"decimal":r[n]=parseFloat(u);break;case"filetime":case"date":r[n]=Yo(u);break;default:if("/"==l.slice(-1))break;t.WTF&&"undefined"!=typeof console&&console.warn("Unexpected",a,l,c)}}else if("0&&(n=f.SheetNames),t.bookProps&&(p.Props=f,p.Custprops=d),t.bookSheets&&void 0!==n&&(p.SheetNames=n),t.bookSheets?p.SheetNames:t.bookProps))return p;n={};var m={};t.bookDeps&&a.calcchain&&(m=bp(sa(e,Gm(a.calcchain)),a.calcchain));var b,y,v=0,g={},w=u.Sheets;f.Worksheets=w.length,f.SheetNames=[];for(var _=0;_!=w.length;++_)f.SheetNames[_]=w[_].name;var x=s?"bin":"xml",k=a.workbooks[0].lastIndexOf("/"),S=(a.workbooks[0].slice(0,k+1)+"_rels/"+a.workbooks[0].slice(k+1)+".rels").replace(/^\//,"");oa(e,S)||(S="xl/_rels/workbook."+x+".rels");var T=Kc(ca(e,S,!0),S.replace(/_rels.*/,"s5s"));(a.metadata||[]).length>=1&&(t.xlmeta=vp(sa(e,Gm(a.metadata[0])),a.metadata[0],t)),(a.people||[]).length>=1&&(t.people=function(e,t){var r=[],n=!1;return e.replace(va,(function(e){var i=_a(e);switch(xa(i[0])){case"":case"":case"":case"":case"":break;case"":n=!1;break;default:if(!n&&t.WTF)throw new Error("unrecognized "+i[0]+" in threaded comments")}return e})),r}(sa(e,Gm(a.people[0])),t)),T&&(T=function(e,t){if(!e)return 0;try{e=t.map((function(t){return t.id||(t.id=t.strRelID),[t.name,e["!id"][t.id].Target,(r=e["!id"][t.id].Type,Gc.WS.indexOf(r)>-1?"sheet":r==Gc.CS?"chart":r==Gc.DS?"dialog":r==Gc.MS?"macro":r&&r.length?r:"sheet")];var r}))}catch(e){return null}return e&&0!==e.length?e:null}(T,u.Sheets));var E=sa(e,"xl/worksheets/sheet.xml",!0)?1:0;e:for(v=0;v!=f.Worksheets;++v){var O="sheet";if(T&&T[v]?(b="xl/"+T[v][1].replace(/[\/]?xl\//,""),oa(e,b)||(b=T[v][1]),oa(e,b)||(b=S.replace(/_rels\/.*$/,"")+T[v][1]),O=T[v][2]):b=(b="xl/worksheets/sheet"+(v+1-E)+"."+x).replace(/sheet0\./,"sheet."),y=b.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels"),t&&null!=t.sheets)switch(typeof t.sheets){case"number":if(v!=t.sheets)continue e;break;case"string":if(f.SheetNames[v].toLowerCase()!=t.sheets.toLowerCase())continue e;break;default:if(Array.isArray&&Array.isArray(t.sheets)){for(var C=!1,R=0;R!=t.sheets.length;++R)"number"==typeof t.sheets[R]&&t.sheets[R]==v&&(C=1),"string"==typeof t.sheets[R]&&t.sheets[R].toLowerCase()==f.SheetNames[v].toLowerCase()&&(C=1);if(!C)continue e}}Xm(e,b,y,f.SheetNames[v],v,g,n,O,t,u,c,l)}return p={Directory:a,Workbook:u,Props:f,Custprops:d,Deps:m,Sheets:n,SheetNames:f.SheetNames,Strings:ad,Styles:l,Themes:c,SSF:Zo(qi)},t&&t.bookFiles&&(e.files?(p.keys=o,p.files=e.files):(p.keys=[],p.files={},e.FullPaths.forEach((function(t,r){t=t.replace(/^Root Entry[\/]/,""),p.keys.push(t),p.files[t]=e.FileIndex[r]})))),t&&t.bookVBA&&(a.vba.length>0?p.vbaraw=sa(e,Gm(a.vba[0]),!0):a.defaults&&a.defaults.bin===hh&&(p.vbaraw=sa(e,"xl/vbaProject.bin",!0))),p}function Km(e,t){var r,n,i=t||{},o="Workbook",a=Po.find(e,o);try{if(o="/!DataSpaces/Version",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);if(r=a.content,(n={}).id=r.read_shift(0,"lpp4"),n.R=Ju(r,4),n.U=Ju(r,4),n.W=Ju(r,4),o="/!DataSpaces/DataSpaceMap",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);var s=function(e){var t=[];e.l+=4;for(var r=e.read_shift(4);r-- >0;)t.push(Qu(e));return t}(a.content);if(1!==s.length||1!==s[0].comps.length||0!==s[0].comps[0].t||"StrongEncryptionDataSpace"!==s[0].name||"EncryptedPackage"!==s[0].comps[0].v)throw new Error("ECMA-376 Encrypted file bad "+o);if(o="/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);var c=function(e){var t=[];e.l+=4;for(var r=e.read_shift(4);r-- >0;)t.push(e.read_shift(0,"lpp4"));return t}(a.content);if(1!=c.length||"StrongEncryptionTransform"!=c[0])throw new Error("ECMA-376 Encrypted file bad "+o);if(o="/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);ef(a.content)}catch(e){}if(o="/EncryptionInfo",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);var l=function(e){var t=Ju(e);switch(t.Minor){case 2:return[t.Minor,nf(e)];case 3:return[t.Minor,of()];case 4:return[t.Minor,af(e)]}throw new Error("ECMA-376 Encrypted file unrecognized Version: "+t.Minor)}(a.content);if(o="/EncryptedPackage",!(a=Po.find(e,o))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+o);if(4==l[0]&&"undefined"!=typeof decrypt_agile)return decrypt_agile(l[1],a.content,i.password||"",i);if(2==l[0]&&"undefined"!=typeof decrypt_std76)return decrypt_std76(l[1],a.content,i.password||"",i);throw new Error("File is password-protected")}function Zm(e,t){return"ods"==t.bookType?bm(e,t):"numbers"==t.bookType?function(e,t){if(!t||!t.numbers)throw new Error("Must pass a `numbers` option -- check the README");var r=e.Sheets[e.SheetNames[0]];e.SheetNames.length>1&&console.error("The Numbers writer currently writes only the first table");var n=Zs(r["!ref"]);n.s.r=n.s.c=0;var i=!1;n.e.c>9&&(i=!0,n.e.c=9),n.e.r>49&&(i=!0,n.e.r=49),i&&console.error("The Numbers writer is currently limited to ".concat(Js(n)));var o=cb(r,{range:n,header:1}),a=["~Sh33tJ5~"];o.forEach((function(e){return e.forEach((function(e){"string"==typeof e&&a.push(e)}))}));var s={},c=[],l=Po.read(t.numbers,{type:"base64"});l.FileIndex.map((function(e,t){return[e,l.FullPaths[t]]})).forEach((function(e){var t=e[0],r=e[1];2==t.type&&t.name.match(/\.iwa/)&&Cm(Mm(t.content)).forEach((function(e){c.push(e.id),s[e.id]={deps:[],location:r,type:Sm(e.messages[0].meta[1][0].data)}}))})),c.sort((function(e,t){return e-t}));var u=c.filter((function(e){return e>1})).map((function(e){return[e,km(e)]}));l.FileIndex.map((function(e,t){return[e,l.FullPaths[t]]})).forEach((function(e){var t=e[0];e[1],t.name.match(/\.iwa/)&&Cm(Mm(t.content)).forEach((function(e){e.messages.forEach((function(t){u.forEach((function(t){e.messages.some((function(e){return 11006!=Sm(e.meta[1][0].data)&&function(e,t){e:for(var r=0;r<=e.length-t.length;++r){for(var n=0;n-1,i={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};qm(t=t||{});var o=ha(),a="",s=0;t.cellXfs=[],hd(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={});if(fa(o,a="docProps/core.xml",al(e.Props,t)),i.coreprops.push(a),Jc(t.rels,2,a,Gc.CORE_PROPS),a="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var c=[],l=0;l0&&(fa(o,a="docProps/custom.xml",hl(e.Custprops)),i.custprops.push(a),Jc(t.rels,4,a,Gc.CUST_PROPS));for(s=1;s<=e.SheetNames.length;++s){var u={"!id":{}},f=e.Sheets[e.SheetNames[s-1]];(f||{})["!type"];if(fa(o,a="xl/worksheets/sheet"+s+"."+r,gp(s-1,a,t,e,u)),i.sheets.push(a),Jc(t.wbrels,-1,"worksheets/sheet"+s+"."+r,Gc.WS[0]),f){var h=f["!comments"],d=!1,p="";h&&h.length>0&&(fa(o,p="xl/comments"+s+"."+r,wp(h,p)),i.comments.push(p),Jc(u,-1,"../comments"+s+"."+r,Gc.CMNT),d=!0),f["!legacy"]&&d&&fa(o,"xl/drawings/vmlDrawing"+s+".vml",ah(s,f["!comments"])),delete f["!comments"],delete f["!legacy"]}u["!id"].rId1&&fa(o,Yc(a),Zc(u))}null!=t.Strings&&t.Strings.length>0&&(fa(o,a="xl/sharedStrings."+r,function(e,t,r){return(".bin"===t.slice(-4)?Ku:Gu)(e,r)}(t.Strings,a,t)),i.strs.push(a),Jc(t.wbrels,-1,"sharedStrings."+r,Gc.SST));fa(o,a="xl/workbook."+r,function(e,t,r){return(".bin"===t.slice(-4)?lp:ap)(e)}(e,a)),i.workbooks.push(a),Jc(t.rels,1,a,Gc.WB),fa(o,a="xl/theme/theme1.xml",eh(e.Themes,t)),i.themes.push(a),Jc(t.wbrels,-1,"theme/theme1.xml",Gc.THEME),fa(o,a="xl/styles."+r,function(e,t,r){return(".bin"===t.slice(-4)?$f:Mf)(e,r)}(e,a,t)),i.styles.push(a),Jc(t.wbrels,-1,"styles."+r,Gc.STY),e.vbaraw&&n&&(fa(o,a="xl/vbaProject.bin",e.vbaraw),i.vba.push(a),Jc(t.wbrels,-1,"vbaProject.bin",Gc.VBA));return fa(o,a="xl/metadata."+r,function(e){return(".bin"===e.slice(-4)?nh:ih)()}(a)),i.metadata.push(a),Jc(t.wbrels,-1,"metadata."+r,Gc.XLMETA),fa(o,"[Content_Types].xml",Xc(i,t)),fa(o,"_rels/.rels",Zc(t.rels)),fa(o,"xl/_rels/workbook."+r+".rels",Zc(t.wbrels)),delete t.revssf,delete t.ssf,o}(e,t):function(e,t){oh=1024,e&&!e.SSF&&(e.SSF=Zo(qi));e&&e.SSF&&(Co(),Oo(e.SSF),t.revssf=Lo(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF);t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,cd?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="xml",n=dh.indexOf(t.bookType)>-1,i={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};qm(t=t||{});var o=ha(),a="",s=0;t.cellXfs=[],hd(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={});if(fa(o,a="docProps/core.xml",al(e.Props,t)),i.coreprops.push(a),Jc(t.rels,2,a,Gc.CORE_PROPS),a="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var c=[],l=0;l0&&(fa(o,a="docProps/custom.xml",hl(e.Custprops)),i.custprops.push(a),Jc(t.rels,4,a,Gc.CUST_PROPS));var u=["SheetJ5"];for(t.tcid=0,s=1;s<=e.SheetNames.length;++s){var f={"!id":{}},h=e.Sheets[e.SheetNames[s-1]];(h||{})["!type"];if(fa(o,a="xl/worksheets/sheet"+s+"."+r,Pd(s-1,t,e,f)),i.sheets.push(a),Jc(t.wbrels,-1,"worksheets/sheet"+s+"."+r,Gc.WS[0]),h){var d=h["!comments"],p=!1,m="";if(d&&d.length>0){var b=!1;d.forEach((function(e){e[1].forEach((function(e){1==e.T&&(b=!0)}))})),b&&(fa(o,m="xl/threadedComments/threadedComment"+s+"."+r,lh(d,u,t)),i.threadedcomments.push(m),Jc(f,-1,"../threadedComments/threadedComment"+s+"."+r,Gc.TCMNT)),fa(o,m="xl/comments"+s+"."+r,ch(d)),i.comments.push(m),Jc(f,-1,"../comments"+s+"."+r,Gc.CMNT),p=!0}h["!legacy"]&&p&&fa(o,"xl/drawings/vmlDrawing"+s+".vml",ah(s,h["!comments"])),delete h["!comments"],delete h["!legacy"]}f["!id"].rId1&&fa(o,Yc(a),Zc(f))}null!=t.Strings&&t.Strings.length>0&&(fa(o,a="xl/sharedStrings."+r,Gu(t.Strings,t)),i.strs.push(a),Jc(t.wbrels,-1,"sharedStrings."+r,Gc.SST));fa(o,a="xl/workbook."+r,ap(e)),i.workbooks.push(a),Jc(t.rels,1,a,Gc.WB),fa(o,a="xl/theme/theme1.xml",eh(e.Themes,t)),i.themes.push(a),Jc(t.wbrels,-1,"theme/theme1.xml",Gc.THEME),fa(o,a="xl/styles."+r,Mf(e,t)),i.styles.push(a),Jc(t.wbrels,-1,"styles."+r,Gc.STY),e.vbaraw&&n&&(fa(o,a="xl/vbaProject.bin",e.vbaraw),i.vba.push(a),Jc(t.wbrels,-1,"vbaProject.bin",Gc.VBA));fa(o,a="xl/metadata."+r,ih()),i.metadata.push(a),Jc(t.wbrels,-1,"metadata."+r,Gc.XLMETA),u.length>1&&(fa(o,a="xl/persons/person.xml",function(e){var t=[ma,Ya("personList",null,{xmlns:Qa.TCMNT,"xmlns:x":es[0]}).replace(/[\/]>/,">")];return e.forEach((function(e,r){t.push(Ya("person",null,{displayName:e,id:"{54EE7950-7262-4200-6969-"+("000000000000"+r).slice(-12)+"}",userId:e,providerId:"None"}))})),t.push(""),t.join("")}(u)),i.people.push(a),Jc(t.wbrels,-1,"persons/person.xml",Gc.PEOPLE));return fa(o,"[Content_Types].xml",Xc(i,t)),fa(o,"_rels/.rels",Zc(t.rels)),fa(o,"xl/_rels/workbook."+r+".rels",Zc(t.wbrels)),delete t.revssf,delete t.ssf,o}(e,t)}function Jm(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=Ti(e.slice(0,12));break;case"binary":r=e;break;default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Qm(e,t){var r=0;e:for(;r=2&&0===n[3])return Fu.to_workbook(i,r);if(0===n[2]&&(8===n[3]||9===n[3]))return Fu.to_workbook(i,r)}break;case 3:case 131:case 139:case 140:return Pu.to_workbook(i,r);case 123:if(92===n[1]&&114===n[2]&&116===n[3])return ff.to_workbook(i,r);break;case 10:case 13:case 32:return function(e,t){var r="",n=Jm(e,t);switch(t.type){case"base64":r=Ti(e);break;case"binary":r=e;break;case"buffer":r=e.toString("binary");break;case"array":r=Ko(e);break;default:throw new Error("Unrecognized type "+t.type)}return 239==n[0]&&187==n[1]&&191==n[2]&&(r=La(r)),t.type="binary",Qm(r,t)}(i,r);case 137:if(80===n[1]&&78===n[2]&&71===n[3])throw new Error("PNG Image File is not a spreadsheet")}return Mu.indexOf(n[0])>-1&&n[2]<=12&&n[3]<=31?Pu.to_workbook(i,r):eb(e,i,r,o)}function rb(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return Io(t.file,Po.write(e,{type:Ei?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return Po.write(e,t)}function nb(e,t){var r=Zo(t||{});return function(e,t){var r={},n=Ei?"nodebuffer":"undefined"!=typeof Uint8Array?"array":"string";t.compression&&(r.compression="DEFLATE");if(t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var i=e.FullPaths?Po.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if("undefined"!=typeof Deno&&"string"==typeof i){if("binary"==t.type||"base64"==t.type)return i;i=new Uint8Array(Mi(i))}return t.password&&"undefined"!=typeof encrypt_agile?rb(encrypt_agile(i,t.password),t):"file"===t.type?Io(t.file,i):"string"==t.type?La(i):i}(Zm(e,r),r)}function ib(e,t,r){r||(r="");var n=r+e;switch(t.type){case"base64":return Si(Ba(n));case"binary":return Ba(n);case"string":return e;case"file":return Io(t.file,n,"utf8");case"buffer":return Ei?Oi(n,"utf8"):"undefined"!=typeof TextEncoder?(new TextEncoder).encode(n):ib(n,{type:"binary"}).split("").map((function(e){return e.charCodeAt(0)}))}throw new Error("Unrecognized type "+t.type)}function ob(e,t){switch(t.type){case"string":case"base64":case"binary":for(var r="",n=0;n"}(0,0,r));for(var s=a.s.r;s<=a.e.r;++s)o.push(sm(e,a,s,r));return o.push("
"+i),o.join("")}(e.Sheets[e.SheetNames[i]],r),r);case"txt":return function(e,t){switch(t.type){case"base64":return Si(e);case"binary":case"string":return e;case"file":return Io(t.file,e,"binary");case"buffer":return Ei?Oi(e,"binary"):e.split("").map((function(e){return e.charCodeAt(0)}))}throw new Error("Unrecognized type "+t.type)}(function(e,t){t||(t={});t.FS="\t",t.RS="\n";var r=fb(e,t);return r}(e.Sheets[e.SheetNames[i]],r),r);case"csv":return ib(fb(e.Sheets[e.SheetNames[i]],r),r,"\ufeff");case"dif":return ib(Iu.from_sheet(e.Sheets[e.SheetNames[i]],r),r);case"dbf":return ob(Pu.from_sheet(e.Sheets[e.SheetNames[i]],r),r);case"prn":return ib(Nu.from_sheet(e.Sheets[e.SheetNames[i]],r),r);case"rtf":return ib(ff.from_sheet(e.Sheets[e.SheetNames[i]],r),r);case"eth":return ib(Du.from_sheet(e.Sheets[e.SheetNames[i]],r),r);case"fods":return ib(bm(e,r),r);case"wk1":return ob(Fu.sheet_to_wk1(e.Sheets[e.SheetNames[i]],r),r);case"wk3":return ob(Fu.book_to_wk3(e,r),r);case"biff2":r.biff||(r.biff=2);case"biff3":r.biff||(r.biff=3);case"biff4":return r.biff||(r.biff=4),ob(om(e,r),r);case"biff5":r.biff||(r.biff=5);case"biff8":case"xla":case"xls":return r.biff||(r.biff=8),function(e,t){var r=t||{};return rb(Xp(e,r),r)}(e,r);case"xlsx":case"xlsm":case"xlam":case"xlsb":case"numbers":case"ods":return nb(e,r);default:throw new Error("Unrecognized bookType |"+r.bookType+"|")}}function sb(e,t,r,n,i,o,a,s){var c=qs(r),l=s.defval,u=s.raw||!Object.prototype.hasOwnProperty.call(s,"raw"),f=!0,h=1===i?[]:{};if(1!==i)if(Object.defineProperty)try{Object.defineProperty(h,"__rowNum__",{value:r,enumerable:!1})}catch(e){h.__rowNum__=r}else h.__rowNum__=r;if(!a||e[r])for(var d=t.s.c;d<=t.e.c;++d){var p=a?e[r][d]:e[n[d]+c];if(void 0!==p&&void 0!==p.t){var m=p.v;switch(p.t){case"z":if(null==m)break;continue;case"e":m=0==m?null:void 0;break;case"s":case"d":case"b":case"n":break;default:throw new Error("unrecognized type "+p.t)}if(null!=o[d]){if(null==m)if("e"==p.t&&null===m)h[o[d]]=null;else if(void 0!==l)h[o[d]]=l;else{if(!u||null!==m)continue;h[o[d]]=null}else h[o[d]]=u&&("n"!==p.t||"n"===p.t&&!1!==s.rawNumbers)?m:tc(p,m,s);null!=m&&(f=!1)}}else{if(void 0===l)continue;null!=o[d]&&(h[o[d]]=l)}}return{row:h,isempty:f}}function cb(e,t){if(null==e||null==e["!ref"])return[];var r={t:"n",v:0},n=0,i=1,o=[],a=0,s="",c={s:{r:0,c:0},e:{r:0,c:0}},l=t||{},u=null!=l.range?l.range:e["!ref"];switch(1===l.header?n=1:"A"===l.header?n=2:Array.isArray(l.header)?n=3:null==l.header&&(n=0),typeof u){case"string":c=Qs(u);break;case"number":(c=Qs(e["!ref"])).s.r=u;break;default:c=u}n>0&&(i=0);var f=qs(c.s.r),h=[],d=[],p=0,m=0,b=Array.isArray(e),y=c.s.r,v=0,g={};b&&!e[y]&&(e[y]=[]);var w=l.skipHidden&&e["!cols"]||[],_=l.skipHidden&&e["!rows"]||[];for(v=c.s.c;v<=c.e.c;++v)if(!(w[v]||{}).hidden)switch(h[v]=Gs(v),r=b?e[y][v]:e[h[v]+f],n){case 1:o[v]=v-c.s.c;break;case 2:o[v]=h[v];break;case 3:o[v]=l.header[v-c.s.c];break;default:if(null==r&&(r={w:"__EMPTY",t:"s"}),s=a=tc(r,null,l),m=g[a]||0){do{s=a+"_"+m++}while(g[s]);g[a]=m,g[s]=1}else g[a]=1;o[v]=s}for(y=c.s.r+i;y<=c.e.r;++y)if(!(_[y]||{}).hidden){var x=sb(e,c,y,h,n,o,b,l);(!1===x.isempty||(1===n?!1!==l.blankrows:l.blankrows))&&(d[p++]=x.row)}return d.length=p,d}var lb=/"/g;function ub(e,t,r,n,i,o,a,s){for(var c=!0,l=[],u="",f=qs(r),h=t.s.c;h<=t.e.c;++h)if(n[h]){var d=s.dense?(e[r]||[])[h]:e[n[h]+f];if(null==d)u="";else if(null!=d.v){c=!1,u=""+(s.rawNumbers&&"n"==d.t?d.v:tc(d,null,s));for(var p=0,m=0;p!==u.length;++p)if((m=u.charCodeAt(p))===i||m===o||34===m||s.forceQuotes){u='"'+u.replace(lb,'""')+'"';break}"ID"==u&&(u='"ID"')}else null==d.f||d.F?u="":(c=!1,(u="="+d.f).indexOf(",")>=0&&(u='"'+u.replace(lb,'""')+'"'));l.push(u)}return!1===s.blankrows&&c?null:l.join(a)}function fb(e,t){var r=[],n=null==t?{}:t;if(null==e||null==e["!ref"])return"";var i=Qs(e["!ref"]),o=void 0!==n.FS?n.FS:",",a=o.charCodeAt(0),s=void 0!==n.RS?n.RS:"\n",c=s.charCodeAt(0),l=new RegExp(("|"==o?"\\|":o)+"+$"),u="",f=[];n.dense=Array.isArray(e);for(var h=n.skipHidden&&e["!cols"]||[],d=n.skipHidden&&e["!rows"]||[],p=i.s.c;p<=i.e.c;++p)(h[p]||{}).hidden||(f[p]=Gs(p));for(var m=0,b=i.s.r;b<=i.e.r;++b)(d[b]||{}).hidden||null!=(u=ub(e,i,b,f,a,c,o,n))&&(n.strip&&(u=u.replace(l,"")),(u||!1!==n.blankrows)&&r.push((m++?s:"")+u));return delete n.dense,r.join("")}function hb(e,t,r,n){var i=1;if(!r)for(;i<=65535&&-1!=e.SheetNames.indexOf(r="Sheet"+i);++i,r=void 0);if(!r||e.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0){var o=r.match(/(^.*?)(\d+)$/);i=o&&+o[2]||0;var a=o&&o[1]||r;for(++i;i<=65535&&-1!=e.SheetNames.indexOf(r=a+i);++i);}if(np(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}const db=["#FFFFFF","#000000","#BFBFBF","#323232","#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5","#71AD47"],pb=["#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#800000","#008000","#000080","#808000","#800080","#008080","#C0C0C0","#808080","#9999FF","#993366","#FFFFCC","#CCFFFF","#660066","#FF8080","#0066CC","#CCCCFF","#000080","#FF00FF","#FFFF00","#00FFFF","#800080","#800000","#008080","#0000FF","#00CCFF","#CCFFFF","#CCFFCC","#FFFF99","#99CCFF","#FF99CC","#CC99FF","#FFCC99","#3366FF","#33CCCC","#99CC00","#FFCC00","#FF9900","#FF6600","#666699","#969696","#003366","#339966","#003300","#333300","#993300","#993366","#333399","#333333","#FFFFFF"];let mb=80;function bb(e,t={}){return function(e,t){return new Promise((function(r,n){const i=new XMLHttpRequest;i.open(t.method||"GET",e,!0),i.responseType=t.responseType||"arraybuffer",i.onload=function(){200===i.status?r(i.response):n(i.status)},i.onerror=function(){n(i.status)},i.withCredentials=t.withCredentials||!1,t.headers&&Object.keys(t.headers).forEach((function(e){i.setRequestHeader(e,t.headers[e])})),i.send(t.body)}))}(function(e){return"string"==typeof e?e:e instanceof Blob?URL.createObjectURL(e):e instanceof ArrayBuffer?URL.createObjectURL(new Blob([e])):e instanceof Response?URL.createObjectURL(e.blob()):e}(e),t)}function yb(e){if("object"==typeof e)return"#000000";if(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.test(e))return e.startsWith("#")?e:"#"+e;e=e.trim().toLowerCase();let t={};try{let r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t.r=parseInt(r[2],16),t.g=parseInt(r[3],16),t.b=parseInt(r[4],16),t.a=parseInt(r[1],16)/255,En(`rgba(${t.r}, ${t.g}, ${t.b}, ${t.a})`).toHexString()}catch(e){console.warn(e)}}function vb(e,t){return e>9?"#C7C9CC":void 0===t?db[e]:t>0?function(e,t){for(var r=ai(e),n=0;n<3;n++)r[n]=Math.floor((255-r[n])*t+r[n]);return si(r[0],r[1],r[2])}(db[e],t):function(e,t){for(var r=ai(e),n=0;n<3;n++)r[n]=Math.floor(r[n]*(1-t));return si(r[0],r[1],r[2])}(db[e],Math.abs(t))}function gb(e,t){let r=[],n=[];return e.eachSheet((e=>{n.push(e);let i={name:e.name,styles:[],rows:{},cols:{},merges:[],media:[]},o=[];for(let t in e._merges){i.merges.push(e._merges[t].shortRange);let r={};r.startAddress=e._merges[t].tl,r.endAddress=e._merges[t].br,r.YRange=e._merges[t].model.bottom-e._merges[t].model.top,r.XRange=e._merges[t].model.right-e._merges[t].model.left,o.push(r)}!function(e,t,r){for(let n=0;n<(e.columns||[]).length;n++)t.cols[n.toString()]={},e.columns[n].width?t.cols[n.toString()].width=6*e.columns[n].width+(r.widthOffset||0):t.cols[n.toString()].width=mb+(r.widthOffset||0);t.cols.len=Math.max(Object.keys(t.cols).length,r.minColLength||0)}(e,i,t),(e._rows||[]).forEach(((e,r)=>{i.rows[r]={cells:{}},e.height?i.rows[r].height=e.height+(t.heightOffset||0):i.rows[r].height=24+(t.heightOffset||0),(e._cells||[]).forEach(((e,t)=>{i.rows[r].cells[t]={};let n=oi.find(o,(function(t){return t.startAddress==e._address}));n&&e.master.address!=n.startAddress||(n&&(i.rows[r].cells[t].merge=[n.YRange,n.XRange]),i.rows[r].cells[t].text=function(e){let{numFmt:t,value:r,type:n}=e;switch(n){case 2:try{if(e.style.numFmt){if(e.style.numFmt.endsWith("%")){let t=e.style.numFmt.match(/\.(\d+)%/);return t?(100*r).toFixed(t[1].length)+"%":100*r+"%"}if(/0(\.0+)?/.test(e.style.numFmt)){let t="";if(e.style.numFmt.startsWith("$")?t="$":e.style.numFmt.startsWith('"¥')&&(t="¥"),0===r&&e.style.numFmt.startsWith("_"))return"-";let n=e.style.numFmt.match(/0\.(0+)(_|;|$)/);n=n?n[1].length:0;let i=r.toFixed(n)+"";if(e.style.numFmt.includes("#,##")){i=i.split(".");let e=i[0].split("").reverse(),t=[];for(let r=0;r{let n=e.style.border[r],i="#000000";"string"==typeof n.color?i=n.color:n.color&&(n.color.argb?i=yb(n.color.argb):n.color.hasOwnProperty("theme")?i=vb(n.color.theme,n.color.tint):n.color.indexed&&(i=pb[n.color.indexed])),t[r]=[n.style||"thin",i]})),e.style.border2={...e.style.border},e.style.border=t}return e.style.font&&e.style.font.size&&"number"==typeof e.style.font.size&&(e.style.font.size=Math.round(e.style.font.size/1.333333)),e.style}(e)),i.rows[r].cells[t].style=i.styles.length-1)}))})),i._media&&(i.media=i._media);let a=Object.keys(i.rows);i.rows.len=Math.max(+a[a.length-1]+1,t.hasOwnProperty("minRowLength")?t.minRowLength:100),r.push(i)})),e._worksheets=n,{workbookData:r,workbookSource:e,medias:e.media||[]}}let wb=[];function _b(e,t,r,n,i={}){r&&r._media.length&&r._media.forEach((o=>{let{imageId:a,range:s,type:c}=o;if("image"===c){let o=function(e,t,r,n){let{widthOffset:i,heightOffset:o}=n,{tl:a,br:s,ext:c}=t,{nativeCol:l=0,nativeColOff:u=0,nativeRow:f=0,nativeRowOff:h=0}=a||{},d=xb,p=kb;for(let t=0;t{if(wb[e])return r(wb[e]);const{buffer:i}=t.buffer;let o=new Blob([i],{type:"image/"+t.extension}),a=URL.createObjectURL(o),s=new Image;s.src=a,s.onload=function(){r(s),wb[e]=s},s.onerror=function(e){n(e)}}))})(t,r).then((t=>{let r=0,i=0,o=t.width,a=t.height,s=n.x,c=n.y,l=n.width,u=n.height,f=l/o,h=u/a;if(s{console.error(e)}))}(e,a,t[a],o)}}))}let xb=60,kb=25,Sb=80,Tb=24,Eb=window.devicePixelRatio;function Ob(){wb=[]}function Cb(e){if(e){let t=e.querySelectorAll("input");for(let e of t)e&&!e.readOnly&&(e.readOnly=!0);document.activeElement&&document.activeElement.blur()}}const Rb={xls:!1,minColLength:20};class Ab{container=null;wrapper=null;wrapperMain=null;options={};requestOptions={};mediasSource=[];workbookDataSource={_worksheets:[]};sheetIndex=1;ctx=null;xs=null;offset=null;observer=null;fileData=null;constructor(e,t={},r={}){this.container=e,this.options={...Rb,...t},this.requestOptions=r,this.createWrapper(),this.initSpreadsheet(),this.hack()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-excel",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-excel-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}initSpreadsheet(){this.xs=new mn(this.wrapperMain,{mode:"read",showToolbar:!1,showContextmenu:this.options.showContextmenu||!1,view:{height:()=>this.wrapper&&this.wrapper.clientHeight||300,width:()=>this.wrapper&&this.wrapper.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let e=this,t=this.xs.bottombar.swapFunc;this.xs.bottombar.swapFunc=function(r){t.call(e.xs.bottombar,r),e.sheetIndex=r,setTimeout((()=>{e.xs.reRender(),_b(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)}))};let r=this.xs.sheet.editor.clear;this.xs.sheet.editor.clear=function(...t){r.apply(e.xs.sheet.editor,t),setTimeout((()=>{_b(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)}))};let n=this.xs.sheet.editor.setOffset;this.xs.sheet.editor.setOffset=function(...t){n.apply(e.xs.sheet.editor,t),e.offset=t[0],_b(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)};const i=this.wrapperMain.querySelector("canvas");this.ctx=i.getContext("2d")}renderExcel(e){return this.fileData=e,function(e,t){try{return t&&(e=ab(tb(e,{type:"array"}),{bookType:"xlsx",type:"array"})),(new _n.Workbook).xlsx.load(e)}catch(e){return console.warn(e),Promise.reject(e)}}(e,this.options.xls).then((e=>{if(!e._worksheets||0===e._worksheets.length)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");this.options.beforeTransformData&&"function"==typeof this.options.beforeTransformData&&(e=this.options.beforeTransformData(e));let{workbookData:t,medias:r,workbookSource:n}=gb(e,this.options);this.options.transformData&&"function"==typeof this.options.transformData&&(t=this.options.transformData(t)),this.mediasSource=r,this.workbookDataSource=n,this.offset=null,this.sheetIndex=0,Ob(),this.xs.loadData(t),_b(this.ctx,this.mediasSource,this.workbookDataSource._worksheets[this.sheetIndex],this.offset)})).catch((e=>(this.mediasSource=[],this.workbookDataSource={_worksheets:[]},Ob(),this.xs.loadData({}),Promise.reject(e))))}hack(){const e=oi.debounce(Cb,200).bind(this,this.wrapperMain);this.observer=new MutationObserver(e);this.observer.observe(this.wrapperMain,{attributes:!0,childList:!0,subtree:!0}),e(this.wrapperMain)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise(((t,r)=>{bb(e,this.requestOptions).then((e=>{this.renderExcel(e).then(t).catch((e=>{this.mediasSource=[],this.workbookDataSource={_worksheets:[]},this.xs.loadData({}),r(e)}))})).catch((e=>{this.mediasSource=[],this.workbookDataSource={_worksheets:[]},this.xs.loadData({}),r(e)}))}))}save(e){xn(e||`js-preview-excel-${(new Date).getTime()}.xlsx`,this.fileData)}destroy(){this.observer.disconnect(),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.ctx=null,this.xs=null,this.observer=null,this.options=null,this.requestOptions=null,this.mediasSource=null,this.workbookDataSource=null}}return{init:function(e,t,r){return new Ab(e,t,r)}}})); diff --git a/cdn-demo/js-preview-lib/pdf.umd.js b/cdn-demo/js-preview-lib/pdf.umd.js new file mode 100644 index 0000000..0a0b0a7 --- /dev/null +++ b/cdn-demo/js-preview-lib/pdf.umd.js @@ -0,0 +1 @@ +!function(Z,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l():"function"==typeof define&&define.amd?define(l):(Z="undefined"!=typeof globalThis?globalThis:Z||self).jsPreviewPdf=l()}(this,(function(){"use strict";function Z(Z){return"string"==typeof Z?Z:Z instanceof Blob?URL.createObjectURL(Z):Z instanceof ArrayBuffer?URL.createObjectURL(new Blob([Z])):Z instanceof Response?URL.createObjectURL(Z.blob()):Z}async function l(Z,l){l&&(l instanceof ArrayBuffer&&(l=new Blob([l])),function(Z,l){let m=document.createElement("a");m.download=Z,m.style.display="none",m.href=l,document.body.appendChild(m),m.click(),document.body.removeChild(m)}(Z,URL.createObjectURL(l)))}var m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function d(Z){return Z&&Z.__esModule&&Object.prototype.hasOwnProperty.call(Z,"default")?Z.default:Z}var b=function(Z,l){for(var m=-1,d=null==Z?0:Z.length,b=Array(d);++m-1},R=h;function N(Z){var l=-1,m=null==Z?0:Z.length;for(this.clear();++l-1&&Z%1==0&&Z-1&&Z%1==0&&Z<=9007199254740991},zl=P,Ul=ol,nl=sl,jl={};jl["[object Float32Array]"]=jl["[object Float64Array]"]=jl["[object Int8Array]"]=jl["[object Int16Array]"]=jl["[object Int32Array]"]=jl["[object Uint8Array]"]=jl["[object Uint8ClampedArray]"]=jl["[object Uint16Array]"]=jl["[object Uint32Array]"]=!0,jl["[object Arguments]"]=jl["[object Array]"]=jl["[object ArrayBuffer]"]=jl["[object Boolean]"]=jl["[object DataView]"]=jl["[object Date]"]=jl["[object Error]"]=jl["[object Function]"]=jl["[object Map]"]=jl["[object Number]"]=jl["[object Object]"]=jl["[object RegExp]"]=jl["[object Set]"]=jl["[object String]"]=jl["[object WeakMap]"]=!1;var gl=function(Z){return nl(Z)&&Ul(Z.length)&&!!jl[zl(Z)]};var tl=function(Z){return function(l){return Z(l)}},Dl={exports:{}};!function(Z,l){var m=H,d=l&&!l.nodeType&&l,b=d&&Z&&!Z.nodeType&&Z,G=b&&b.exports===d&&m.process,X=function(){try{var Z=b&&b.require&&b.require("util").types;return Z||G&&G.binding&&G.binding("util")}catch(Z){}}();Z.exports=X}(Dl,Dl.exports);var Ql=Dl.exports,vl=gl,Bl=tl,Pl=Ql&&Ql.isTypedArray,Ol=Pl?Bl(Pl):vl,El=hl,el=al,fl=Tl,Al=wl,rl=kl,ql=Ol,_l=Object.prototype.hasOwnProperty;var $l=function(Z,l){var m=fl(Z),d=!m&&el(Z),b=!m&&!d&&Al(Z),G=!m&&!d&&!b&&ql(Z),X=m||d||b||G,c=X?El(Z.length,String):[],W=c.length;for(var i in Z)!l&&!_l.call(Z,i)||X&&("length"==i||b&&("offset"==i||"parent"==i)||G&&("buffer"==i||"byteLength"==i||"byteOffset"==i)||rl(i,W))||c.push(i);return c},Zm=Object.prototype;var lm=function(Z){var l=Z&&Z.constructor;return Z===("function"==typeof l&&l.prototype||Zm)};var mm=function(Z,l){return function(m){return Z(l(m))}},dm=mm(Object.keys,Object),bm=lm,Gm=dm,Xm=Object.prototype.hasOwnProperty;var cm=A,Wm=ol;var im=function(Z){return null!=Z&&Wm(Z.length)&&!cm(Z)},Ym=$l,Im=function(Z){if(!bm(Z))return Gm(Z);var l=[];for(var m in Object(Z))Xm.call(Z,m)&&"constructor"!=m&&l.push(m);return l},Lm=im;var ym=function(Z){return Lm(Z)?Ym(Z):Im(Z)},Vm=ul,um=ym;var hm=function(Z,l){return Z&&Vm(l,um(l),Z)};var sm=O,pm=lm,Jm=function(Z){var l=[];if(null!=Z)for(var m in Object(Z))l.push(m);return l},Sm=Object.prototype.hasOwnProperty;var Rm=$l,Nm=function(Z){if(!sm(Z))return Jm(Z);var l=pm(Z),m=[];for(var d in Z)("constructor"!=d||!l&&Sm.call(Z,d))&&m.push(d);return m},xm=im;var Km=function(Z){return xm(Z)?Rm(Z,!0):Nm(Z)},Mm=ul,am=Km;var Tm=function(Z,l){return Z&&Mm(l,am(l),Z)},Cm={exports:{}};!function(Z,l){var m=k,d=l&&!l.nodeType&&l,b=d&&Z&&!Z.nodeType&&Z,G=b&&b.exports===d?m.Buffer:void 0,X=G?G.allocUnsafe:void 0;Z.exports=function(Z,l){if(l)return Z.slice();var m=Z.length,d=X?X(m):new Z.constructor(m);return Z.copy(d),d}}(Cm,Cm.exports);var Hm=Cm.exports;var wm=function(Z,l){var m=-1,d=Z.length;for(l||(l=Array(d));++mb?0:b+l),(m=m>b?b:m)<0&&(m+=b),b=l>m?0:m-l>>>0,l>>>=0;for(var G=Array(b);++d0&&d(W)?m>1?Z(W,m-1,d,b,G):oG(G,W):b||(G[G.length]=W)}return G},nG=UG;var jG=function(Z){return(null==Z?0:Z.length)?nG(Z,1):[]};var gG=function(Z,l,m){switch(m.length){case 0:return Z.call(l);case 1:return Z.call(l,m[0]);case 2:return Z.call(l,m[0],m[1]);case 3:return Z.call(l,m[0],m[1],m[2])}return Z.apply(l,m)},tG=Math.max;var DG=function(Z,l,m){return l=tG(void 0===l?Z.length-1:l,0),function(){for(var d=arguments,b=-1,G=tG(d.length-l,0),X=Array(G);++b0){if(++l>=800)return arguments[0]}else l=0;return Z.apply(void 0,arguments)}},EG=OG(BG),eG=jG,fG=DG,AG=EG;var rG=b,qG=zb,_G=JG,$G=XG,ZX=ul,lX=HG,mX=cd,dX=d(function(Z){return AG(fG(Z,void 0,eG),Z+"")}((function(Z,l){var m={};if(null==Z)return m;var d=!1;l=rG(l,(function(l){return l=$G(l,Z),d||(d=l.length>1),l})),ZX(Z,mX(Z),m),d&&(m=qG(m,7,lX));for(var b=l.length;b--;)_G(m,l[b]);return m})));let bX=!1,GX=!1;class XX{container=null;wrapper=null;wrapperMain=null;options={};requestOptions={};pdfDocument=null;loopCheckTimer=null;constructor(Z,l={},m={}){this.container=Z,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...l},this.requestOptions=m,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;"),this.container.appendChild(this.wrapper)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;"),this.wrapper.appendChild(this.wrapperMain)}createCanvas(Z){let l=this.wrapperMain.querySelectorAll("canvas");if(l[Z-1])return[l[Z-1],l[Z-1].getContext("2d")];const m=document.createElement("canvas");return m.setAttribute("style","width:100%"),this.wrapperMain.appendChild(m),[m,m.getContext("2d")]}installPdfScript(){return(Z="data:text/javascript;base64,LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgcGRmLmpzLkxJQ0VOU0UudHh0ICovCnZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LHJvb3QsZmFjdG9yeTtyb290PWdsb2JhbFRoaXMsZmFjdG9yeT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189WywodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGkodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gYSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxvKHQpfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1vKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxyJiZzKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiB1KHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZoKHQsZSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGYodCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZCh0KTtpZihlKXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW8oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGQodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQkFTRUxJTkVfRkFDVE9SPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwLGUuYXJyYXlCeXRlTGVuZ3RoPVQsZS5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2Zvcih2YXIgcj0wLG49MDtuPGU7bisrKXIrPVQodFtuXSk7Zm9yKHZhciBpPTAsYT1uZXcgVWludDhBcnJheShyKSxvPTA7bzxlO28rKyl7dmFyIHM9dFtvXTtzIGluc3RhbmNlb2YgVWludDhBcnJheXx8KHM9InN0cmluZyI9PXR5cGVvZiBzP1Aocyk6bmV3IFVpbnQ4QXJyYXkocykpO3ZhciBsPXMuYnl0ZUxlbmd0aDthLnNldChzLGkpLGkrPWx9cmV0dXJuIGF9LGUuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7dHx8bShlKX0sZS5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uKHQpeyJvYmplY3QiPT09byh0KSYmbnVsbCE9PXQmJnZvaWQgMCE9PXQubGVuZ3RofHxtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIGU9dC5sZW5ndGgscj04MTkyO2lmKGU8cilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krPXIpe3ZhciBhPU1hdGgubWluKGkrcixlKSxzPXQuc3ViYXJyYXkoaSxhKTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpKX1yZXR1cm4gbi5qb2luKCIiKX0sZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0hMTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldHRsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dC5yZXNvbHZlPWZ1bmN0aW9uKHQpe2U9ITAscih0KX0sdC5yZWplY3Q9ZnVuY3Rpb24odCl7ZT0hMCxuKHQpfX0pKSx0fSxlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighdClyZXR1cm4gbnVsbDt0cnl7aWYociYmInN0cmluZyI9PXR5cGVvZiB0KXtpZihyLmFkZERlZmF1bHRQcm90b2NvbCYmdC5zdGFydHNXaXRoKCJ3d3cuIikpe3ZhciBuPXQubWF0Y2goL1wuL2cpO24mJm4ubGVuZ3RoPj0yJiYodD0iaHR0cDovLyIuY29uY2F0KHQpKX1pZihyLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7dD1SKHQpfWNhdGNoKHQpe319dmFyIGk9ZT9uZXcgVVJMKHQsZSk6bmV3IFVSTCh0KTtpZihmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtzd2l0Y2godC5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShpKSlyZXR1cm4gaX1jYXRjaCh0KXt9cmV0dXJuIG51bGx9LGUuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRGF0ZTtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKHQuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfSxlLmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGUuaW5mbz1mdW5jdGlvbih0KXt2Pj1wLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIi5jb25jYXQodCkpfSxlLmlzQXJyYXlCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PT1vKHQpJiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofSxlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl0hPT1lW3JdKXJldHVybiExO3JldHVybiEwfSxlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24odCl7dmFyIGUscixuPU9iamVjdC5jcmVhdGUobnVsbCksYT1mdW5jdGlvbih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9aSh0KSkpe3ImJih0PXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsbD0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIHM9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7bD0hMCxvPXR9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IG99fX19KHQpO3RyeXtmb3IoYS5zKCk7IShlPWEubigpKS5kb25lOyl7dmFyIG89KHI9ZS52YWx1ZSwyLGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHIpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2ZvcihhPShyPXIuY2FsbCh0KSkubmV4dCwwOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0ocil8fGkociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSxzPW9bMF0sbD1vWzFdO25bc109bH19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIG59LGUub2JqZWN0U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RofSxlLnNldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKHQpe051bWJlci5pc0ludGVnZXIodCkmJih2PXQpfSxlLnNoYWRvdz1nLGUuc3RyaW5nMzI9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9LGUuc3RyaW5nVG9CeXRlcz1QLGUuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU7aWYodFswXT49IsOvIiYmKCLDviI9PT10WzBdJiYiw78iPT09dFsxXT9lPSJ1dGYtMTZiZSI6IsO/Ij09PXRbMF0mJiLDviI9PT10WzFdP2U9InV0Zi0xNmxlIjoiw68iPT09dFswXSYmIsK7Ij09PXRbMV0mJiLCvyI9PT10WzJdJiYoZT0idXRmLTgiKSxlKSl0cnl7dmFyIHI9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksbj1QKHQpO3JldHVybiByLmRlY29kZShuKX1jYXRjaCh0KXt5KCdzdHJpbmdUb1BERlN0cmluZzogIicuY29uY2F0KHQsJyIuJykpfWZvcih2YXIgaT1bXSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXt2YXIgcz1NW3QuY2hhckNvZGVBdChhKV07aS5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTp0LmNoYXJBdChhKSl9cmV0dXJuIGkuam9pbigiIil9LGUuc3RyaW5nVG9VVEY4U3RyaW5nPVIsZS51bnJlYWNoYWJsZT1tLGUudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfSxlLndhcm49eSxnbG9iYWxUaGlzLl9wZGZqc0NvbXBhdGliaWxpdHlDaGVja2VkfHwoZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMCxyKDIpKSxlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLGUuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSxlLkxJTkVfRkFDVE9SPTEuMzUsZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNSxlLkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQsZS5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9LGUuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfSxlLkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGUuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsSU5LOjE1fSxlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtGUkVFVEVYVF9TSVpFOjEsRlJFRVRFWFRfQ09MT1I6MixGUkVFVEVYVF9PUEFDSVRZOjMsSU5LX0NPTE9SOjExLElOS19USElDS05FU1M6MTIsSU5LX09QQUNJVFk6MTN9LGUuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sZS5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fSxlLkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9LGUuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fSxlLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZT17TUFSS0VEOiJNYXJrZWQiLFJFVklFVzoiUmV2aWV3In0sZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9e01BUktFRDoiTWFya2VkIixVTk1BUktFRDoiVW5tYXJrZWQifSxlLkFubm90YXRpb25SZXZpZXdTdGF0ZT17QUNDRVBURUQ6IkFjY2VwdGVkIixSRUpFQ1RFRDoiUmVqZWN0ZWQiLENBTkNFTExFRDoiQ2FuY2VsbGVkIixDT01QTEVURUQ6IkNvbXBsZXRlZCIsTk9ORToiTm9uZSJ9LGUuQW5ub3RhdGlvblJlcGx5VHlwZT17R1JPVVA6Ikdyb3VwIixSRVBMWToiUiJ9LGUuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LGUuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSxlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9e1dDOiJXaWxsQ2xvc2UiLFdTOiJXaWxsU2F2ZSIsRFM6IkRpZFNhdmUiLFdQOiJXaWxsUHJpbnQiLERQOiJEaWRQcmludCJ9LGUuUGFnZUFjdGlvbkV2ZW50VHlwZT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LGUuU3RyZWFtVHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsRkxBVEU6IkZMQVRFIixMWlc6IkxaVyIsRENUOiJEQ1QiLEpQWDoiSlBYIixKQklHOiJKQklHIixBODU6IkE4NSIsQUhYOiJBSFgiLENDRjoiQ0NGIixSTFg6IlJMWCJ9LGUuRm9udFR5cGU9e1VOS05PV046IlVOS05PV04iLFRZUEUxOiJUWVBFMSIsVFlQRTFTVEFOREFSRDoiVFlQRTFTVEFOREFSRCIsVFlQRTFDOiJUWVBFMUMiLENJREZPTlRUWVBFMDoiQ0lERk9OVFRZUEUwIixDSURGT05UVFlQRTBDOiJDSURGT05UVFlQRTBDIixUUlVFVFlQRToiVFJVRVRZUEUiLENJREZPTlRUWVBFMjoiQ0lERk9OVFRZUEUyIixUWVBFMzoiVFlQRTMiLE9QRU5UWVBFOiJPUEVOVFlQRSIsVFlQRTA6IlRZUEUwIixNTVRZUEUxOiJNTVRZUEUxIn07dmFyIHA9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1wLGUuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfSxlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSxlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn0sZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgdj1wLldBUk5JTkdTO2Z1bmN0aW9uIHkodCl7dj49cC5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIuY29uY2F0KHQpKX1mdW5jdGlvbiBtKHQpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6IW4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSkscn12YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt0aGlzLmNvbnN0cnVjdG9yPT09dCYmbSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9cn1yZXR1cm4gdC5wcm90b3R5cGU9bmV3IEVycm9yLHQuY29uc3RydWN0b3I9dCx0fSgpO2UuQmFzZUV4Y2VwdGlvbj1iO3ZhciBfPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlBhc3N3b3JkRXhjZXB0aW9uIikpLmNvZGU9bixpfXJldHVybiBsKHIpfShiKTtlLlBhc3N3b3JkRXhjZXB0aW9uPV87dmFyIHc9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0LG4pe3ZhciBpO3JldHVybiB1KHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIikpLmRldGFpbHM9bixpfXJldHVybiBsKHIpfShiKTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj13O3ZhciBBPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJJbnZhbGlkUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuSW52YWxpZFBERkV4Y2VwdGlvbj1BO3ZhciBrPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJNaXNzaW5nUERGRXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2UuTWlzc2luZ1BERkV4Y2VwdGlvbj1rO3ZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaTtyZXR1cm4gdSh0aGlzLHIpLChpPWUuY2FsbCh0aGlzLHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpKS5zdGF0dXM9bixpfXJldHVybiBsKHIpfShiKTtlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1TO3ZhciB4PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHUodGhpcyxyKSxlLmNhbGwodGhpcyx0LCJGb3JtYXRFcnJvciIpfXJldHVybiBsKHIpfShiKTtlLkZvcm1hdEVycm9yPXg7dmFyIEU9ZnVuY3Rpb24odCl7YyhyLHQpO3ZhciBlPWYocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0aGlzLHIpLGUuY2FsbCh0aGlzLHQsIkFib3J0RXhjZXB0aW9uIil9cmV0dXJuIGwocil9KGIpO2Z1bmN0aW9uIFAodCl7InN0cmluZyIhPXR5cGVvZiB0JiZtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTsrK24pcltuXT0yNTUmdC5jaGFyQ29kZUF0KG4pO3JldHVybiByfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHZvaWQgMCE9PXQubGVuZ3RoP3QubGVuZ3RoOnZvaWQgMCE9PXQuYnl0ZUxlbmd0aD90LmJ5dGVMZW5ndGg6dm9pZCBtKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBhcnJheUJ5dGVMZW5ndGgiKX1lLkFib3J0RXhjZXB0aW9uPUU7dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToiaXNMaXR0bGVFbmRpYW4iLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzTGl0dGxlRW5kaWFuIiwoKHQ9bmV3IFVpbnQ4QXJyYXkoNCkpWzBdPTEsMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdKSk7dmFyIHR9fSx7a2V5OiJpc0V2YWxTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbigiIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpKX19LHtrZXk6ImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX0se2tleToicGxhdGZvcm0iLGdldDpmdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmcodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19XSksdH0oKTtlLkZlYXR1cmVUZXN0PUM7dmFyIE89bihBcnJheSgyNTYpLmtleXMoKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dSh0aGlzLHQpfXJldHVybiBsKHQsbnVsbCxbe2tleToibWFrZUhleENvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIiMiLmNvbmNhdChPW3RdKS5jb25jYXQoT1tlXSkuY29uY2F0KE9bcl0pfX0se2tleToic2NhbGVNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7dFswXT8odFswXTwwJiYocj1lWzBdLGVbMF09ZVsxXSxlWzFdPXIpLGVbMF0qPXRbMF0sZVsxXSo9dFswXSx0WzNdPDAmJihyPWVbMl0sZVsyXT1lWzNdLGVbM109ciksZVsyXSo9dFszXSxlWzNdKj10WzNdKToocj1lWzBdLGVbMF09ZVsyXSxlWzJdPXIscj1lWzFdLGVbMV09ZVszXSxlWzNdPXIsdFsxXTwwJiYocj1lWzJdLGVbMl09ZVszXSxlWzNdPXIpLGVbMl0qPXRbMV0sZVszXSo9dFsxXSx0WzJdPDAmJihyPWVbMF0sZVswXT1lWzFdLGVbMV09ciksZVswXSo9dFsyXSxlWzFdKj10WzJdKSxlWzBdKz10WzRdLGVbMV0rPXRbNF0sZVsyXSs9dFs1XSxlWzNdKz10WzVdfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfX0se2tleToiYXBwbHlUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0qZVswXSt0WzFdKmVbMl0rZVs0XSx0WzBdKmVbMV0rdFsxXSplWzNdK2VbNV1dfX0se2tleToiYXBwbHlJbnZlcnNlVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuWyh0WzBdKmVbM10tdFsxXSplWzJdK2VbMl0qZVs1XS1lWzRdKmVbM10pL3IsKC10WzBdKmVbMV0rdFsxXSplWzBdK2VbNF0qZVsxXS1lWzVdKmVbMF0pL3JdfX0se2tleToiZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49dC5hcHBseVRyYW5zZm9ybShlLHIpLGk9dC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIsNCksciksYT10LmFwcGx5VHJhbnNmb3JtKFtlWzBdLGVbM11dLHIpLG89dC5hcHBseVRyYW5zZm9ybShbZVsyXSxlWzFdXSxyKTtyZXR1cm5bTWF0aC5taW4oblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5taW4oblsxXSxpWzFdLGFbMV0sb1sxXSksTWF0aC5tYXgoblswXSxpWzBdLGFbMF0sb1swXSksTWF0aC5tYXgoblsxXSxpWzFdLGFbMV0sb1sxXSldfX0se2tleToiaW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bdFszXS9lLC10WzFdL2UsLXRbMl0vZSx0WzBdL2UsKHRbMl0qdFs1XS10WzRdKnRbM10pL2UsKHRbNF0qdFsxXS10WzVdKnRbMF0pL2VdfX0se2tleToic2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVt0WzBdLHRbMl0sdFsxXSx0WzNdXSxyPXRbMF0qZVswXSt0WzFdKmVbMl0sbj10WzBdKmVbMV0rdFsxXSplWzNdLGk9dFsyXSplWzBdK3RbM10qZVsyXSxhPXRbMl0qZVsxXSt0WzNdKmVbM10sbz0ocithKS8yLHM9TWF0aC5zcXJ0KE1hdGgucG93KHIrYSwyKS00KihyKmEtaSpuKSkvMixsPW8rc3x8MSx1PW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydCh1KV19fSx7a2V5OiJub3JtYWxpemVSZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDApO3JldHVybiB0WzBdPnRbMl0mJihlWzBdPXRbMl0sZVsyXT10WzBdKSx0WzFdPnRbM10mJihlWzFdPXRbM10sZVszXT10WzFdKSxlfX0se2tleToiaW50ZXJzZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgubWF4KE1hdGgubWluKHRbMF0sdFsyXSksTWF0aC5taW4oZVswXSxlWzJdKSksbj1NYXRoLm1pbihNYXRoLm1heCh0WzBdLHRbMl0pLE1hdGgubWF4KGVbMF0sZVsyXSkpO2lmKHI+bilyZXR1cm4gbnVsbDt2YXIgaT1NYXRoLm1heChNYXRoLm1pbih0WzFdLHRbM10pLE1hdGgubWluKGVbMV0sZVszXSkpLGE9TWF0aC5taW4oTWF0aC5tYXgodFsxXSx0WzNdKSxNYXRoLm1heChlWzFdLGVbM10pKTtyZXR1cm4gaT5hP251bGw6W3IsaSxuLGFdfX0se2tleToiYmV6aWVyQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGksYSxvLHMsbCl7Zm9yKHZhciB1LGMsaCxmLGQscCx2LHksbT1bXSxnPVtbXSxbXV0sYj0wO2I8MjsrK2IpaWYoMD09PWI/KGM9Nip0LTEyKnIrNiphLHU9LTMqdCs5KnItOSphKzMqcyxoPTMqci0zKnQpOihjPTYqZS0xMippKzYqbyx1PS0zKmUrOSppLTkqbyszKmwsaD0zKmktMyplKSxNYXRoLmFicyh1KTwxZS0xMil7aWYoTWF0aC5hYnMoYyk8MWUtMTIpY29udGludWU7MDwoZj0taC9jKSYmZjwxJiZtLnB1c2goZil9ZWxzZSB2PWMqYy00KmgqdSx5PU1hdGguc3FydCh2KSx2PDB8fCgwPChkPSgtYyt5KS8oMip1KSkmJmQ8MSYmbS5wdXNoKGQpLDA8KHA9KC1jLXkpLygyKnUpKSYmcDwxJiZtLnB1c2gocCkpO2Zvcih2YXIgXyx3PW0ubGVuZ3RoLEE9dzt3LS07KV89MS0oZj1tW3ddKSxnWzBdW3ddPV8qXypfKnQrMypfKl8qZipyKzMqXypmKmYqYStmKmYqZipzLGdbMV1bd109XypfKl8qZSszKl8qXypmKmkrMypfKmYqZipvK2YqZipmKmw7cmV0dXJuIGdbMF1bQV09dCxnWzFdW0FdPWUsZ1swXVtBKzFdPXMsZ1sxXVtBKzFdPWwsZ1swXS5sZW5ndGg9Z1sxXS5sZW5ndGg9QSsyLFtNYXRoLm1pbi5hcHBseShNYXRoLG4oZ1swXSkpLE1hdGgubWluLmFwcGx5KE1hdGgsbihnWzFdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKGdbMF0pKSxNYXRoLm1heC5hcHBseShNYXRoLG4oZ1sxXSkpXX19XSksdH0oKTtlLlV0aWw9Rjt2YXIgTT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gUih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh0KSl9fSwodCxlLHIpPT57dmFyIG49cigzKTshZ2xvYmFsVGhpcy5idG9hJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5idG9hPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9KSwhZ2xvYmFsVGhpcy5hdG9iJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5hdG9iPWZ1bmN0aW9uKHQpe3JldHVybiBCdWZmZXIuZnJvbSh0LCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9KSwhZ2xvYmFsVGhpcy5ET01NYXRyaXgmJm4uaXNOb2RlSlMmJihnbG9iYWxUaGlzLkRPTU1hdHJpeD1yZXF1aXJlKCJjYW52YXMiKS5ET01NYXRyaXgpLCFnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtJiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbT1yZXF1aXJlKCJ3ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbnlmaWxsLmpzIikuUmVhZGFibGVTdHJlYW0pLEFycmF5LnByb3RvdHlwZS5hdHx8cig0KSxVaW50OEFycmF5LnByb3RvdHlwZS5hdHx8cig3OCksZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmV8fHIoODgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuaXNOb2RlSlM9dm9pZCAwO3ZhciBuPSEoIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBwcm9jZXNzPyJ1bmRlZmluZWQiOnIocHJvY2VzcykpfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTtlLmlzTm9kZUpTPW59LCh0LGUscik9PntyKDUpO3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1uKCJBcnJheSIsImF0Iil9LCh0LGUscik9Pnt2YXIgbj1yKDYpLGk9cig0MyksYT1yKDY3KSxvPXIoNjUpLHM9cig3Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9YShlKSxuPW8odCkscz1uPj0wP246cituO3JldHVybiBzPDB8fHM+PXI/dm9pZCAwOmVbc119fSkscygiYXQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDgpLmYsYT1yKDQ3KSxvPXIoNTEpLHM9cig0MSksbD1yKDU5KSx1PXIoNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaCxmLGQscD10LnRhcmdldCx2PXQuZ2xvYmFsLHk9dC5zdGF0O2lmKHI9dj9uOnk/bltwXXx8cyhwLHt9KToobltwXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBlKXtpZihmPWVbY10saD10LmRvbnRDYWxsR2V0U2V0PyhkPWkocixjKSkmJmQudmFsdWU6cltjXSwhdSh2P2M6cCsoeT8iLiI6IiMiKStjLHQuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIGY9PXR5cGVvZiBoKWNvbnRpbnVlO2woZixoKX0odC5zaGFtfHxoJiZoLnNoYW0pJiZhKGYsInNoYW0iLCEwKSxvKHIsYyxmLHQpfX19LHQ9Pnt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9ZSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxlKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxlKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cigxMSksYT1yKDEzKSxvPXIoMTQpLHM9cigxNSksbD1yKDIxKSx1PXIoNDIpLGM9cig0NSksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1uP2g6ZnVuY3Rpb24odCxlKXtpZih0PXModCksZT1sKGUpLGMpdHJ5e3JldHVybiBoKHQsZSl9Y2F0Y2godCl7fWlmKHUodCxlKSlyZXR1cm4gbyghaShhLmYsdCxlKSx0W2VdKX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKHQsZSk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1uJiYhci5jYWxsKHsxOjJ9LDEpO2UuZj1pP2Z1bmN0aW9uKHQpe3ZhciBlPW4odGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06cn0sdD0+e3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LCh0LGUscik9Pnt2YXIgbj1yKDE2KSxpPXIoMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMTApLGE9cigxOCksbz1PYmplY3Qscz1uKCIiLnNwbGl0KTt0LmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hbygieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1hKHQpP3ModCwiIik6byh0KX06b30sKHQsZSxyKT0+e3ZhciBuPXIoMTIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS5jYWxsLG89biYmaS5iaW5kLmJpbmQoYSxhKTt0LmV4cG9ydHM9bj9vOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX19fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1uKHt9LnRvU3RyaW5nKSxhPW4oIiIuc2xpY2UpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpLDgsLTEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjApLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXRocm93IGkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSx0PT57dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjIpLGk9cigyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCwic3RyaW5nIik7cmV0dXJuIGkoZSk/ZTplKyIifX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigyMyksYT1yKDI2KSxvPXIoMzMpLHM9cigzNiksbD1yKDM3KSx1PVR5cGVFcnJvcixjPWwoInRvUHJpbWl0aXZlIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCl8fGEodCkpcmV0dXJuIHQ7dmFyIHIsbD1vKHQsYyk7aWYobCl7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPW4obCx0LGUpLCFpKHIpfHxhKHIpKXJldHVybiByO3Rocm93IHUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIikscyh0LGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMjQpLGk9cigyNSksYT1pLmFsbDt0LmV4cG9ydHM9aS5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDpuKHQpfHx0PT09YX06ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10Om4odCl9fSwodCxlLHIpPT57dmFyIG49cigyNSksaT1uLmFsbDt0LmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHx0PT09aX06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9fSx0PT57dmFyIGU9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09ZSYmdm9pZCAwIT09ZTt0LmV4cG9ydHM9e2FsbDplLElTX0hUTUxEREE6cn19LCh0LGUscik9Pnt2YXIgbj1yKDI3KSxpPXIoMjQpLGE9cigyOCksbz1yKDI5KSxzPU9iamVjdDt0LmV4cG9ydHM9bz9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPW4oIlN5bWJvbCIpO3JldHVybiBpKGUpJiZhKGUucHJvdG90eXBlLHModCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bdF0saShyKT9yOnZvaWQgMCk6blt0XSYmblt0XVtlXTt2YXIgcn19LCh0LGUscik9Pnt2YXIgbj1yKDE3KTt0LmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKHQsZSxyKT0+e3ZhciBuPXIoMzApO3QuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwodCxlLHIpPT57dmFyIG49cigzMSksaT1yKDEwKTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaSgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwodCxlLHIpPT57dmFyIG4saSxhPXIoNyksbz1yKDMyKSxzPWEucHJvY2VzcyxsPWEuRGVubyx1PXMmJnMudmVyc2lvbnN8fGwmJmwudmVyc2lvbixjPXUmJnUudjg7YyYmKGk9KG49Yy5zcGxpdCgiLiIpKVswXT4wJiZuWzBdPDQ/MTorKG5bMF0rblsxXSkpLCFpJiZvJiYoIShuPW8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihpPStuWzFdKSx0LmV4cG9ydHM9aX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpO3QuZXhwb3J0cz1uKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LCh0LGUscik9Pnt2YXIgbj1yKDM0KSxpPXIoMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbZV07cmV0dXJuIGkocik/dm9pZCAwOm4ocil9fSwodCxlLHIpPT57dmFyIG49cigyNCksaT1yKDM1KSxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4gdDt0aHJvdyBhKGkodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sdD0+e3ZhciBlPVN0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKHQpe3JldHVybiJPYmplY3QifX19LCh0LGUscik9Pnt2YXIgbj1yKDExKSxpPXIoMjQpLGE9cigyMyksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscztpZigic3RyaW5nIj09PWUmJmkocj10LnRvU3RyaW5nKSYmIWEocz1uKHIsdCkpKXJldHVybiBzO2lmKGkocj10LnZhbHVlT2YpJiYhYShzPW4ocix0KSkpcmV0dXJuIHM7aWYoInN0cmluZyIhPT1lJiZpKHI9dC50b1N0cmluZykmJiFhKHM9bihyLHQpKSlyZXR1cm4gczt0aHJvdyBvKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigzOCksYT1yKDQyKSxvPXIoNDQpLHM9cigzMCksbD1yKDI5KSx1PWkoIndrcyIpLGM9bi5TeW1ib2wsaD1jJiZjLmZvcixmPWw/YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHUsdCl8fCFzJiYic3RyaW5nIiE9dHlwZW9mIHVbdF0pe3ZhciBlPSJTeW1ib2wuIit0O3MmJmEoYyx0KT91W3RdPWNbdF06dVt0XT1sJiZoP2goZSk6ZihlKX1yZXR1cm4gdVt0XX19LCh0LGUscik9Pnt2YXIgbj1yKDM5KSxpPXIoNDApOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XXx8KGlbdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMjYuMSIsbW9kZTpuPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4yNi4xL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LHQ9Pnt0LmV4cG9ydHM9ITF9LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cig0MSksYT0iX19jb3JlLWpzX3NoYXJlZF9fIixvPW5bYV18fGkoYSx7fSk7dC5leHBvcnRzPW99LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpKG4sdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtuW3RdPWV9cmV0dXJuIGV9fSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDQzKSxhPW4oe30uaGFzT3duUHJvcGVydHkpO3QuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSwodCxlLHIpPT57dmFyIG49cigxOSksaT1PYmplY3Q7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9MCxhPU1hdGgucmFuZG9tKCksbz1uKDEuLnRvU3RyaW5nKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbygrK2krYSwzNil9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApLGE9cig0Nik7dC5leHBvcnRzPSFuJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGEoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDIzKSxhPW4uZG9jdW1lbnQsbz1pKGEpJiZpKGEuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2EuY3JlYXRlRWxlbWVudCh0KTp7fX19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9bj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGkuZih0LGUsYSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LCh0LGUscik9Pnt2YXIgbj1yKDkpLGk9cig0NSksYT1yKDQ5KSxvPXIoNTApLHM9cigyMSksbD1UeXBlRXJyb3IsdT1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLGY9ImNvbmZpZ3VyYWJsZSIsZD0id3JpdGFibGUiO2UuZj1uP2E/ZnVuY3Rpb24odCxlLHIpe2lmKG8odCksZT1zKGUpLG8ociksImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJwcm90b3R5cGUiPT09ZSYmInZhbHVlImluIHImJmQgaW4gciYmIXJbZF0pe3ZhciBuPWModCxlKTtuJiZuW2RdJiYodFtlXT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpmIGluIHI/cltmXTpuW2ZdLGVudW1lcmFibGU6aCBpbiByP3JbaF06bltoXSx3cml0YWJsZTohMX0pfXJldHVybiB1KHQsZSxyKX06dTpmdW5jdGlvbih0LGUscil7aWYobyh0KSxlPXMoZSksbyhyKSxpKXRyeXtyZXR1cm4gdSh0LGUscil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGwoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJih0W2VdPXIudmFsdWUpLHR9fSwodCxlLHIpPT57dmFyIG49cig5KSxpPXIoMTApO3QuZXhwb3J0cz1uJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMjMpLGk9U3RyaW5nLGE9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihuKHQpKXJldHVybiB0O3Rocm93IGEoaSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoNDgpLGE9cig1Miksbz1yKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3x8KHM9e30pO3ZhciBsPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6ZTtpZihuKHIpJiZhKHIsdSxzKSxzLmdsb2JhbClsP3RbZV09cjpvKGUscik7ZWxzZXt0cnl7cy51bnNhZmU/dFtlXSYmKGw9ITApOmRlbGV0ZSB0W2VdfWNhdGNoKHQpe31sP3RbZV09cjppLmYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTApLGk9cigyNCksYT1yKDQyKSxvPXIoOSkscz1yKDUzKS5DT05GSUdVUkFCTEUsbD1yKDU0KSx1PXIoNTUpLGM9dS5lbmZvcmNlLGg9dS5nZXQsZj1PYmplY3QuZGVmaW5lUHJvcGVydHksZD1vJiYhbigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PWYoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSkscD1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksdj10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJTeW1ib2woIj09PVN0cmluZyhlKS5zbGljZSgwLDcpJiYoZT0iWyIrU3RyaW5nKGUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSxyJiZyLmdldHRlciYmKGU9ImdldCAiK2UpLHImJnIuc2V0dGVyJiYoZT0ic2V0ICIrZSksKCFhKHQsIm5hbWUiKXx8cyYmdC5uYW1lIT09ZSkmJihvP2YodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSk6dC5uYW1lPWUpLGQmJnImJmEociwiYXJpdHkiKSYmdC5sZW5ndGghPT1yLmFyaXR5JiZmKHQsImxlbmd0aCIse3ZhbHVlOnIuYXJpdHl9KTt0cnl7ciYmYShyLCJjb25zdHJ1Y3RvciIpJiZyLmNvbnN0cnVjdG9yP28mJmYodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0LnByb3RvdHlwZSYmKHQucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2godCl7fXZhciBuPWModCk7cmV0dXJuIGEobiwic291cmNlIil8fChuLnNvdXJjZT1wLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0fTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9digoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKSYmaCh0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSwidG9TdHJpbmciKX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1pKGEsIm5hbWUiKSxsPXMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsdT1zJiYoIW58fG4mJm8oYSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6cyxQUk9QRVI6bCxDT05GSUdVUkFCTEU6dX19LCh0LGUscik9Pnt2YXIgbj1yKDE3KSxpPXIoMjQpLGE9cig0MCksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKGEuaW5zcGVjdFNvdXJjZSl8fChhLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9KSx0LmV4cG9ydHM9YS5pbnNwZWN0U291cmNlfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig1Nikscz1yKDcpLGw9cigyMyksdT1yKDQ3KSxjPXIoNDIpLGg9cig0MCksZj1yKDU3KSxkPXIoNTgpLHA9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix2PXMuVHlwZUVycm9yLHk9cy5XZWFrTWFwO2lmKG98fGguc3RhdGUpe3ZhciBtPWguc3RhdGV8fChoLnN0YXRlPW5ldyB5KTttLmdldD1tLmdldCxtLmhhcz1tLmhhcyxtLnNldD1tLnNldCxuPWZ1bmN0aW9uKHQsZSl7aWYobS5oYXModCkpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCxtLnNldCh0LGUpLGV9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIG0uZ2V0KHQpfHx7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gbS5oYXModCl9fWVsc2V7dmFyIGc9Zigic3RhdGUiKTtkW2ddPSEwLG49ZnVuY3Rpb24odCxlKXtpZihjKHQsZykpdGhyb3cgdihwKTtyZXR1cm4gZS5mYWNhZGU9dCx1KHQsZyxlKSxlfSxpPWZ1bmN0aW9uKHQpe3JldHVybiBjKHQsZyk/dFtnXTp7fX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gYyh0LGcpfX10LmV4cG9ydHM9e3NldDpuLGdldDppLGhhczphLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/aSh0KTpuKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFsKGUpfHwocj1pKGUpKS50eXBlIT09dCl0aHJvdyB2KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LCh0LGUscik9Pnt2YXIgbj1yKDcpLGk9cigyNCksYT1uLldlYWtNYXA7dC5leHBvcnRzPWkoYSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoYSkpfSwodCxlLHIpPT57dmFyIG49cigzOCksaT1yKDQ0KSxhPW4oImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbdF18fChhW3RdPWkodCkpfX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cig2MCksYT1yKDgpLG89cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIHM9aShlKSxsPW8uZix1PWEuZixjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY107bih0LGgpfHxyJiZuKHIsaCl8fGwodCxoLHUoZSxoKSl9fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cigxNyksYT1yKDYxKSxvPXIoNzApLHM9cig1MCksbD1pKFtdLmNvbmNhdCk7dC5leHBvcnRzPW4oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPWEuZihzKHQpKSxyPW8uZjtyZXR1cm4gcj9sKGUscih0KSk6ZX19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTcpLGk9cig0MiksYT1yKDE1KSxvPXIoNjMpLmluZGV4T2Yscz1yKDU4KSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1hKHQpLHU9MCxjPVtdO2ZvcihyIGluIG4pIWkocyxyKSYmaShuLHIpJiZsKGMscik7Zm9yKDtlLmxlbmd0aD51OylpKG4scj1lW3UrK10pJiYofm8oYyxyKXx8bChjLHIpKTtyZXR1cm4gY319LCh0LGUscik9Pnt2YXIgbj1yKDE1KSxpPXIoNjQpLGE9cig2Nyksbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG8pe3ZhciBzLGw9bihlKSx1PWEobCksYz1pKG8sdSk7aWYodCYmciE9cil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKHR8fGMgaW4gbCkmJmxbY109PT1yKXJldHVybiB0fHxjfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6byghMCksaW5kZXhPZjpvKCExKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWF4LGE9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KTtyZXR1cm4gcjwwP2kocitlLDApOmEocixlKX19LCh0LGUscik9Pnt2YXIgbj1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6bihlKX19LHQ9Pnt2YXIgZT1NYXRoLmNlaWwscj1NYXRoLmZsb29yO3QuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgbj0rdDtyZXR1cm4obj4wP3I6ZSkobil9fSwodCxlLHIpPT57dmFyIG49cig2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQubGVuZ3RoKX19LCh0LGUscik9Pnt2YXIgbj1yKDY1KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sdD0+e3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwodCxlKT0+e2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDI0KSxhPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24odCxlKXt2YXIgcj1sW3ModCldO3JldHVybiByPT1jfHxyIT11JiYoaShlKT9uKGUpOiEhZSl9LHM9by5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGEsIi4iKS50b0xvd2VyQ2FzZSgpfSxsPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1vfSwodCxlLHIpPT57dmFyIG49cigzNyksaT1yKDczKSxhPXIoNDgpLmYsbz1uKCJ1bnNjb3BhYmxlcyIpLHM9QXJyYXkucHJvdG90eXBlO251bGw9PXNbb10mJmEocyxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtzW29dW3RdPSEwfX0sKHQsZSxyKT0+e3ZhciBuLGk9cig1MCksYT1yKDc0KSxvPXIoNjkpLHM9cig1OCksbD1yKDc2KSx1PXIoNDYpLGM9cig1NyksaD0icHJvdG90eXBlIixmPSJzY3JpcHQiLGQ9YygiSUVfUFJPVE8iKSxwPWZ1bmN0aW9uKCl7fSx2PWZ1bmN0aW9uKHQpe3JldHVybiI8IitmKyI+Iit0KyI8LyIrZisiPiJ9LHk9ZnVuY3Rpb24odCl7dC53cml0ZSh2KCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaCh0KXt9dmFyIHQsZSxyO209InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJm4/eShuKTooZT11KCJpZnJhbWUiKSxyPSJqYXZhIitmKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGwuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUodigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6eShuKTtmb3IodmFyIGk9by5sZW5ndGg7aS0tOylkZWxldGUgbVtoXVtvW2ldXTtyZXR1cm4gbSgpfTtzW2RdPSEwLHQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8ocFtoXT1pKHQpLHI9bmV3IHAscFtoXT1udWxsLHJbZF09dCk6cj1tKCksdm9pZCAwPT09ZT9yOmEuZihyLGUpfX0sKHQsZSxyKT0+e3ZhciBuPXIoOSksaT1yKDQ5KSxhPXIoNDgpLG89cig1MCkscz1yKDE1KSxsPXIoNzUpO2UuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe28odCk7Zm9yKHZhciByLG49cyhlKSxpPWwoZSksdT1pLmxlbmd0aCxjPTA7dT5jOylhLmYodCxyPWlbYysrXSxuW3JdKTtyZXR1cm4gdH19LCh0LGUscik9Pnt2YXIgbj1yKDYyKSxpPXIoNjkpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LCh0LGUscik9Pnt2YXIgbj1yKDI3KTt0LmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuW3RdLnByb3RvdHlwZVtlXSl9fSwodCxlLHIpPT57cig3OSl9LCh0LGUscik9Pnt2YXIgbj1yKDgwKSxpPXIoNjcpLGE9cig2NSksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzKSxyPWkoZSksbj1hKHQpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDplW3NdfSkpfSwodCxlLHIpPT57dmFyIG4saSxhLG89cig4MSkscz1yKDkpLGw9cig3KSx1PXIoMjQpLGM9cigyMyksaD1yKDQyKSxmPXIoODIpLGQ9cigzNSkscD1yKDQ3KSx2PXIoNTEpLHk9cig0OCkuZixtPXIoMjgpLGc9cig4NCksYj1yKDg2KSxfPXIoMzcpLHc9cig0NCksQT1yKDU1KSxrPUEuZW5mb3JjZSxTPUEuZ2V0LHg9bC5JbnQ4QXJyYXksRT14JiZ4LnByb3RvdHlwZSxQPWwuVWludDhDbGFtcGVkQXJyYXksVD1QJiZQLnByb3RvdHlwZSxDPXgmJmcoeCksTz1FJiZnKEUpLEY9T2JqZWN0LnByb3RvdHlwZSxNPWwuVHlwZUVycm9yLFI9XygidG9TdHJpbmdUYWciKSxJPXcoIlRZUEVEX0FSUkFZX1RBRyIpLGo9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsTD1vJiYhIWImJiJPcGVyYSIhPT1mKGwub3BlcmEpLEQ9ITEsTj17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFU9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxXPWZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7aWYoYyhlKSl7dmFyIHI9UyhlKTtyZXR1cm4gciYmaChyLGopP3Jbal06VyhlKX19LEc9ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4gaChOLGUpfHxoKFUsZSl9O2ZvcihuIGluIE4pKGE9KGk9bFtuXSkmJmkucHJvdG90eXBlKT9rKGEpW2pdPWk6TD0hMTtmb3IobiBpbiBVKShhPShpPWxbbl0pJiZpLnByb3RvdHlwZSkmJihrKGEpW2pdPWkpO2lmKCghTHx8IXUoQyl8fEM9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoQz1mdW5jdGlvbigpe3Rocm93IE0oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEwpKWZvcihuIGluIE4pbFtuXSYmYihsW25dLEMpO2lmKCghTHx8IU98fE89PT1GKSYmKE89Qy5wcm90b3R5cGUsTCkpZm9yKG4gaW4gTilsW25dJiZiKGxbbl0ucHJvdG90eXBlLE8pO2lmKEwmJmcoVCkhPT1PJiZiKFQsTykscyYmIWgoTyxSKSlmb3IobiBpbiBEPSEwLHkoTyxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKT90aGlzW0ldOnZvaWQgMH19KSxOKWxbbl0mJnAobFtuXSxJLG4pO3QuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpMLFRZUEVEX0FSUkFZX1RBRzpEJiZJLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKEcodCkpcmV0dXJuIHQ7dGhyb3cgTSgiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYodSh0KSYmKCFifHxtKEMsdCkpKXJldHVybiB0O3Rocm93IE0oZCh0KSsiIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLHIsbil7aWYocyl7aWYocilmb3IodmFyIGkgaW4gTil7dmFyIGE9bFtpXTtpZihhJiZoKGEucHJvdG90eXBlLHQpKXRyeXtkZWxldGUgYS5wcm90b3R5cGVbdF19Y2F0Y2gocil7dHJ5e2EucHJvdG90eXBlW3RdPWV9Y2F0Y2godCl7fX19T1t0XSYmIXJ8fHYoTyx0LHI/ZTpMJiZFW3RdfHxlLG4pfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihzKXtpZihiKXtpZihyKWZvcihuIGluIE4paWYoKGk9bFtuXSkmJmgoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2godCl7fWlmKENbdF0mJiFyKXJldHVybjt0cnl7cmV0dXJuIHYoQyx0LHI/ZTpMJiZDW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihuIGluIE4pIShpPWxbbl0pfHxpW3RdJiYhcnx8dihpLHQsZSl9fSxnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6Vyxpc1ZpZXc6ZnVuY3Rpb24odCl7aWYoIWModCkpcmV0dXJuITE7dmFyIGU9Zih0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8aChOLGUpfHxoKFUsZSl9LGlzVHlwZWRBcnJheTpHLFR5cGVkQXJyYXk6QyxUeXBlZEFycmF5UHJvdG90eXBlOk99fSx0PT57dC5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LCh0LGUscik9Pnt2YXIgbj1yKDgzKSxpPXIoMjQpLGE9cigxOCksbz1yKDM3KSgidG9TdHJpbmdUYWciKSxzPU9iamVjdCxsPSJBcmd1bWVudHMiPT1hKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPW4/YTpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPXModCksbykpP3I6bD9hKGUpOiJPYmplY3QiPT0obj1hKGUpKSYmaShlLmNhbGxlZSk/IkFyZ3VtZW50cyI6bn19LCh0LGUscik9Pnt2YXIgbj17fTtuW3IoMzcpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sKHQsZSxyKT0+e3ZhciBuPXIoNDIpLGk9cigyNCksYT1yKDQzKSxvPXIoNTcpLHM9cig4NSksbD1vKCJJRV9QUk9UTyIpLHU9T2JqZWN0LGM9dS5wcm90b3R5cGU7dC5leHBvcnRzPXM/dS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXt2YXIgZT1hKHQpO2lmKG4oZSxsKSlyZXR1cm4gZVtsXTt2YXIgcj1lLmNvbnN0cnVjdG9yO3JldHVybiBpKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgdT9jOm51bGx9fSwodCxlLHIpPT57dmFyIG49cigxMCk7dC5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDUwKSxhPXIoODcpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLHI9e307dHJ5eyh0PW4oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpKShyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkociksYShuKSxlP3QocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPVN0cmluZyxhPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0fHxuKHQpKXJldHVybiB0O3Rocm93IGEoIkNhbid0IHNldCAiK2kodCkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKHQsZSxyKT0+e3IoODkpLHIoOTYpLHIoOTgpLHIoMTIxKSxyKDEyMyk7dmFyIG49cigxMzIpO3QuZXhwb3J0cz1uLnN0cnVjdHVyZWRDbG9uZX0sKHQsZSxyKT0+e3ZhciBuPXIoMTUpLGk9cig3MiksYT1yKDkwKSxvPXIoNTUpLHM9cig0OCkuZixsPXIoOTEpLHU9cig5NSksYz1yKDM5KSxoPXIoOSksZj0iQXJyYXkgSXRlcmF0b3IiLGQ9by5zZXQscD1vLmdldHRlckZvcihmKTt0LmV4cG9ydHM9bChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe2QodGhpcyx7dHlwZTpmLHRhcmdldDpuKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAsdSh2b2lkIDAsITApKTp1KCJrZXlzIj09cj9uOiJ2YWx1ZXMiPT1yP2Vbbl06W24sZVtuXV0sITEpfSksInZhbHVlcyIpO3ZhciB2PWEuQXJndW1lbnRzPWEuQXJyYXk7aWYoaSgia2V5cyIpLGkoInZhbHVlcyIpLGkoImVudHJpZXMiKSwhYyYmaCYmInZhbHVlcyIhPT12Lm5hbWUpdHJ5e3ModiwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2godCl7fX0sdD0+e3QuZXhwb3J0cz17fX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDExKSxhPXIoMzkpLG89cig1Mykscz1yKDI0KSxsPXIoOTIpLHU9cig4NCksYz1yKDg2KSxoPXIoOTQpLGY9cig0NyksZD1yKDUxKSxwPXIoMzcpLHY9cig5MCkseT1yKDkzKSxtPW8uUFJPUEVSLGc9by5DT05GSUdVUkFCTEUsYj15Lkl0ZXJhdG9yUHJvdG90eXBlLF89eS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHc9cCgiaXRlcmF0b3IiKSxBPSJrZXlzIixrPSJ2YWx1ZXMiLFM9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scCx5LEUpe2wocixlLG8pO3ZhciBQLFQsQyxPPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZqKXJldHVybiBqO2lmKCFfJiZ0IGluIFIpcmV0dXJuIFJbdF07c3dpdGNoKHQpe2Nhc2UgQTpjYXNlIGs6Y2FzZSBTOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxGPWUrIiBJdGVyYXRvciIsTT0hMSxSPXQucHJvdG90eXBlLEk9Ult3XXx8UlsiQEBpdGVyYXRvciJdfHxwJiZSW3BdLGo9IV8mJkl8fE8ocCksTD0iQXJyYXkiPT1lJiZSLmVudHJpZXN8fEk7aWYoTCYmKFA9dShMLmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZQLm5leHQmJihhfHx1KFApPT09Ynx8KGM/YyhQLGIpOnMoUFt3XSl8fGQoUCx3LHgpKSxoKFAsRiwhMCwhMCksYSYmKHZbRl09eCkpLG0mJnA9PWsmJkkmJkkubmFtZSE9PWsmJighYSYmZz9mKFIsIm5hbWUiLGspOihNPSEwLGo9ZnVuY3Rpb24oKXtyZXR1cm4gaShJLHRoaXMpfSkpLHApaWYoVD17dmFsdWVzOk8oayksa2V5czp5P2o6TyhBKSxlbnRyaWVzOk8oUyl9LEUpZm9yKEMgaW4gVCkoX3x8TXx8IShDIGluIFIpKSYmZChSLEMsVFtDXSk7ZWxzZSBuKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6X3x8TX0sVCk7cmV0dXJuIGEmJiFFfHxSW3ddPT09anx8ZChSLHcsaix7bmFtZTpwfSksdltlXT1qLFR9fSwodCxlLHIpPT57dmFyIG49cig5MykuSXRlcmF0b3JQcm90b3R5cGUsaT1yKDczKSxhPXIoMTQpLG89cig5NCkscz1yKDkwKSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgYz1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1pKG4se25leHQ6YSgrIXUscil9KSxvKHQsYywhMSwhMCksc1tjXT1sLHR9fSwodCxlLHIpPT57dmFyIG4saSxhLG89cigxMCkscz1yKDI0KSxsPXIoMjMpLHU9cig3MyksYz1yKDg0KSxoPXIoNTEpLGY9cigzNyksZD1yKDM5KSxwPWYoIml0ZXJhdG9yIiksdj0hMTtbXS5rZXlzJiYoIm5leHQiaW4oYT1bXS5rZXlzKCkpPyhpPWMoYyhhKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG49aSk6dj0hMCksIWwobil8fG8oKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIG5bcF0uY2FsbCh0KSE9PXR9KSk/bj17fTpkJiYobj11KG4pKSxzKG5bcF0pfHxoKG4scCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOm4sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp2fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDQyKSxhPXIoMzcpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIXImJih0PXQucHJvdG90eXBlKSx0JiYhaSh0LGEpJiZuKHQsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LHQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6dCxkb25lOmV9fX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig1MSksYT1yKDk3KTtufHxpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixhLHt1bnNhZmU6ITB9KX0sKHQsZSxyKT0+e3ZhciBuPXIoODMpLGk9cig4Mik7dC5leHBvcnRzPW4/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sKHQsZSxyKT0+e3IoOTkpfSwodCxlLHIpPT57cigxMDApKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuPXIoNiksaT1yKDcpLGE9cigxNyksbz1yKDcxKSxzPXIoNTEpLGw9cigxMDEpLHU9cigxMDgpLGM9cigxMTUpLGg9cigyNCksZj1yKDIwKSxkPXIoMjMpLHA9cigxMCksdj1yKDExNikseT1yKDk0KSxtPXIoMTE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBnPS0xIT09dC5pbmRleE9mKCJNYXAiKSxiPS0xIT09dC5pbmRleE9mKCJXZWFrIiksXz1nPyJzZXQiOiJhZGQiLHc9aVt0XSxBPXcmJncucHJvdG90eXBlLGs9dyxTPXt9LHg9ZnVuY3Rpb24odCl7dmFyIGU9YShBW3RdKTtzKEEsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShiJiYhZCh0KSkmJmUodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gYiYmIWQodCk/dm9pZCAwOmUodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGImJiFkKHQpKSYmZSh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihvKHQsIWgodyl8fCEoYnx8QS5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IHcpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlrPXIuZ2V0Q29uc3RydWN0b3IoZSx0LGcsXyksbC5lbmFibGUoKTtlbHNlIGlmKG8odCwhMCkpe3ZhciBFPW5ldyBrLFA9RVtfXShiP3t9Oi0wLDEpIT1FLFQ9cCgoZnVuY3Rpb24oKXtFLmhhcygxKX0pKSxDPXYoKGZ1bmN0aW9uKHQpe25ldyB3KHQpfSkpLE89IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB3LGU9NTtlLS07KXRbX10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO0N8fCgoaz1lKChmdW5jdGlvbih0LGUpe2ModCxBKTt2YXIgcj1tKG5ldyB3LHQsayk7cmV0dXJuIGYoZSl8fHUoZSxyW19dLHt0aGF0OnIsQVNfRU5UUklFUzpnfSkscn0pKSkucHJvdG90eXBlPUEsQS5jb25zdHJ1Y3Rvcj1rKSwoVHx8TykmJih4KCJkZWxldGUiKSx4KCJoYXMiKSxnJiZ4KCJnZXQiKSksKE98fFApJiZ4KF8pLGImJkEuY2xlYXImJmRlbGV0ZSBBLmNsZWFyfXJldHVybiBTW3RdPWssbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprIT13fSxTKSx5KGssdCksYnx8ci5zZXRTdHJvbmcoayx0LGcpLGt9fSwodCxlLHIpPT57dmFyIG49cig2KSxpPXIoMTcpLGE9cig1OCksbz1yKDIzKSxzPXIoNDIpLGw9cig0OCkuZix1PXIoNjEpLGM9cigxMDIpLGg9cigxMDUpLGY9cig0NCksZD1yKDEwNykscD0hMSx2PWYoIm1ldGEiKSx5PTAsbT1mdW5jdGlvbih0KXtsKHQsdix7dmFsdWU6e29iamVjdElEOiJPIit5Kyssd2Vha0RhdGE6e319fSl9LGc9dC5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXtnLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgdD11LmYsZT1pKFtdLnNwbGljZSkscj17fTtyW3ZdPTEsdChyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksaT0wLGE9bi5sZW5ndGg7aTxhO2krKylpZihuW2ldPT09dil7ZShuLGksMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6Yy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFzKHQsdikpe2lmKCFoKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7bSh0KX1yZXR1cm4gdFt2XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighcyh0LHYpKXtpZighaCh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTttKHQpfXJldHVybiB0W3ZdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gZCYmcCYmaCh0KSYmIXModCx2KSYmbSh0KSx0fX07YVt2XT0hMH0sKHQsZSxyKT0+e3ZhciBuPXIoMTgpLGk9cigxNSksYT1yKDYxKS5mLG89cigxMDMpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gcyYmIldpbmRvdyI9PW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhKHQpfWNhdGNoKHQpe3JldHVybiBvKHMpfX0odCk6YShpKHQpKX19LCh0LGUscik9Pnt2YXIgbj1yKDY0KSxpPXIoNjcpLGE9cigxMDQpLG89QXJyYXkscz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbD1pKHQpLHU9bihlLGwpLGM9bih2b2lkIDA9PT1yP2w6cixsKSxoPW8ocyhjLXUsMCkpLGY9MDt1PGM7dSsrLGYrKylhKGgsZix0W3VdKTtyZXR1cm4gaC5sZW5ndGg9ZixofX0sKHQsZSxyKT0+e3ZhciBuPXIoMjEpLGk9cig0OCksYT1yKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPW4oZSk7byBpbiB0P2kuZih0LG8sYSgwLHIpKTp0W29dPXJ9fSwodCxlLHIpPT57dmFyIG49cigxMCksaT1yKDIzKSxhPXIoMTgpLG89cigxMDYpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTt0LmV4cG9ydHM9bHx8bz9mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighb3x8IkFycmF5QnVmZmVyIiE9YSh0KSkmJighc3x8cyh0KSl9OnN9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYSIse3ZhbHVlOjh9KX19KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LCh0LGUscik9Pnt2YXIgbj1yKDEwOSksaT1yKDExKSxhPXIoNTApLG89cigzNSkscz1yKDExMSksbD1yKDY3KSx1PXIoMjgpLGM9cigxMTIpLGg9cigxMTMpLGY9cigxMTQpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSx2PXAucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksbSxnLGIsXyx3LEEsaz1yJiZyLnRoYXQsUz0hKCFyfHwhci5BU19FTlRSSUVTKSx4PSEoIXJ8fCFyLklTX1JFQ09SRCksRT0hKCFyfHwhci5JU19JVEVSQVRPUiksUD0hKCFyfHwhci5JTlRFUlJVUFRFRCksVD1uKGUsayksQz1mdW5jdGlvbih0KXtyZXR1cm4geSYmZih5LCJub3JtYWwiLHQpLG5ldyBwKCEwLHQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiBTPyhhKHQpLFA/VCh0WzBdLHRbMV0sQyk6VCh0WzBdLHRbMV0pKTpQP1QodCxDKTpUKHQpfTtpZih4KXk9dC5pdGVyYXRvcjtlbHNlIGlmKEUpeT10O2Vsc2V7aWYoIShtPWgodCkpKXRocm93IGQobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMobSkpe2ZvcihnPTAsYj1sKHQpO2I+ZztnKyspaWYoKF89Tyh0W2ddKSkmJnUodixfKSlyZXR1cm4gXztyZXR1cm4gbmV3IHAoITEpfXk9Yyh0LG0pfWZvcih3PXg/dC5uZXh0OnkubmV4dDshKEE9aSh3LHkpKS5kb25lOyl7dHJ5e189TyhBLnZhbHVlKX1jYXRjaCh0KXtmKHksInRocm93Iix0KX1pZigib2JqZWN0Ij09dHlwZW9mIF8mJl8mJnUodixfKSlyZXR1cm4gX31yZXR1cm4gbmV3IHAoITEpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEwKSxpPXIoMzQpLGE9cigxMiksbz1uKG4uYmluZCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCksdm9pZCAwPT09ZT90OmE/byh0LGUpOmZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LCh0LGUscik9Pnt2YXIgbj1yKDE4KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiRnVuY3Rpb24iPT09bih0KSlyZXR1cm4gaSh0KX19LCh0LGUscik9Pnt2YXIgbj1yKDM3KSxpPXIoOTApLGE9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihpLkFycmF5PT09dHx8b1thXT09PXQpfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cigzNCksYT1yKDUwKSxvPXIoMzUpLHM9cigxMTMpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKHQpOmU7aWYoaShyKSlyZXR1cm4gYShuKHIsdCkpO3Rocm93IGwobyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKHQsZSxyKT0+e3ZhciBuPXIoODIpLGk9cigzMyksYT1yKDIwKSxvPXIoOTApLHM9cigzNykoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiBpKHQscyl8fGkodCwiQEBpdGVyYXRvciIpfHxvW24odCldfX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig1MCksYT1yKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM7aSh0KTt0cnl7aWYoIShvPWEodCwicmV0dXJuIikpKXtpZigidGhyb3ciPT09ZSl0aHJvdyByO3JldHVybiByfW89bihvLHQpfWNhdGNoKHQpe3M9ITAsbz10fWlmKCJ0aHJvdyI9PT1lKXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBpKG8pLHJ9fSwodCxlLHIpPT57dmFyIG49cigyOCksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlLHQpKXJldHVybiB0O3Rocm93IGkoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwodCxlLHIpPT57dmFyIG49cigzNykoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIGE9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFhKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgYT17fTthW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSx0KGEpfWNhdGNoKHQpe31yZXR1cm4gcn19LCh0LGUscik9Pnt2YXIgbj1yKDI0KSxpPXIoMjMpLGE9cig4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzO3JldHVybiBhJiZuKG89ZS5jb25zdHJ1Y3RvcikmJm8hPT1yJiZpKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmEodCxzKSx0fX0sKHQsZSxyKT0+e3ZhciBuPXIoNDgpLmYsaT1yKDczKSxhPXIoMTE5KSxvPXIoMTA5KSxzPXIoMTE1KSxsPXIoMjApLHU9cigxMDgpLGM9cig5MSksaD1yKDk1KSxmPXIoMTIwKSxkPXIoOSkscD1yKDEwMSkuZmFzdEtleSx2PXIoNTUpLHk9di5zZXQsbT12LmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciBoPXQoKGZ1bmN0aW9uKHQsbil7cyh0LGYpLHkodCx7dHlwZTplLGluZGV4OmkobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGR8fCh0LnNpemU9MCksbChuKXx8dShuLHRbY10se3RoYXQ6dCxBU19FTlRSSUVTOnJ9KX0pKSxmPWgucHJvdG90eXBlLHY9bShlKSxnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dih0KSxvPWIodCxlKTtyZXR1cm4gbz9vLnZhbHVlPXI6KGEubGFzdD1vPXtpbmRleDppPXAoZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWEubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxhLmZpcnN0fHwoYS5maXJzdD1vKSxuJiYobi5uZXh0PW8pLGQ/YS5zaXplKys6dC5zaXplKyssIkYiIT09aSYmKGEuaW5kZXhbaV09bykpLHR9LGI9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXYodCksaT1wKGUpO2lmKCJGIiE9PWkpcmV0dXJuIG4uaW5kZXhbaV07Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT1lKXJldHVybiByfTtyZXR1cm4gYShmLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMpLGU9dC5pbmRleCxyPXQuZmlyc3Q7cjspci5yZW1vdmVkPSEwLHIucHJldmlvdXMmJihyLnByZXZpb3VzPXIucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW3IuaW5kZXhdLHI9ci5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxkP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSksbj1iKGUsdCk7aWYobil7dmFyIGk9bi5uZXh0LGE9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsYSYmKGEubmV4dD1pKSxpJiYoaS5wcmV2aW91cz1hKSxyLmZpcnN0PT1uJiYoci5maXJzdD1pKSxyLmxhc3Q9PW4mJihyLmxhc3Q9YSksZD9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dih0aGlzKSxuPW8odCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7ZT1lP2UubmV4dDpyLmZpcnN0Oylmb3IobihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9fSksYShmLHI/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGQmJm4oZiwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMpLnNpemV9fSksaH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiLGk9bShlKSxhPW0obik7Yyh0LGUsKGZ1bmN0aW9uKHQsZSl7eSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6aSh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1hKHRoaXMpLGU9dC5raW5kLHI9dC5sYXN0O3ImJnIucmVtb3ZlZDspcj1yLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1yPXI/ci5uZXh0OnQuc3RhdGUuZmlyc3QpP2goImtleXMiPT1lP3Iua2V5OiJ2YWx1ZXMiPT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdLCExKToodC50YXJnZXQ9dm9pZCAwLGgodm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksZihlKX19fSwodCxlLHIpPT57dmFyIG49cig1MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMjcpLGk9cig0OCksYT1yKDM3KSxvPXIoOSkscz1hKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7byYmZSYmIWVbc10mJnIoZSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwodCxlLHIpPT57cigxMjIpfSwodCxlLHIpPT57cigxMDApKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTgpKX0sKHQsZSxyKT0+e3ZhciBuLGk9cigzOSksYT1yKDYpLG89cig3KSxzPXIoMjcpLGw9cigxNyksdT1yKDEwKSxjPXIoNDQpLGg9cigyNCksZj1yKDEyNCksZD1yKDIwKSxwPXIoMjMpLHY9cigyNikseT1yKDEwOCksbT1yKDUwKSxnPXIoODIpLGI9cig0MiksXz1yKDEwNCksdz1yKDQ3KSxBPXIoNjcpLGs9cigxMjUpLFM9cigxMjYpLHg9cigxMjgpLEU9cigzMSksUD1yKDEyOSksVD1yKDEzMCksQz1yKDEzMSksTz1vLk9iamVjdCxGPW8uRGF0ZSxNPW8uRXJyb3IsUj1vLkV2YWxFcnJvcixJPW8uUmFuZ2VFcnJvcixqPW8uUmVmZXJlbmNlRXJyb3IsTD1vLlN5bnRheEVycm9yLEQ9by5UeXBlRXJyb3IsTj1vLlVSSUVycm9yLFU9by5QZXJmb3JtYW5jZU1hcmssVz1vLldlYkFzc2VtYmx5LEc9VyYmVy5Db21waWxlRXJyb3J8fE0sQj1XJiZXLkxpbmtFcnJvcnx8TSxxPVcmJlcuUnVudGltZUVycm9yfHxNLEg9cygiRE9NRXhjZXB0aW9uIiksej1zKCJTZXQiKSxWPXMoIk1hcCIpLFg9Vi5wcm90b3R5cGUsWT1sKFguaGFzKSxLPWwoWC5nZXQpLEo9bChYLnNldCksUT1sKHoucHJvdG90eXBlLmFkZCksJD1zKCJPYmplY3QiLCJrZXlzIiksWj1sKFtdLnB1c2gpLHR0PWwoKCEwKS52YWx1ZU9mKSxldD1sKDEuLnZhbHVlT2YpLHJ0PWwoIiIudmFsdWVPZiksbnQ9bChGLnByb3RvdHlwZS5nZXRUaW1lKSxpdD1jKCJzdHJ1Y3R1cmVkQ2xvbmUiKSxhdD0iRGF0YUNsb25lRXJyb3IiLG90PSJUcmFuc2ZlcnJpbmciLHN0PWZ1bmN0aW9uKHQpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciBlPW5ldyBvLlNldChbN10pLHI9dChlKSxuPXQoTyg3KSk7cmV0dXJuIHI9PWV8fCFyLmhhcyg3KXx8Im9iamVjdCIhPXR5cGVvZiBufHw3IT1ufSkpJiZ0fSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiF1KChmdW5jdGlvbigpe3ZhciByPW5ldyBlLG49dCh7YTpyLGI6cn0pO3JldHVybiEobiYmbi5hPT09bi5iJiZuLmEgaW5zdGFuY2VvZiBlJiZuLmEuc3RhY2s9PT1yLnN0YWNrKX0pKX0sdXQ9by5zdHJ1Y3R1cmVkQ2xvbmUsY3Q9aXx8IWx0KHV0LE0pfHwhbHQodXQsSCl8fChuPXV0LCEhdSgoZnVuY3Rpb24oKXt2YXIgdD1uKG5ldyBvLkFnZ3JlZ2F0ZUVycm9yKFsxXSxpdCx7Y2F1c2U6M30pKTtyZXR1cm4iQWdncmVnYXRlRXJyb3IiIT10Lm5hbWV8fDEhPXQuZXJyb3JzWzBdfHx0Lm1lc3NhZ2UhPWl0fHwzIT10LmNhdXNlfSkpKSxodD0hdXQmJnN0KChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUoaXQse2RldGFpbDp0fSkuZGV0YWlsfSkpLGZ0PXN0KHV0KXx8aHQsZHQ9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEgoIlVuY2xvbmVhYmxlIHR5cGU6ICIrdCxhdCl9LHB0PWZ1bmN0aW9uKHQsZSl7dGhyb3cgbmV3IEgoKGV8fCJDbG9uaW5nIikrIiBvZiAiK3QrIiBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZSIsYXQpfSx2dD1mdW5jdGlvbih0LGUpe2lmKHYodCkmJmR0KCJTeW1ib2wiKSwhcCh0KSlyZXR1cm4gdDtpZihlKXtpZihZKGUsdCkpcmV0dXJuIEsoZSx0KX1lbHNlIGU9bmV3IFY7dmFyIHIsbixpLGEsbCx1LGMsZixkLHksbT1nKHQpLGs9ITE7c3dpdGNoKG0pe2Nhc2UiQXJyYXkiOmk9W10saz0hMDticmVhaztjYXNlIk9iamVjdCI6aT17fSxrPSEwO2JyZWFrO2Nhc2UiTWFwIjppPW5ldyBWLGs9ITA7YnJlYWs7Y2FzZSJTZXQiOmk9bmV3IHosaz0hMDticmVhaztjYXNlIlJlZ0V4cCI6aT1uZXcgUmVnRXhwKHQuc291cmNlLFModCkpO2JyZWFrO2Nhc2UiRXJyb3IiOnN3aXRjaChuPXQubmFtZSl7Y2FzZSJBZ2dyZWdhdGVFcnJvciI6aT1zKCJBZ2dyZWdhdGVFcnJvciIpKFtdKTticmVhaztjYXNlIkV2YWxFcnJvciI6aT1SKCk7YnJlYWs7Y2FzZSJSYW5nZUVycm9yIjppPUkoKTticmVhaztjYXNlIlJlZmVyZW5jZUVycm9yIjppPWooKTticmVhaztjYXNlIlN5bnRheEVycm9yIjppPUwoKTticmVhaztjYXNlIlR5cGVFcnJvciI6aT1EKCk7YnJlYWs7Y2FzZSJVUklFcnJvciI6aT1OKCk7YnJlYWs7Y2FzZSJDb21waWxlRXJyb3IiOmk9RygpO2JyZWFrO2Nhc2UiTGlua0Vycm9yIjppPUIoKTticmVhaztjYXNlIlJ1bnRpbWVFcnJvciI6aT1xKCk7YnJlYWs7ZGVmYXVsdDppPU0oKX1rPSEwO2JyZWFrO2Nhc2UiRE9NRXhjZXB0aW9uIjppPW5ldyBIKHQubWVzc2FnZSx0Lm5hbWUpLGs9ITA7YnJlYWs7Y2FzZSJEYXRhVmlldyI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJCaWdJbnQ2NEFycmF5IjpjYXNlIkJpZ1VpbnQ2NEFycmF5IjpyPW9bbV0scChyKXx8cHQobSksaT1uZXcgcih2dCh0LmJ1ZmZlcixlKSx0LmJ5dGVPZmZzZXQsIkRhdGFWaWV3Ij09PW0/dC5ieXRlTGVuZ3RoOnQubGVuZ3RoKTticmVhaztjYXNlIkRPTVF1YWQiOnRyeXtpPW5ldyBET01RdWFkKHZ0KHQucDEsZSksdnQodC5wMixlKSx2dCh0LnAzLGUpLHZ0KHQucDQsZSkpfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7Y2FzZSJGaWxlTGlzdCI6aWYoYT1mdW5jdGlvbigpe3ZhciB0O3RyeXt0PW5ldyBvLkRhdGFUcmFuc2Zlcn1jYXRjaChlKXt0cnl7dD1uZXcgby5DbGlwYm9hcmRFdmVudCgiIikuY2xpcGJvYXJkRGF0YX1jYXRjaCh0KXt9fXJldHVybiB0JiZ0Lml0ZW1zJiZ0LmZpbGVzP3Q6bnVsbH0oKSl7Zm9yKGw9MCx1PUEodCk7bDx1O2wrKylhLml0ZW1zLmFkZCh2dCh0W2xdLGUpKTtpPWEuZmlsZXN9ZWxzZSBmdD9pPWZ0KHQpOnB0KG0pO2JyZWFrO2Nhc2UiSW1hZ2VEYXRhIjp0cnl7aT1uZXcgSW1hZ2VEYXRhKHZ0KHQuZGF0YSxlKSx0LndpZHRoLHQuaGVpZ2h0LHtjb2xvclNwYWNlOnQuY29sb3JTcGFjZX0pfWNhdGNoKGUpe2Z0P2k9ZnQodCk6cHQobSl9YnJlYWs7ZGVmYXVsdDppZihmdClpPWZ0KHQpO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UiQmlnSW50IjppPU8odC52YWx1ZU9mKCkpO2JyZWFrO2Nhc2UiQm9vbGVhbiI6aT1PKHR0KHQpKTticmVhaztjYXNlIk51bWJlciI6aT1PKGV0KHQpKTticmVhaztjYXNlIlN0cmluZyI6aT1PKHJ0KHQpKTticmVhaztjYXNlIkRhdGUiOmk9bmV3IEYobnQodCkpO2JyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOihyPW8uRGF0YVZpZXcpfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZXx8cHQobSk7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlKWk9dC5zbGljZSgwKTtlbHNlIGZvcih1PXQuYnl0ZUxlbmd0aCxpPW5ldyBBcnJheUJ1ZmZlcih1KSxkPW5ldyByKHQpLHk9bmV3IHIoaSksbD0wO2w8dTtsKyspeS5zZXRVaW50OChsLGQuZ2V0VWludDgobCkpfWNhdGNoKHQpe3Rocm93IG5ldyBIKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIsYXQpfWJyZWFrO2Nhc2UiU2hhcmVkQXJyYXlCdWZmZXIiOmk9dDticmVhaztjYXNlIkJsb2IiOnRyeXtpPXQuc2xpY2UoMCx0LnNpemUsdC50eXBlKX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTVBvaW50IjpjYXNlIkRPTVBvaW50UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21Qb2ludD9yLmZyb21Qb2ludCh0KTpuZXcgcih0LngsdC55LHQueix0LncpfWNhdGNoKHQpe3B0KG0pfWJyZWFrO2Nhc2UiRE9NUmVjdCI6Y2FzZSJET01SZWN0UmVhZE9ubHkiOnI9b1ttXTt0cnl7aT1yLmZyb21SZWN0P3IuZnJvbVJlY3QodCk6bmV3IHIodC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkRPTU1hdHJpeCI6Y2FzZSJET01NYXRyaXhSZWFkT25seSI6cj1vW21dO3RyeXtpPXIuZnJvbU1hdHJpeD9yLmZyb21NYXRyaXgodCk6bmV3IHIodCl9Y2F0Y2godCl7cHQobSl9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6aCh0LmNsb25lKXx8cHQobSk7dHJ5e2k9dC5jbG9uZSgpfWNhdGNoKHQpe2R0KG0pfWJyZWFrO2Nhc2UiRmlsZSI6dHJ5e2k9bmV3IEZpbGUoW3RdLHQubmFtZSx0KX1jYXRjaCh0KXtwdChtKX1icmVhaztjYXNlIkNyb3BUYXJnZXQiOmNhc2UiQ3J5cHRvS2V5IjpjYXNlIkZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUZpbGVIYW5kbGUiOmNhc2UiRmlsZVN5c3RlbUhhbmRsZSI6Y2FzZSJHUFVDb21waWxhdGlvbkluZm8iOmNhc2UiR1BVQ29tcGlsYXRpb25NZXNzYWdlIjpjYXNlIkltYWdlQml0bWFwIjpjYXNlIlJUQ0NlcnRpZmljYXRlIjpjYXNlIldlYkFzc2VtYmx5Lk1vZHVsZSI6cHQobSk7ZGVmYXVsdDpkdChtKX19aWYoSihlLHQsaSksaylzd2l0Y2gobSl7Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmZvcihjPSQodCksbD0wLHU9QShjKTtsPHU7bCsrKWY9Y1tsXSxfKGksZix2dCh0W2ZdLGUpKTticmVhaztjYXNlIk1hcCI6dC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe0ooaSx2dChyLGUpLHZ0KHQsZSkpfSkpO2JyZWFrO2Nhc2UiU2V0Ijp0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1EoaSx2dCh0LGUpKX0pKTticmVhaztjYXNlIkVycm9yIjp3KGksIm1lc3NhZ2UiLHZ0KHQubWVzc2FnZSxlKSksYih0LCJjYXVzZSIpJiZ3KGksImNhdXNlIix2dCh0LmNhdXNlLGUpKSwiQWdncmVnYXRlRXJyb3IiPT1uJiYoaS5lcnJvcnM9dnQodC5lcnJvcnMsZSkpO2Nhc2UiRE9NRXhjZXB0aW9uIjp4JiZ3KGksInN0YWNrIix2dCh0LnN0YWNrLGUpKX1yZXR1cm4gaX0seXQ9dXQmJiF1KChmdW5jdGlvbigpe2lmKFQmJkU+OTJ8fEMmJkU+OTR8fFAmJkU+OTcpcmV0dXJuITE7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDgpLGU9dXQodCx7dHJhbnNmZXI6W3RdfSk7cmV0dXJuIDAhPXQuYnl0ZUxlbmd0aHx8OCE9ZS5ieXRlTGVuZ3RofSkpO2Eoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLHNoYW06IXl0LGZvcmNlZDpjdH0se3N0cnVjdHVyZWRDbG9uZTpmdW5jdGlvbih0KXt2YXIgZSxyPWsoYXJndW1lbnRzLmxlbmd0aCwxKT4xJiYhZChhcmd1bWVudHNbMV0pP20oYXJndW1lbnRzWzFdKTp2b2lkIDAsbj1yP3IudHJhbnNmZXI6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1uJiZmdW5jdGlvbih0LGUpe2lmKCFwKHQpKXRocm93IEQoIlRyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UiKTt2YXIgcj1bXTt5KHQsKGZ1bmN0aW9uKHQpe1oocixtKHQpKX0pKTt2YXIgbixpLGEscyxsLHUsYz0wLGQ9QShyKTtpZih5dClmb3Iocz11dChyLHt0cmFuc2ZlcjpyfSk7YzxkOylKKGUscltjXSxzW2MrK10pO2Vsc2UgZm9yKDtjPGQ7KXtpZihuPXJbYysrXSxZKGUsbikpdGhyb3cgbmV3IEgoIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGUiLGF0KTtzd2l0Y2goaT1nKG4pKXtjYXNlIkltYWdlQml0bWFwIjphPW8uT2Zmc2NyZWVuQ2FudmFzLGYoYSl8fHB0KGksb3QpO3RyeXsodT1uZXcgYShuLndpZHRoLG4uaGVpZ2h0KSkuZ2V0Q29udGV4dCgiYml0bWFwcmVuZGVyZXIiKS50cmFuc2ZlckZyb21JbWFnZUJpdG1hcChuKSxsPXUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXVkaW9EYXRhIjpjYXNlIlZpZGVvRnJhbWUiOmgobi5jbG9uZSkmJmgobi5jbG9zZSl8fHB0KGksb3QpO3RyeXtsPW4uY2xvbmUoKSxuLmNsb3NlKCl9Y2F0Y2godCl7fWJyZWFrO2Nhc2UiQXJyYXlCdWZmZXIiOmNhc2UiTWVkaWFTb3VyY2VIYW5kbGUiOmNhc2UiTWVzc2FnZVBvcnQiOmNhc2UiT2Zmc2NyZWVuQ2FudmFzIjpjYXNlIlJlYWRhYmxlU3RyZWFtIjpjYXNlIlRyYW5zZm9ybVN0cmVhbSI6Y2FzZSJXcml0YWJsZVN0cmVhbSI6cHQoaSxvdCl9aWYodm9pZCAwPT09bCl0aHJvdyBuZXcgSCgiVGhpcyBvYmplY3QgY2Fubm90IGJlIHRyYW5zZmVycmVkOiAiK2ksYXQpO0ooZSxuLGwpfX0obixlPW5ldyBWKSx2dCh0LGUpfX0pfSwodCxlLHIpPT57dmFyIG49cigxNyksaT1yKDEwKSxhPXIoMjQpLG89cig4Mikscz1yKDI3KSxsPXIoNTQpLHU9ZnVuY3Rpb24oKXt9LGM9W10saD1zKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZj0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxkPW4oZi5leGVjKSxwPSFmLmV4ZWModSksdj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGgodSxjLHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX0seT1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTtzd2l0Y2gobyh0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gcHx8ISFkKGYsbCh0KSl9Y2F0Y2godCl7cmV0dXJuITB9fTt5LnNoYW09ITAsdC5leHBvcnRzPSFofHxpKChmdW5jdGlvbigpe3ZhciB0O3JldHVybiB2KHYuY2FsbCl8fCF2KE9iamVjdCl8fCF2KChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/eTp2fSx0PT57dmFyIGU9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2lmKHQ8cil0aHJvdyBlKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiB0fX0sKHQsZSxyKT0+e3ZhciBuPXIoMTEpLGk9cig0MiksYT1yKDI4KSxvPXIoMTI3KSxzPVJlZ0V4cC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBzfHxpKHQsImZsYWdzIil8fCFhKHMsdCk/ZTpuKG8sdCl9fSwodCxlLHIpPT57dmFyIG49cig1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LCh0LGUscik9Pnt2YXIgbj1yKDEwKSxpPXIoMTQpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgdD1FcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIHQpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInN0YWNrIixpKDEsNykpLDchPT10LnN0YWNrKX0pKX0sKHQsZSxyKT0+e3ZhciBuPXIoMTMwKSxpPXIoMTMxKTt0LmV4cG9ydHM9IW4mJiFpJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sdD0+e3QuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwodCxlLHIpPT57dmFyIG49cigxOCksaT1yKDcpO3QuZXhwb3J0cz0icHJvY2VzcyI9PW4oaS5wcm9jZXNzKX0sKHQsZSxyKT0+e3ZhciBuPXIoNyk7dC5leHBvcnRzPW59LChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGV4cG9ydHMuYnVpbGQ9ZXhwb3J0cy5SZW5kZXJUYXNrPWV4cG9ydHMuUERGV29ya2VyVXRpbD1leHBvcnRzLlBERldvcmtlcj1leHBvcnRzLlBERlBhZ2VQcm94eT1leHBvcnRzLlBERkRvY3VtZW50UHJveHk9ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPWV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWV4cG9ydHMuTG9vcGJhY2tQb3J0PWV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwLGV4cG9ydHMuZ2V0RG9jdW1lbnQ9Z2V0RG9jdW1lbnQsZXhwb3J0cy5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeT1zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSxleHBvcnRzLnZlcnNpb249dm9pZCAwO3ZhciBfdXRpbD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLF9hbm5vdGF0aW9uX3N0b3JhZ2U9X193X3BkZmpzX3JlcXVpcmVfXygxMzQpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxfZm9udF9sb2FkZXI9X193X3BkZmpzX3JlcXVpcmVfXygxNDApLF9jYW52YXM9X193X3BkZmpzX3JlcXVpcmVfXygxNDEpLF93b3JrZXJfb3B0aW9ucz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygzKSxfbWVzc2FnZV9oYW5kbGVyPV9fd19wZGZqc19yZXF1aXJlX18oMTQ1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNDYpLF9vcHRpb25hbF9jb250ZW50X2NvbmZpZz1fX3dfcGRmanNfcmVxdWlyZV9fKDE0NyksX3RyYW5zcG9ydF9zdHJlYW09X193X3BkZmpzX3JlcXVpcmVfXygxNDgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE0OSk7ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHQsZSl7X2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheSh0KXtyZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5KHQpfHxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCl8fF9ub25JdGVyYWJsZVNwcmVhZCgpfWZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBfYXJyYXlMaWtlVG9BcnJheSh0KX1mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCl7X3JlZ2VuZXJhdG9yUnVudGltZT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgdD17fSxlPU9iamVjdC5wcm90b3R5cGUscj1lLmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbih0LGUscil7dFtlXT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e2woe30sIiIpfWNhdGNoKHQpe2w9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXJ9fWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIGE9ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBmP2U6ZixvPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLHM9bmV3IHgoaXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp3KHQscixzKX0pLG99ZnVuY3Rpb24gYyh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBwKCl7fXZhciB2PXt9O2wodixhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShFKFtdKSkpO20mJm0hPT1lJiZyLmNhbGwobSxhKSYmKHY9bSk7dmFyIGc9cC5wcm90b3R5cGU9Zi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiBiKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bCh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBfKHQsZSl7ZnVuY3Rpb24gaShuLGEsbyxzKXt2YXIgbD1jKHRbbl0sdCxhKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgdT1sLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1fdHlwZW9mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP2UucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe2koIm5leHQiLHQsbyxzKX0pLChmdW5jdGlvbih0KXtpKCJ0aHJvdyIsdCxvLHMpfSkpOmUucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsbyh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gaSgidGhyb3ciLHQsbyxzKX0pKX1zKGwuYXJnKX12YXIgYTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbil7aSh0LHIsZSxuKX0pKX1yZXR1cm4gYT1hP2EudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihpLGEpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9aSxyLmFyZz1hOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9QShvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGw9Yyh0LGUscik7aWYoIm5vcm1hbCI9PT1sLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsbC5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpsLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWwudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5tZXRob2Qsbj10Lml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIGUuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmdC5pdGVyYXRvci5yZXR1cm4mJihlLm1ldGhvZD0icmV0dXJuIixlLmFyZz12b2lkIDAsQSh0LGUpLCJ0aHJvdyI9PT1lLm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBpPWMobix0Lml0ZXJhdG9yLGUuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiBlLm1ldGhvZD0idGhyb3ciLGUuYXJnPWkuYXJnLGUuZGVsZWdhdGU9bnVsbCxoO3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8oZVt0LnJlc3VsdE5hbWVdPWEudmFsdWUsZS5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PWUubWV0aG9kJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksZS5kZWxlZ2F0ZT1udWxsLGgpOmE6KGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxlLmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiB4KHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKHQpe2lmKHQpe3ZhciBlPXRbYV07aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiBlKCl7Zm9yKDsrK248dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG4pKXJldHVybiBlLnZhbHVlPXRbbl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9dm9pZCAwLGUuZG9uZT0hMCxlfTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlB9fWZ1bmN0aW9uIFAoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLG4ocCwiY29uc3RydWN0b3IiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMH0pLGQuZGlzcGxheU5hbWU9bChwLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1kfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxwKToodC5fX3Byb3RvX189cCxsKHQscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxiKF8ucHJvdG90eXBlKSxsKF8ucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPV8sdC5hc3luYz1mdW5jdGlvbihlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPVByb21pc2UpO3ZhciBvPW5ldyBfKHUoZSxyLG4saSksYSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pKX0sYihnKSxsKGcscywiR2VuZXJhdG9yIiksbChnLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbChnLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gdC52YWx1ZT1uLHQuZG9uZT0hMSx0fXJldHVybiB0LmRvbmU9ITAsdH19LHQudmFsdWVzPUUseC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOngscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChTKSwhdClmb3IodmFyIGUgaW4gdGhpcykidCI9PT1lLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgZT10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9dCxlLm5leHQ9cixuJiYoZS5tZXRob2Q9Im5leHQiLGUuYXJnPXZvaWQgMCksISFufWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxvPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksbD1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBuKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG4oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dO2lmKGkudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChpLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxpLmZpbmFsbHlMb2Mpe3ZhciBhPWk7YnJlYWt9fWEmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZhLnRyeUxvYzw9ZSYmZTw9YS5maW5hbGx5TG9jJiYoYT1udWxsKTt2YXIgbz1hP2EuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxhPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWEuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLGh9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO1Mocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sdH1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2sodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsX3RvUHJvcGVydHlLZXkobi5rZXkpLG4pfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3ModCxlLHIpe3JldHVybiBlJiZfZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxlKSxyJiZfZGVmaW5lUHJvcGVydGllcyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCl7dmFyIGU9X3RvUHJpbWl0aXZlKHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09X3R5cGVvZihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBfdG9QcmltaXRpdmUodCxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09X3R5cGVvZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModCxlLHIpe19jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHQsZSxyKXtyZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQsX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsZSl7cmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldCh0LF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IodCxlLCJnZXQiKSl9ZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHQsZSxyLG4pe3JldHVybiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3ModCxlKSxfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3Iociwic2V0IiksX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHQscixuKSxufWZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldCh0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19ZnVuY3Rpb24gX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LGUscil7cmV0dXJuIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2Vzcyh0LGUpLF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0ZpZWxkRGVzY3JpcHRvcihyLCJnZXQiKSxfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxyKX1mdW5jdGlvbiBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IodCxlKXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2UrIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uIil9ZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX1mdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JHZXQodCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfWZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcCh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKHQpe2FzeW5jR2VuZXJhdG9yU3RlcChhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YXN5bmNHZW5lcmF0b3JTdGVwKGEsbixpLG8scywidGhyb3ciLHQpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkodCxlKXtyZXR1cm4gX2FycmF5V2l0aEhvbGVzKHQpfHxfaXRlcmFibGVUb0FycmF5TGltaXQodCxlKXx8X3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHQsZSl8fF9ub25JdGVyYWJsZVJlc3QoKX1mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/X2FycmF5TGlrZVRvQXJyYXkodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXModCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH1mdW5jdGlvbiBfdHlwZW9mKHQpe3JldHVybiBfdHlwZW9mPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxfdHlwZW9mKHQpfXZhciBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMCxEZWZhdWx0Q2FudmFzRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DYW52YXNGYWN0b3J5O2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk7dmFyIERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7dmFyIERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxjcmVhdGVQREZOZXR3b3JrU3RyZWFtO2lmKGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSxfaXNfbm9kZS5pc05vZGVKUyl7dmFyIF9yZXF1aXJlPV9fd19wZGZqc19yZXF1aXJlX18oMTUwKSxOb2RlQ2FudmFzRmFjdG9yeT1fcmVxdWlyZS5Ob2RlQ2FudmFzRmFjdG9yeSxOb2RlQ01hcFJlYWRlckZhY3Rvcnk9X3JlcXVpcmUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5LE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1fcmVxdWlyZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1EZWZhdWx0Q2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeSxleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9Tm9kZUNNYXBSZWFkZXJGYWN0b3J5LGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9ZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkodCl7Y3JlYXRlUERGTmV0d29ya1N0cmVhbT10fWZ1bmN0aW9uIGdldERvY3VtZW50KHQpe3ZhciBlLHI9bmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2s7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgVVJMKWU9e3VybDp0fTtlbHNlIGlmKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpKWU9e2RhdGE6dH07ZWxzZSBpZih0IGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KWU9e3JhbmdlOnR9O2Vsc2V7aWYoIm9iamVjdCIhPT1fdHlwZW9mKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBUeXBlZEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LiIpO2lmKCF0LnVybCYmIXQuZGF0YSYmIXQucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybCIpO2U9dH12YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bnVsbCxhPW51bGw7Zm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107c3dpdGNoKG8pe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7bltvXT1uZXcgVVJMKHMsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKCdDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIicuY29uY2F0KHQsJyIuJykpfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBzfHxzIGluc3RhbmNlb2YgVVJMKXtuW29dPXMudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjppPXM7Y29udGludWU7Y2FzZSJ3b3JrZXIiOmE9cztjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmcyBpbnN0YW5jZW9mIEJ1ZmZlciluW29dPW5ldyBVaW50OEFycmF5KHMpO2Vsc2V7aWYocyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBzKW5bb109KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7ZWxzZSBpZigib2JqZWN0IiE9PV90eXBlb2Yocyl8fG51bGw9PT1zfHxpc05hTihzLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShzKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW29dPW5ldyBVaW50OEFycmF5KHMpfWVsc2UgbltvXT1uZXcgVWludDhBcnJheShzKX1jb250aW51ZX1uW29dPXN9aWYobi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnksbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1uLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnksbi5pZ25vcmVFcnJvcnM9ITAhPT1uLnN0b3BBdEVycm9ycyxuLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1uLmZvbnRFeHRyYVByb3BlcnRpZXMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1ZyxuLmVuYWJsZVhmYT0hMD09PW4uZW5hYmxlWGZhLCghTnVtYmVyLmlzSW50ZWdlcihuLnJhbmdlQ2h1bmtTaXplKXx8bi5yYW5nZUNodW5rU2l6ZTwxKSYmKG4ucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKSwoInN0cmluZyIhPXR5cGVvZiBuLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkobi5kb2NCYXNlVXJsKSkmJihuLmRvY0Jhc2VVcmw9bnVsbCksKCFOdW1iZXIuaXNJbnRlZ2VyKG4ubWF4SW1hZ2VTaXplKXx8bi5tYXhJbWFnZVNpemU8LTEpJiYobi5tYXhJbWFnZVNpemU9LTEpLCJzdHJpbmciIT10eXBlb2Ygbi5jTWFwVXJsJiYobi5jTWFwVXJsPW51bGwpLCJzdHJpbmciIT10eXBlb2Ygbi5zdGFuZGFyZEZvbnREYXRhVXJsJiYobi5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlV29ya2VyRmV0Y2gmJihuLnVzZVdvcmtlckZldGNoPW4uQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmbi5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzRXZhbFN1cHBvcnRlZCYmKG4uaXNFdmFsU3VwcG9ydGVkPSEwKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYobi5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpLCJib29sZWFuIiE9dHlwZW9mIG4udXNlU3lzdGVtRm9udHMmJihuLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIW4uZGlzYWJsZUZvbnRGYWNlKSwib2JqZWN0Ij09PV90eXBlb2Yobi5vd25lckRvY3VtZW50KSYmbnVsbCE9PW4ub3duZXJEb2N1bWVudHx8KG4ub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVSYW5nZSYmKG4uZGlzYWJsZVJhbmdlPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVTdHJlYW0mJihuLmRpc2FibGVTdHJlYW09ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUF1dG9GZXRjaCYmKG4uZGlzYWJsZUF1dG9GZXRjaD0hMSksKDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKG4udmVyYm9zaXR5KSwhYSl7dmFyIGw9e3ZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0Ol93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnR9O2E9bC5wb3J0P1BERldvcmtlci5mcm9tUG9ydChsKTpuZXcgUERGV29ya2VyKGwpLHIuX3dvcmtlcj1hfXZhciB1PXIuZG9jSWQ7cmV0dXJuIGEucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHQ9X2ZldGNoRG9jdW1lbnQoYSxuLGksdSksZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIGU7aT9lPW5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxwcm9ncmVzc2l2ZURvbmU6bi5wcm9ncmVzc2l2ZURvbmUsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6bi5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGkpOm4uZGF0YXx8KGU9Y3JlYXRlUERGTmV0d29ya1N0cmVhbSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKSx0KGUpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdCxlXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9X3NsaWNlZFRvQXJyYXkodCwyKSxpPWVbMF0sbz1lWzFdO2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7dmFyIHM9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIodSxpLGEucG9ydCksbD1uZXcgV29ya2VyVHJhbnNwb3J0KHMscixvLG4pO3IuX3RyYW5zcG9ydD1sLHMuc2VuZCgiUmVhZHkiLG51bGwpfSkpfSkpLmNhdGNoKHIuX2NhcGFiaWxpdHkucmVqZWN0KSxyfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHQsZSxyLG4pe3JldHVybiBfZmV0Y2hEb2N1bWVudDIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9mZXRjaERvY3VtZW50Migpe3JldHVybihfZmV0Y2hEb2N1bWVudDI9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZS5kZXN0cm95ZWQpe3QubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTtjYXNlIDI6cmV0dXJuIG4mJihyLmxlbmd0aD1uLmxlbmd0aCxyLmluaXRpYWxEYXRhPW4uaW5pdGlhbERhdGEsci5wcm9ncmVzc2l2ZURvbmU9bi5wcm9ncmVzc2l2ZURvbmUsci5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1uLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSx0Lm5leHQ9NSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4yLjAiLGRhdGE6ci5kYXRhLHBhc3N3b3JkOnIucGFzc3dvcmQsZGlzYWJsZUF1dG9GZXRjaDpyLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6ci5yYW5nZUNodW5rU2l6ZSxsZW5ndGg6ci5sZW5ndGgsZG9jQmFzZVVybDpyLmRvY0Jhc2VVcmwsZW5hYmxlWGZhOnIuZW5hYmxlWGZhLGV2YWx1YXRvck9wdGlvbnM6e21heEltYWdlU2l6ZTpyLm1heEltYWdlU2l6ZSxkaXNhYmxlRm9udEZhY2U6ci5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOnIuaWdub3JlRXJyb3JzLGlzRXZhbFN1cHBvcnRlZDpyLmlzRXZhbFN1cHBvcnRlZCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGZvbnRFeHRyYVByb3BlcnRpZXM6ci5mb250RXh0cmFQcm9wZXJ0aWVzLHVzZVN5c3RlbUZvbnRzOnIudXNlU3lzdGVtRm9udHMsY01hcFVybDpyLnVzZVdvcmtlckZldGNoP3IuY01hcFVybDpudWxsLHN0YW5kYXJkRm9udERhdGFVcmw6ci51c2VXb3JrZXJGZXRjaD9yLnN0YW5kYXJkRm9udERhdGFVcmw6bnVsbH19KTtjYXNlIDU6aWYoYT10LnNlbnQsci5kYXRhJiYoci5kYXRhPW51bGwpLCFlLmRlc3Ryb3llZCl7dC5uZXh0PTk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsYSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBfb25VbnN1cHBvcnRlZEZlYXR1cmU9bmV3IFdlYWtNYXAsUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXI9bnVsbCx0aGlzLmRvY0lkPSJkIi5jb25jYXQoKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNTZXQodCx0LF9kb2NJZCwoZT1fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfZG9jSWQpLHI9ZSsrLGUpKSxyKSksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5vblBhc3N3b3JkPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJvblVuc3VwcG9ydGVkRmVhdHVyZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9vblVuc3VwcG9ydGVkRmVhdHVyZSl9LHNldDpmdW5jdGlvbih0KXsoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgb25VbnN1cHBvcnRlZEZlYXR1cmUgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHQpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOihlPV9hc3luY1RvR2VuZXJhdG9yKF9yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGU7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5kZXN0cm95ZWQ9ITAsdC5uZXh0PTMsbnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZGVzdHJveSgpO2Nhc2UgMzp0aGlzLl90cmFuc3BvcnQ9bnVsbCx0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIuZGVzdHJveSgpLHRoaXMuX3dvcmtlcj1udWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCk7ZXhwb3J0cy5QREZEb2N1bWVudExvYWRpbmdUYXNrPVBERkRvY3VtZW50TG9hZGluZ1Rhc2s7dmFyIF9kb2NJZD17d3JpdGFibGU6ITAsdmFsdWU6MH0sUERGRGF0YVJhbmdlVHJhbnNwb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmxlbmd0aD1lLHRoaXMuaW5pdGlhbERhdGE9cix0aGlzLnByb2dyZXNzaXZlRG9uZT1uLHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9aSx0aGlzLl9yYW5nZUxpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc0xpc3RlbmVycz1bXSx0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2godCl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKHQpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9yYW5nZUxpc3RlbmVycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KSgwLHIudmFsdWUpKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25EYXRhUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciBuLGk9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoci5fcHJvZ3Jlc3NMaXN0ZW5lcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOykoMCxuLnZhbHVlKSh0LGUpfWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspKDAsci52YWx1ZSkodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fSkpfX0se2tleToib25EYXRhUHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXt2YXIgZSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHQuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KSgwLGUudmFsdWUpKCl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fSkpfX0se2tleToidHJhbnNwb3J0UmVhZHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3REYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsX3V0aWwudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgUERGRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe319XSksdH0oKTtleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7dmFyIFBERkRvY3VtZW50UHJveHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksdGhpcy5fcGRmSW5mbz1lLHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToiYW5ub3RhdGlvblN0b3JhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuYW5ub3RhdGlvblN0b3JhZ2V9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXN9fSx7a2V5OiJmaW5nZXJwcmludHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50c319LHtrZXk6InN0YXRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgiVGhlIFBERkRvY3VtZW50UHJveHkgc3RhdHMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5fdHJhbnNwb3J0LnN0YXRzfX0se2tleToiaXNQdXJlWGZhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImlzUHVyZVhmYSIsISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpfX0se2tleToiYWxsWGZhSHRtbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZSh0KX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKHQpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VMYXlvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCl9fSx7a2V5OiJnZXRWaWV3ZXJQcmVmZXJlbmNlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCl9fSx7a2V5OiJnZXRPcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpfX0se2tleToiZ2V0T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKX19LHtrZXk6ImdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpfX0se2tleToiZ2V0UGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpfX0se2tleToiZ2V0TWFya0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKX19LHtrZXk6InNhdmVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNhdmVEb2N1bWVudCgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKHR8fHRoaXMuaXNQdXJlWGZhKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ1Rhc2suZGVzdHJveSgpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zfX0se2tleToibG9hZGluZ1Rhc2siLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2t9fSx7a2V5OiJnZXRGaWVsZE9iamVjdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRGaWVsZE9iamVjdHMoKX19LHtrZXk6Imhhc0pTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpfX0se2tleToiZ2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKX19XSksdH0oKTtleHBvcnRzLlBERkRvY3VtZW50UHJveHk9UERGRG9jdW1lbnRQcm94eTt2YXIgUERGUGFnZVByb3h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLHRoaXMuX3BhZ2VJbmRleD1lLHRoaXMuX3BhZ2VJbmZvPXIsdGhpcy5fb3duZXJEb2N1bWVudD1pLHRoaXMuX3RyYW5zcG9ydD1uLHRoaXMuX3N0YXRzPWE/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBQREZPYmplY3RzLHRoaXMuX2JpdG1hcHM9bmV3IFNldCx0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMSx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLHRoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExfXZhciBlO3JldHVybiBfY3JlYXRlQ2xhc3ModCxbe2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfX0se2tleToicmVmIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfX0se2tleToidXNlclVuaXQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fX0se2tleToiZ2V0Vmlld3BvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9dC5zY2FsZSxyPXQucm90YXRpb24sbj12b2lkIDA9PT1yP3RoaXMucm90YXRlOnIsaT10Lm9mZnNldFgsYT12b2lkIDA9PT1pPzA6aSxvPXQub2Zmc2V0WSxzPXZvaWQgMD09PW8/MDpvLGw9dC5kb250RmxpcCx1PXZvaWQgMCE9PWwmJmw7cmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOmUscm90YXRpb246bixvZmZzZXRYOmEsb2Zmc2V0WTpzLGRvbnRGbGlwOnV9KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmludGVudCxlPXZvaWQgMD09PXQ/ImRpc3BsYXkiOnQscj10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGUpO3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5fcGFnZUluZGV4LHIucmVuZGVyaW5nSW50ZW50KX19LHtrZXk6ImdldEpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VKU0FjdGlvbnModGhpcy5fcGFnZUluZGV4KX19LHtrZXk6ImlzUHVyZVhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJpc1B1cmVYZmEiLCEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKX19LHtrZXk6ImdldFhmYSIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZTtyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIiwobnVsbD09PShlPXRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSl8fG51bGwpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMsaT10LmNhbnZhc0NvbnRleHQsYT10LnZpZXdwb3J0LG89dC5pbnRlbnQscz12b2lkIDA9PT1vPyJkaXNwbGF5IjpvLGw9dC5hbm5vdGF0aW9uTW9kZSx1PXZvaWQgMD09PWw/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmwsYz10LnRyYW5zZm9ybSxoPXZvaWQgMD09PWM/bnVsbDpjLGY9dC5jYW52YXNGYWN0b3J5LGQ9dm9pZCAwPT09Zj9udWxsOmYscD10LmJhY2tncm91bmQsdj12b2lkIDA9PT1wP251bGw6cCx5PXQub3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSxtPXZvaWQgMD09PXk/bnVsbDp5LGc9dC5hbm5vdGF0aW9uQ2FudmFzTWFwLGI9dm9pZCAwPT09Zz9udWxsOmcsXz10LnBhZ2VDb2xvcnMsdz12b2lkIDA9PT1fP251bGw6XyxBPXQucHJpbnRBbm5vdGF0aW9uU3RvcmFnZSxrPXZvaWQgMD09PUE/bnVsbDpBO251bGw9PT0oZT10aGlzLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiT3ZlcmFsbCIpO3ZhciBTPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyx1LGspO3RoaXMucGVuZGluZ0NsZWFudXA9ITEsbXx8KG09dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTt2YXIgeD10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KFMuY2FjaGVLZXkpO3h8fCh4PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5faW50ZW50U3RhdGVzLnNldChTLmNhY2hlS2V5LHgpKSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQmJihjbGVhclRpbWVvdXQoeC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSx4LnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCk7dmFyIEUsUD1kfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLFQ9ISEoUy5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7eC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5fHwoeC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShFPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09RXx8RS50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KFMpKTt2YXIgQz1mdW5jdGlvbih0KXt2YXIgZSxyO3gucmVuZGVyVGFza3MuZGVsZXRlKE8pLChuLmNsZWFudXBBZnRlclJlbmRlcnx8VCkmJihuLnBlbmRpbmdDbGVhbnVwPSEwKSxuLl90cnlDbGVhbnVwKCksdD8oTy5jYXBhYmlsaXR5LnJlamVjdCh0KSxuLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6eCxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSkpOk8uY2FwYWJpbGl0eS5yZXNvbHZlKCksbnVsbD09PShlPW4uX3N0YXRzKXx8dm9pZCAwPT09ZXx8ZS50aW1lRW5kKCJSZW5kZXJpbmciKSxudWxsPT09KHI9bi5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIk92ZXJhbGwiKX0sTz1uZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDppLHZpZXdwb3J0OmEsdHJhbnNmb3JtOmgsYmFja2dyb3VuZDp2fSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmIsb3BlcmF0b3JMaXN0Ongub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpQLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohVCxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6d30pOygocj14KS5yZW5kZXJUYXNrc3x8KHIucmVuZGVyVGFza3M9bmV3IFNldCkpLmFkZChPKTt2YXIgRj1PLnRhc2s7cmV0dXJuIFByb21pc2UuYWxsKFt4LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxtXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIGUscj1fc2xpY2VkVG9BcnJheSh0LDIpLGk9clswXSxhPXJbMV07bi5wZW5kaW5nQ2xlYW51cD9DKCk6KG51bGw9PT0oZT1uLl9zdGF0cyl8fHZvaWQgMD09PWV8fGUudGltZSgiUmVuZGVyaW5nIiksTy5pbml0aWFsaXplR3JhcGhpY3Moe3RyYW5zcGFyZW5jeTppLG9wdGlvbmFsQ29udGVudENvbmZpZzphfSksTy5vcGVyYXRvckxpc3RDaGFuZ2VkKCkpfSkpLmNhdGNoKEMpLEZ9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9bi5pbnRlbnQsYT12b2lkIDA9PT1pPyJkaXNwbGF5IjppLG89bi5hbm5vdGF0aW9uTW9kZSxzPXZvaWQgMD09PW8/X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOm8sbD1uLnByaW50QW5ub3RhdGlvblN0b3JhZ2UsdT12b2lkIDA9PT1sP251bGw6bCxjPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoYSxzLHUsITApLGg9dGhpcy5faW50ZW50U3RhdGVzLmdldChjLmNhY2hlS2V5KTtyZXR1cm4gaHx8KGg9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGMuY2FjaGVLZXksaCkpLGgub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgodD1PYmplY3QuY3JlYXRlKG51bGwpKS5vcGVyYXRvckxpc3RDaGFuZ2VkPWZ1bmN0aW9uKCl7aC5vcGVyYXRvckxpc3QubGFzdENodW5rJiYoaC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGgub3BlcmF0b3JMaXN0KSxoLnJlbmRlclRhc2tzLmRlbGV0ZSh0KSl9LGgub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksKChlPWgpLnJlbmRlclRhc2tzfHwoZS5yZW5kZXJUYXNrcz1uZXcgU2V0KSkuYWRkKHQpLGgub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH0sbnVsbD09PShyPXRoaXMuX3N0YXRzKXx8dm9pZCAwPT09cnx8ci50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGMpKSxoLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJzdHJlYW1UZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLHI9dm9pZCAwIT09ZSYmZSxuPXQuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT12b2lkIDAhPT1uJiZuO3JldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxjb21iaW5lVGV4dEl0ZW1zOiEwIT09cixpbmNsdWRlTWFya2VkQ29udGVudDohMD09PWl9LHtoaWdoV2F0ZXJNYXJrOjEwMCxzaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZih0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpfSkpO3ZhciBlPXRoaXMuc3RyZWFtVGV4dENvbnRlbnQodCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZ2V0UmVhZGVyKCksaT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiBlKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4sYT1yLnZhbHVlO3IuZG9uZT90KGkpOihPYmplY3QuYXNzaWduKGkuc3R5bGVzLGEuc3R5bGVzKSwobj1pLml0ZW1zKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KGEuaXRlbXMpKSxlKCkpfSkscil9KCl9KSl9fSx7a2V5OiJnZXRTdHJ1Y3RUcmVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITA7dmFyIHQsZT1bXSxyPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO2lmKHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTpuLHJlYXNvbjpuZXcgRXJyb3IoIlBhZ2Ugd2FzIGRlc3Ryb3llZC4iKSxmb3JjZTohMH0pLCFuLm9wTGlzdFJlYWRDYXBhYmlsaXR5KXt2YXIgaSxhPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG4ucmVuZGVyVGFza3MpO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOyl7dmFyIG89aS52YWx1ZTtlLnB1c2goby5jb21wbGV0ZWQpLG8uY2FuY2VsKCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMub2Jqcy5jbGVhcigpO3ZhciBzLGw9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXMudmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtsLmUodCl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsUHJvbWlzZS5hbGwoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cCh0KX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMucGVuZGluZ0NsZWFudXApcmV0dXJuITE7dmFyIGUscj1fY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPW4ucmVuZGVyVGFza3MsYT1uLm9wZXJhdG9yTGlzdDtpZihpLnNpemU+MHx8IWEubGFzdENodW5rKXJldHVybiExfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKSx0aGlzLm9ianMuY2xlYXIoKSx0JiZ0aGlzLl9zdGF0cyYmKHRoaXMuX3N0YXRzPW5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIpO3ZhciBvLHM9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5fYml0bWFwcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KW8udmFsdWUuY2xvc2UoKX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4gdGhpcy5fYml0bWFwcy5jbGVhcigpLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsITB9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGUpO2kmJihudWxsPT09KHI9dGhpcy5fc3RhdHMpfHx2b2lkIDA9PT1yfHxyLnRpbWVFbmQoIlBhZ2UgUmVxdWVzdCIpLG51bGw9PT0obj1pLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpfHx2b2lkIDA9PT1ufHxuLnJlc29sdmUodCkpfX0se2tleToiX3JlbmRlclBhZ2VDaHVuayIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKHQuZm5BcnJheVtyXSksZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbcl0pO2Uub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz10Lmxhc3RDaHVuayxlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cz10LnNlcGFyYXRlQW5ub3RzO3ZhciBpLGE9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZS5yZW5kZXJUYXNrcyk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXQubGFzdENodW5rJiZ0aGlzLl90cnlDbGVhbnVwKCl9fSx7a2V5OiJfcHVtcE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucmVuZGVyaW5nSW50ZW50LG49dC5jYWNoZUtleSxpPXQuYW5ub3RhdGlvblN0b3JhZ2VNYXAsYT10aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsaW50ZW50OnIsY2FjaGVLZXk6bixhbm5vdGF0aW9uU3RvcmFnZTppfSkuZ2V0UmVhZGVyKCksbz10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO28uc3RyZWFtUmVhZGVyPWEsZnVuY3Rpb24gdCgpe2EucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBuPXIudmFsdWU7ci5kb25lP28uc3RyZWFtUmVhZGVyPW51bGw6ZS5fdHJhbnNwb3J0LmRlc3Ryb3llZHx8KGUuX3JlbmRlclBhZ2VDaHVuayhuLG8pLHQoKSl9KSwoZnVuY3Rpb24odCl7aWYoby5zdHJlYW1SZWFkZXI9bnVsbCwhZS5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7aWYoby5vcGVyYXRvckxpc3Qpe28ub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaz0hMDt2YXIgcixuPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8ucmVuZGVyVGFza3MpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLm9wZXJhdG9yTGlzdENoYW5nZWQoKX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLl90cnlDbGVhbnVwKCl9aWYoby5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighby5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O28ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9KCl9fSx7a2V5OiJfYWJvcnRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmludGVudFN0YXRlLG49dC5yZWFzb24saT10LmZvcmNlLGE9dm9pZCAwIT09aSYmaTtpZihyLnN0cmVhbVJlYWRlcil7aWYoci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHIuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCksci5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGwpLCFhKXtpZihyLnJlbmRlclRhc2tzLnNpemU+MClyZXR1cm47aWYobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbil7dmFyIG89UkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO3JldHVybiBuLmV4dHJhRGVsYXk+MCYmbi5leHRyYURlbGF5PDFlMyYmKG8rPW4uZXh0cmFEZWxheSksdm9pZChyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQ9bnVsbCxlLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6cixyZWFzb246bixmb3JjZTohMH0pfSksbykpfX1pZihyLnN0cmVhbVJlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKG4ubWVzc2FnZSkpLmNhdGNoKChmdW5jdGlvbigpe30pKSxyLnN0cmVhbVJlYWRlcj1udWxsLCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKXt2YXIgcyxsPV9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuX2ludGVudFN0YXRlcyk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgdT1fc2xpY2VkVG9BcnJheShzLnZhbHVlLDIpLGM9dVswXTtpZih1WzFdPT09cil7dGhpcy5faW50ZW50U3RhdGVzLmRlbGV0ZShjKTticmVha319fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXRoaXMuY2xlYW51cCgpfX19fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzfX1dKSx0fSgpO2V4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTt2YXIgX2xpc3RlbmVycz1uZXcgV2Vha01hcCxfZGVmZXJyZWQ9bmV3IFdlYWtNYXAsTG9vcGJhY2tQb3J0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2xpc3RlbmVycyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLF9kZWZlcnJlZCx7d3JpdGFibGU6ITAsdmFsdWU6UHJvbWlzZS5yZXNvbHZlKCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj17ZGF0YTpzdHJ1Y3R1cmVkQ2xvbmUodCxlKX07X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2RlZmVycmVkKS50aGVuKChmdW5jdGlvbigpe3ZhciB0LGU9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHIsX2xpc3RlbmVycykpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmNhbGwocixuKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19KSl9fSx7a2V5OiJhZGRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLnB1c2goZSl9fSx7a2V5OiJyZW1vdmVFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9saXN0ZW5lcnMpLmluZGV4T2YoZSk7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykuc3BsaWNlKHIsMSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2xpc3RlbmVycykubGVuZ3RoPTB9fV0pLHR9KCk7ZXhwb3J0cy5Mb29wYmFja1BvcnQ9TG9vcGJhY2tQb3J0O3ZhciBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2lmKGV4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsLF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSlQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITAsUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz0iLi9wZGYud29ya2VyLmpzIjtlbHNlIGlmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/InVuZGVmaW5lZCI6X3R5cGVvZihkb2N1bWVudCkpKXt2YXIgX2RvY3VtZW50LF9kb2N1bWVudCRjdXJyZW50U2NyaSxwZGZqc0ZpbGVQYXRoPW51bGw9PT0oX2RvY3VtZW50PWRvY3VtZW50KXx8dm9pZCAwPT09X2RvY3VtZW50fHxudWxsPT09KF9kb2N1bWVudCRjdXJyZW50U2NyaT1fZG9jdW1lbnQuY3VycmVudFNjcmlwdCl8fHZvaWQgMD09PV9kb2N1bWVudCRjdXJyZW50U2NyaT92b2lkIDA6X2RvY3VtZW50JGN1cnJlbnRTY3JpLnNyYztwZGZqc0ZpbGVQYXRoJiYoUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYz1wZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcLig/Om1pblwuKT9qcykoXD8uKik/JC9pLCIud29ya2VyJDEkMiIpKX1QREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbj1mdW5jdGlvbih0LGUpe3ZhciByO3RyeXtpZighKHI9bmV3IFVSTCh0KSkub3JpZ2lufHwibnVsbCI9PT1yLm9yaWdpbilyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgbj1uZXcgVVJMKGUscik7cmV0dXJuIHIub3JpZ2luPT09bi5vcmlnaW59LFBERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXt2YXIgZT0naW1wb3J0U2NyaXB0cygiJy5jb25jYXQodCwnIik7Jyk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2VdKSl9O3ZhciBQREZXb3JrZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQREZXb3JrZXIoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT10Lm5hbWUscj12b2lkIDA9PT1lP251bGw6ZSxuPXQucG9ydCxpPXZvaWQgMD09PW4/bnVsbDpuLGE9dC52ZXJib3NpdHksbz12b2lkIDA9PT1hPygwLF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpOmE7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsUERGV29ya2VyKSxpJiZfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlcixQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXMoaSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO2lmKHRoaXMubmFtZT1yLHRoaXMuZGVzdHJveWVkPSExLHRoaXMudmVyYm9zaXR5PW8sdGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl93ZWJXb3JrZXI9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsLGkpcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLFBERldvcmtlcixfd29ya2VyUG9ydHMpLnNldChpLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KGkpO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKFBERldvcmtlcixbe2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToicG9ydCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnR9fSx7a2V5OiJtZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2VIYW5kbGVyfX0se2tleToiX2luaXRpYWxpemVGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcG9ydD10LHRoaXMuX21lc3NhZ2VIYW5kbGVyPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKCJtYWluIiwid29ya2VyIix0KSx0aGlzLl9tZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLChmdW5jdGlvbigpe30pKSx0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe3ZhciBlPVBERldvcmtlci53b3JrZXJTcmM7dHJ5e1BERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmLGUpfHwoZT1QREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIobmV3IFVSTChlLHdpbmRvdy5sb2NhdGlvbikuaHJlZikpO3ZhciByPW5ldyBXb3JrZXIoZSksbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsciksaT1mdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4uZGVzdHJveSgpLHIudGVybWluYXRlKCksdC5kZXN0cm95ZWQ/dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnQuX3NldHVwRmFrZVdvcmtlcigpfSxhPWZ1bmN0aW9uKCl7dC5fd2ViV29ya2VyfHxpKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGEpLG4ub24oInRlc3QiLChmdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZD9pKCk6ZT8odC5fbWVzc2FnZUhhbmRsZXI9bix0Ll9wb3J0PXIsdC5fd2ViV29ya2VyPXIsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pKToodC5fc2V0dXBGYWtlV29ya2VyKCksbi5kZXN0cm95KCksci50ZXJtaW5hdGUoKSl9KSksbi5vbigicmVhZHkiLChmdW5jdGlvbihlKXtpZihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixhKSx0LmRlc3Ryb3llZClpKCk7ZWxzZSB0cnl7bygpfWNhdGNoKGUpe3QuX3NldHVwRmFrZVdvcmtlcigpfX0pKTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5O24uc2VuZCgidGVzdCIsdCxbdC5idWZmZXJdKX07cmV0dXJuIHZvaWQgbygpfWNhdGNoKHQpeygwLF91dGlsLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWR8fCgoMCxfdXRpbC53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQ9ITApLFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQuZGVzdHJveWVkKXQuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtlbHNle3ZhciByPW5ldyBMb29wYmFja1BvcnQ7dC5fcG9ydD1yO3ZhciBuPSJmYWtlIi5jb25jYXQoUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyksaT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuKyJfd29ya2VyIixuLHIpO2Uuc2V0dXAoaSxyKTt2YXIgYT1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihuLG4rIl93b3JrZXIiLHIpO3QuX21lc3NhZ2VIYW5kbGVyPWEsdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKSxhLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0LnZlcmJvc2l0eX0pfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJy5jb25jYXQoZS5tZXNzYWdlLCciLicpKSl9KSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3dlYldvcmtlciYmKHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93ZWJXb3JrZXI9bnVsbCksX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChQREZXb3JrZXIsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXR8fCF0LnBvcnQpdGhyb3cgbmV3IEVycm9yKCJQREZXb3JrZXIuZnJvbVBvcnQgLSBpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUuIik7cmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcyxQREZXb3JrZXIsX3dvcmtlclBvcnRzKS5oYXModC5wb3J0KT9fY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsUERGV29ya2VyLF93b3JrZXJQb3J0cykuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX19LHtrZXk6IndvcmtlclNyYyIsZ2V0OmZ1bmN0aW9uKCl7aWYoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKXJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYobnVsbCE9PVBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMpcmV0dXJuIF9pc19ub2RlLmlzTm9kZUpTfHwoMCxfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKSgnTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyksUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYzt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfX0se2tleToiX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciIsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0O3JldHVybihudWxsPT09KHQ9Z2xvYmFsVGhpcy5wZGZqc1dvcmtlcil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuV29ya2VyTWVzc2FnZUhhbmRsZXIpfHxudWxsfWNhdGNoKHQpe3JldHVybiBudWxsfX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGdldDpmdW5jdGlvbiBnZXQoKXt2YXIgX3RoaXMxMD10aGlzLGxvYWRlcj1mdW5jdGlvbigpe3ZhciBfcmVmMTU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIF9jYWxsZWUzKCl7dmFyIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcix3b3JrZXI7cmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKXtmb3IoOzspc3dpdGNoKF9jb250ZXh0My5wcmV2PV9jb250ZXh0My5uZXh0KXtjYXNlIDA6aWYobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyPV90aGlzMTAuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlciwhbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKXtfY29udGV4dDMubmV4dD0zO2JyZWFrfXJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7Y2FzZSAzOmlmKCFfaXNfbm9kZS5pc05vZGVKU3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHJlcXVpcmUpe19jb250ZXh0My5uZXh0PTY7YnJlYWt9cmV0dXJuIHdvcmtlcj1ldmFsKCJyZXF1aXJlIikoX3RoaXMxMC53b3JrZXJTcmMpLF9jb250ZXh0My5hYnJ1cHQoInJldHVybiIsd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtjYXNlIDY6cmV0dXJuIF9jb250ZXh0My5uZXh0PTgsKDAsX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkoX3RoaXMxMC53b3JrZXJTcmMpO2Nhc2UgODpyZXR1cm4gX2NvbnRleHQzLmFicnVwdCgicmV0dXJuIix3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXIpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIF9jb250ZXh0My5zdG9wKCl9fSksX2NhbGxlZTMpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gX3JlZjE1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJfc2V0dXBGYWtlV29ya2VyR2xvYmFsIixsb2FkZXIoKSl9fV0pLFBERldvcmtlcn0oKTtleHBvcnRzLlBERldvcmtlcj1QREZXb3JrZXI7dmFyIF93b3JrZXJQb3J0cz17d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdlYWtNYXB9LF9kb2NTdGF0cz1uZXcgV2Vha01hcCxfcGFnZUNhY2hlPW5ldyBXZWFrTWFwLF9wYWdlUHJvbWlzZXM9bmV3IFdlYWtNYXAsX21ldGFkYXRhUHJvbWlzZT1uZXcgV2Vha01hcCxXb3JrZXJUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2RvY1N0YXRzLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZUNhY2hlLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfcGFnZVByb21pc2VzLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcyxfbWV0YWRhdGFQcm9taXNlLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5tZXNzYWdlSGFuZGxlcj1lLHRoaXMubG9hZGluZ1Rhc2s9cix0aGlzLmNvbW1vbk9ianM9bmV3IFBERk9iamVjdHMsdGhpcy5mb250TG9hZGVyPW5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7b25VbnN1cHBvcnRlZEZlYXR1cmU6dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxvd25lckRvY3VtZW50Omkub3duZXJEb2N1bWVudCxzdHlsZUVsZW1lbnQ6aS5zdHlsZUVsZW1lbnR9KSx0aGlzLl9wYXJhbXM9aSxpLnVzZVdvcmtlckZldGNofHwodGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgaS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDppLmNNYXBVcmwsaXNDb21wcmVzc2VkOmkuY01hcFBhY2tlZH0pLHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9bmV3IGkuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkoe2Jhc2VVcmw6aS5zdGFuZGFyZEZvbnREYXRhVXJsfSkpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX12YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImFubm90YXRpb25TdG9yYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9kb2NTdGF0cyl9fSx7a2V5OiJnZXRSZW5kZXJpbmdJbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10saT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksYT1udWxsO3N3aXRjaCh0KXtjYXNlImFueSI6aT1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWTticmVhaztjYXNlImRpc3BsYXkiOmJyZWFrO2Nhc2UicHJpbnQiOmk9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDticmVhaztkZWZhdWx0OigwLF91dGlsLndhcm4pKCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogIi5jb25jYXQodCkpfXN3aXRjaChlKXtjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6aSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFO2JyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFOmJyZWFrO2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOmkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVM7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRTphPSgoaSs9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFKSZfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UJiZyIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlP3I6dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSkuc2VyaWFsaXphYmxlO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICIuY29uY2F0KGUpKX1yZXR1cm4gbiYmKGkrPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKSx7cmVuZGVyaW5nSW50ZW50OmksY2FjaGVLZXk6IiIuY29uY2F0KGksIl8iKS5jb25jYXQoX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKGEpKSxhbm5vdGF0aW9uU3RvcmFnZU1hcDphfX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkmJnRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCBkdXJpbmcgb25QYXNzd29yZCBjYWxsYmFjayIpKTt2YXIgZSxyPVtdLG49X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtyLnB1c2goaS5fZGVzdHJveSgpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfcGFnZVByb21pc2VzKS5jbGVhcigpLHRoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO3ZhciBhPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiByLnB1c2goYSksUHJvbWlzZS5hbGwocikudGhlbigoZnVuY3Rpb24oKXt0LmNvbW1vbk9ianMuY2xlYXIoKSx0LmZvbnRMb2FkZXIuY2xlYXIoKSxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfbWV0YWRhdGFQcm9taXNlLG51bGwpLHQuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbCx0Ll9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGwsdC5fbmV0d29ya1N0cmVhbSYmdC5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSksdC5tZXNzYWdlSGFuZGxlciYmKHQubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLHQubWVzc2FnZUhhbmRsZXI9bnVsbCksdC5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5tZXNzYWdlSGFuZGxlcixyPXRoaXMubG9hZGluZ1Rhc2s7ZS5vbigiR2V0UmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIiksdC5fZnVsbFJlYWRlcj10Ll9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKSx0Ll9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dC5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH19LHIub25QdWxsPWZ1bmN0aW9uKCl7dC5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKSxyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoZSksMSxbZV0pKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ci5lcnJvcih0KX0pKX0sci5vbkNhbmNlbD1mdW5jdGlvbihlKXt0Ll9mdWxsUmVhZGVyLmNhbmNlbChlKSxyLnJlYWR5LmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5kZXN0cm95ZWQpdGhyb3cgZX0pKX19KSksZS5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwoZnVuY3Rpb24oZSl7dmFyIG49KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10Ll9mdWxsUmVhZGVyO3JldHVybiBpLmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe3ZhciBlO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJmkuaXNSYW5nZVN1cHBvcnRlZHx8KHQuX2xhc3RQcm9ncmVzcyYmKG51bGw9PT0oZT1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwocix0Ll9sYXN0UHJvZ3Jlc3MpKSxpLm9uUHJvZ3Jlc3M9ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXIub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbChyLHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDppLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6aS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6aS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSkpLGUub24oIkdldFJhbmdlUmVhZGVyIiwoZnVuY3Rpb24oZSxyKXsoMCxfdXRpbC5hc3NlcnQpKHQuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt2YXIgbj10Ll9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO24/KHIub25QdWxsPWZ1bmN0aW9uKCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTt0LmRvbmU/ci5jbG9zZSgpOigoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKGUpLCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpLHIuZW5xdWV1ZShuZXcgVWludDhBcnJheShlKSwxLFtlXSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVycm9yKHQpfSkpfSxyLm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe24uY2FuY2VsKGUpLHIucmVhZHkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCF0LmRlc3Ryb3llZCl0aHJvdyBlfSkpfSk6ci5jbG9zZSgpfSkpLGUub24oIkdldERvYyIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUucGRmSW5mbzt0Ll9udW1QYWdlcz1uLm51bVBhZ2VzLHQuX2h0bWxGb3JYZmE9bi5odG1sRm9yWGZhLGRlbGV0ZSBuLmh0bWxGb3JYZmEsci5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KG4sdCkpfSkpLGUub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe3ZhciBlO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOmU9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjplPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6ZT1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfXIuX2NhcGFiaWxpdHkucmVqZWN0KGUpfSkpLGUub24oIlBhc3N3b3JkUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe2lmKHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyLm9uUGFzc3dvcmQpdHJ5e3Iub25QYXNzd29yZCgoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yP3QuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZSk6dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOmV9KX0pLGUuY29kZSl9Y2F0Y2goZSl7dC5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChlKX1lbHNlIHQuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpKTtyZXR1cm4gdC5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2V9KSksZS5vbigiRGF0YUxvYWRlZCIsKGZ1bmN0aW9uKGUpe3ZhciBuO251bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSksZS5vbigiU3RhcnRSZW5kZXJQYWdlIiwoZnVuY3Rpb24oZSl7dC5kZXN0cm95ZWR8fF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0LF9wYWdlQ2FjaGUpLmdldChlLnBhZ2VJbmRleCkuX3N0YXJ0UmVuZGVyUGFnZShlLnRyYW5zcGFyZW5jeSxlLmNhY2hlS2V5KX0pKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbihyKXt2YXIgbixpPV9zbGljZWRUb0FycmF5KHIsMyksYT1pWzBdLG89aVsxXSxzPWlbMl07aWYoIXQuZGVzdHJveWVkJiYhdC5jb21tb25PYmpzLmhhcyhhKSlzd2l0Y2gobyl7Y2FzZSJGb250Ijp2YXIgbD10Ll9wYXJhbXM7aWYoImVycm9yImluIHMpe3ZhciB1PXMuZXJyb3I7KDAsX3V0aWwud2FybikoIkVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICIuY29uY2F0KHUpKSx0LmNvbW1vbk9ianMucmVzb2x2ZShhLHUpO2JyZWFrfXZhciBjPW51bGw7bC5wZGZCdWcmJm51bGwhPT0obj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpJiZ2b2lkIDAhPT1uJiZuLmVuYWJsZWQmJihjPXtyZWdpc3RlckZvbnQ6ZnVuY3Rpb24odCxlKXtnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKHQsZSl9fSk7dmFyIGg9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChzLHtpc0V2YWxTdXBwb3J0ZWQ6bC5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOmwuZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpsLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0Ll9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHQpLGZvbnRSZWdpc3RyeTpjfSk7dC5mb250TG9hZGVyLmJpbmQoaCkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlbmRXaXRoUHJvbWlzZSgiRm9udEZhbGxiYWNrIix7aWQ6YX0pfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7IWwuZm9udEV4dHJhUHJvcGVydGllcyYmaC5kYXRhJiYoaC5kYXRhPW51bGwpLHQuY29tbW9uT2Jqcy5yZXNvbHZlKGEsaCl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6Y2FzZSJJbWFnZSI6dC5jb21tb25PYmpzLnJlc29sdmUoYSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19KSksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7dmFyIHI9X3NsaWNlZFRvQXJyYXkoZSw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxvPXJbM107aWYoIXQuZGVzdHJveWVkKXt2YXIgcz1fY2xhc3NQcml2YXRlRmllbGRHZXQodCxfcGFnZUNhY2hlKS5nZXQoaSk7aWYoIXMub2Jqcy5oYXMobikpc3dpdGNoKGEpe2Nhc2UiSW1hZ2UiOmlmKHMub2Jqcy5yZXNvbHZlKG4sbyksbyl7dmFyIGw7aWYoby5iaXRtYXApe3ZhciB1PW8uYml0bWFwO2w9by53aWR0aCpvLmhlaWdodCo0LHMuX2JpdG1hcHMuYWRkKHUpfWVsc2V7dmFyIGM7bD0obnVsbD09PShjPW8uZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMubGVuZ3RoKXx8MH1sPjhlNiYmKHMuY2xlYW51cEFmdGVyUmVuZGVyPSEwKX1icmVhaztjYXNlIlBhdHRlcm4iOnMub2Jqcy5yZXNvbHZlKG4sbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkdvdCB1bmtub3duIG9iamVjdCB0eXBlICIuY29uY2F0KGEpKX19fSkpLGUub24oIkRvY1Byb2dyZXNzIiwoZnVuY3Rpb24oZSl7dmFyIG47dC5kZXN0cm95ZWR8fG51bGw9PT0obj1yLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1ufHxuLmNhbGwocix7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pKSxlLm9uKCJEb2NTdGF0cyIsKGZ1bmN0aW9uKGUpe3QuZGVzdHJveWVkfHxfY2xhc3NQcml2YXRlRmllbGRTZXQodCxfZG9jU3RhdHMsT2JqZWN0LmZyZWV6ZSh7c3RyZWFtVHlwZXM6T2JqZWN0LmZyZWV6ZShlLnN0cmVhbVR5cGVzKSxmb250VHlwZXM6T2JqZWN0LmZyZWV6ZShlLmZvbnRUeXBlcyl9KSl9KSksZS5vbigiVW5zdXBwb3J0ZWRGZWF0dXJlIix0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpKSxlLm9uKCJGZXRjaEJ1aWx0SW5DTWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuQ01hcFJlYWRlckZhY3Rvcnk/dC5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSksZS5vbigiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnQuU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk/dC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5mZXRjaChlKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlN0YW5kYXJkRm9udERhdGFGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSl9KSl9fSx7a2V5OiJfb25VbnN1cHBvcnRlZEZlYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10LmZlYXR1cmVJZDt0aGlzLmRlc3Ryb3llZHx8bnVsbD09PShlPShyPXRoaXMubG9hZGluZ1Rhc2spLm9uVW5zdXBwb3J0ZWRGZWF0dXJlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHIsbil9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJzYXZlRG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7cmV0dXJuIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2l6ZTw9MCYmKDAsX3V0aWwud2FybikoInNhdmVEb2N1bWVudCBjYWxsZWQgd2hpbGUgYGFubm90YXRpb25TdG9yYWdlYCBpcyBlbXB0eSwgcGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTpudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZWFkZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmZpbGVuYW1lKSYmdm9pZCAwIT09dD90Om51bGx9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpfSkpfX0se2tleToiZ2V0UGFnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7dmFyIHI9dC0xLG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VQcm9taXNlcykuZ2V0KHIpO2lmKG4pcmV0dXJuIG47dmFyIGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6cn0pLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVHJhbnNwb3J0IGRlc3Ryb3llZCIpO3ZhciBuPW5ldyBQREZQYWdlUHJveHkocix0LGUsZS5fcGFyYW1zLm93bmVyRG9jdW1lbnQsZS5fcGFyYW1zLnBkZkJ1Zyk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChlLF9wYWdlQ2FjaGUpLnNldChyLG4pLG59KSk7cmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9wYWdlUHJvbWlzZXMpLnNldChyLGkpLGl9fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT09X3R5cGVvZih0KXx8bnVsbD09PXR8fCFOdW1iZXIuaXNJbnRlZ2VyKHQubnVtKXx8dC5udW08MHx8IU51bWJlci5pc0ludGVnZXIodC5nZW4pfHx0LmdlbjwwP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VJbmRleCIse251bTp0Lm51bSxnZW46dC5nZW59KX19LHtrZXk6ImdldEFubm90YXRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLHtwYWdlSW5kZXg6dCxpbnRlbnQ6ZX0pfX0se2tleToiZ2V0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlfHwodGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZT10aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RmllbGRPYmplY3RzIixudWxsKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0pTQWN0aW9uc1Byb21pc2V8fCh0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJIYXNKU0FjdGlvbnMiLG51bGwpKX19LHtrZXk6ImdldENhbGN1bGF0aW9uT3JkZXJJZHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDp0fSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTGF5b3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxheW91dCIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldFZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLG51bGwpfX0se2tleToiZ2V0T3BlbkFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE9wZW5BY3Rpb24iLG51bGwpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRBdHRhY2htZW50cyIsbnVsbCl9fSx7a2V5OiJnZXRKYXZhU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0SmF2YVNjcmlwdCIsbnVsbCl9fSx7a2V5OiJnZXREb2NKU0FjdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREb2NKU0FjdGlvbnMiLG51bGwpfX0se2tleToiZ2V0UGFnZUpTQWN0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIix7cGFnZUluZGV4OnR9KX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0U3RydWN0VHJlZSIse3BhZ2VJbmRleDp0fSl9fSx7a2V5OiJnZXRPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3V0bGluZSIsbnVsbCl9fSx7a2V5OiJnZXRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KX0pKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSl8fF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9tZXRhZGF0YVByb21pc2UsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcixuLGksYTtyZXR1cm57aW5mbzplWzBdLG1ldGFkYXRhOmVbMV0/bmV3IF9tZXRhZGF0YS5NZXRhZGF0YShlWzFdKTpudWxsLGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOm51bGwhPT0ocj1udWxsPT09KG49dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsZW5hbWUpJiZ2b2lkIDAhPT1yP3I6bnVsbCxjb250ZW50TGVuZ3RoOm51bGwhPT0oaT1udWxsPT09KGE9dC5fZnVsbFJlYWRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29udGVudExlbmd0aCkmJnZvaWQgMCE9PWk/aTpudWxsfX0pKSl9fSx7a2V5OiJnZXRNYXJrSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1hcmtJbmZvIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6KGU9X2FzeW5jVG9HZW5lcmF0b3IoX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxhPWFyZ3VtZW50cztyZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKGU9YS5sZW5ndGg+MCYmdm9pZCAwIT09YVswXSYmYVswXSwhdGhpcy5kZXN0cm95ZWQpe3QubmV4dD0zO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsbnVsbCk7Y2FzZSA1OnI9X2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3BhZ2VDYWNoZSkudmFsdWVzKCkpLHQucHJldj02LHIucygpO2Nhc2UgODppZigobj1yLm4oKSkuZG9uZSl7dC5uZXh0PTE1O2JyZWFrfWlmKChpPW4udmFsdWUpLmNsZWFudXAoKSl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBFcnJvcigic3RhcnRDbGVhbnVwOiBQYWdlICIuY29uY2F0KGkucGFnZU51bWJlciwiIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIikpO2Nhc2UgMTM6dC5uZXh0PTg7YnJlYWs7Y2FzZSAxNTp0Lm5leHQ9MjA7YnJlYWs7Y2FzZSAxNzp0LnByZXY9MTcsdC50MD10LmNhdGNoKDYpLHIuZSh0LnQwKTtjYXNlIDIwOnJldHVybiB0LnByZXY9MjAsci5mKCksdC5maW5pc2goMjApO2Nhc2UgMjM6dGhpcy5jb21tb25PYmpzLmNsZWFyKCksZXx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCksX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsX21ldGFkYXRhUHJvbWlzZSxudWxsKSx0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlPW51bGwsdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZT1udWxsO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s2LDE3LDIwLDIzXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJsb2FkaW5nUGFyYW1zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fV0pLHR9KCksX29ianM9bmV3IFdlYWtNYXAsX2Vuc3VyZU9iaj1uZXcgV2Vha1NldCxQREZPYmplY3RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLF9lbnN1cmVPYmopLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX29ianMse3dyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5jcmVhdGUobnVsbCl9KX1yZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoZSl7dmFyIHI9X2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLF9lbnN1cmVPYmosX2Vuc3VyZU9iajIpLmNhbGwodGhpcyx0KTtyZXR1cm4gci5jYXBhYmlsaXR5LnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZShyLmRhdGEpfSkpLG51bGx9dmFyIG49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO2lmKG51bGw9PW58fCFuLmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICIuY29uY2F0KHQsIi4iKSk7cmV0dXJuIG4uZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdO3JldHVybihudWxsPT1lP3ZvaWQgMDplLmNhcGFiaWxpdHkuc2V0dGxlZCl8fCExfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1fY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsX2Vuc3VyZU9iaixfZW5zdXJlT2JqMikuY2FsbCh0aGlzLHQpO3IuZGF0YT1lLHIuY2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcyxfb2JqcyxPYmplY3QuY3JlYXRlKG51bGwpKX19XSksdH0oKTtmdW5jdGlvbiBfZW5zdXJlT2JqMih0KXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdfHwoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX29ianMpW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfXZhciBfaW50ZXJuYWxSZW5kZXJUYXNrPW5ldyBXZWFrTWFwLFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpLF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsX2ludGVybmFsUmVuZGVyVGFzayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2ssZSksdGhpcy5vbkNvbnRpbnVlPW51bGx9cmV0dXJuIF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJwcm9taXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2ludGVybmFsUmVuZGVyVGFzaykuY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLmNhbmNlbChudWxsLHQpfX0se2tleToic2VwYXJhdGVBbm5vdHMiLGdldDpmdW5jdGlvbigpe3ZhciB0PV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9pbnRlcm5hbFJlbmRlclRhc2spLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cztpZighdClyZXR1cm4hMTt2YXIgZT1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfaW50ZXJuYWxSZW5kZXJUYXNrKS5hbm5vdGF0aW9uQ2FudmFzTWFwO3JldHVybiB0LmZvcm18fHQuY2FudmFzJiYobnVsbD09ZT92b2lkIDA6ZS5zaXplKT4wfX1dKSx0fSgpO2V4cG9ydHMuUmVuZGVyVGFzaz1SZW5kZXJUYXNrO3ZhciBJbnRlcm5hbFJlbmRlclRhc2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUuY2FsbGJhY2ssbj1lLnBhcmFtcyxpPWUub2JqcyxhPWUuY29tbW9uT2JqcyxvPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxzPWUub3BlcmF0b3JMaXN0LGw9ZS5wYWdlSW5kZXgsdT1lLmNhbnZhc0ZhY3RvcnksYz1lLnVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSxoPXZvaWQgMCE9PWMmJmMsZj1lLnBkZkJ1ZyxkPXZvaWQgMCE9PWYmJmYscD1lLnBhZ2VDb2xvcnMsdj12b2lkIDA9PT1wP251bGw6cDtfY2xhc3NDYWxsQ2hlY2sodGhpcyx0KSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5wYXJhbXM9bix0aGlzLm9ianM9aSx0aGlzLmNvbW1vbk9ianM9YSx0aGlzLmFubm90YXRpb25DYW52YXNNYXA9byx0aGlzLm9wZXJhdG9yTGlzdElkeD1udWxsLHRoaXMub3BlcmF0b3JMaXN0PXMsdGhpcy5fcGFnZUluZGV4PWwsdGhpcy5jYW52YXNGYWN0b3J5PXUsdGhpcy5fcGRmQnVnPWQsdGhpcy5wYWdlQ29sb3JzPXYsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLnRhc2s9bmV3IFJlbmRlclRhc2sodGhpcyksdGhpcy5fY2FuY2VsQm91bmQ9dGhpcy5jYW5jZWwuYmluZCh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgZTtyZXR1cm4gX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBsZXRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX19LHtrZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUudHJhbnNwYXJlbmN5LGE9dm9pZCAwIT09aSYmaSxvPWUub3B0aW9uYWxDb250ZW50Q29uZmlnO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHQsdCxfY2FudmFzSW5Vc2UpLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmbnVsbCE9PShyPWdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpJiZ2b2lkIDAhPT1yJiZyLmVuYWJsZWQmJih0aGlzLnN0ZXBwZXI9Z2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgcz10aGlzLnBhcmFtcyxsPXMuY2FudmFzQ29udGV4dCx1PXMudmlld3BvcnQsYz1zLnRyYW5zZm9ybSxoPXMuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhsLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHtvcHRpb25hbENvbnRlbnRDb25maWc6b30sdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyksdGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06Yyx2aWV3cG9ydDp1LHRyYW5zcGFyZW5jeTphLGJhY2tncm91bmQ6aH0pLHRoaXMub3BlcmF0b3JMaXN0SWR4PTAsdGhpcy5ncmFwaGljc1JlYWR5PSEwLG51bGw9PT0obj10aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayl8fHZvaWQgMD09PW58fG4uY2FsbCh0aGlzKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3RoaXMucnVubmluZz0hMSx0aGlzLmNhbmNlbGxlZD0hMCxudWxsPT09KGU9dGhpcy5nZngpfHx2b2lkIDA9PT1lfHxlLmVuZERyYXdpbmcoKSx0aGlzLl9jYW52YXMmJl9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodCx0LF9jYW52YXNJblVzZSkuZGVsZXRlKHRoaXMuX2NhbnZhcyksdGhpcy5jYWxsYmFjayhyfHxuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMuX3BhZ2VJbmRleCsxKSwiY2FudmFzIixuKSl9fSx7a2V5OiJvcGVyYXRvckxpc3RDaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZ3JhcGhpY3NSZWFkeT8obnVsbD09PSh0PXRoaXMuc3RlcHBlcil8fHZvaWQgMD09PXR8fHQudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KSx0aGlzLnJ1bm5pbmd8fHRoaXMuX2NvbnRpbnVlKCkpOnRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9fSx7a2V5OiJfY29udGludWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSEwLHRoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX19LHtrZXk6Il9zY2hlZHVsZU5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXt0Ll9uZXh0Qm91bmQoKS5jYXRjaCh0Ll9jYW5jZWxCb3VuZCl9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKX19LHtrZXk6Il9uZXh0Iix2YWx1ZTooZT1fYXN5bmNUb0dlbmVyYXRvcihfcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldCh0LHQsX2NhbnZhc0luVXNlKS5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHR9KCksX2NhbnZhc0luVXNlPXt3cml0YWJsZTohMCx2YWx1ZTpuZXcgV2Vha1NldH0sdmVyc2lvbj0iMy4yLjAiO2V4cG9ydHMudmVyc2lvbj12ZXJzaW9uO3ZhciBidWlsZD0iIjtleHBvcnRzLmJ1aWxkPWJ1aWxkfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QcmludEFubm90YXRpb25TdG9yYWdlPWUuQW5ub3RhdGlvblN0b3JhZ2U9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNSksbz1yKDEzOSk7ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0scyh0LGUpfWZ1bmN0aW9uIGwodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LHUodCl9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUscil7Zyh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gZyh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx3KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0P2UuZ2V0LmNhbGwodCk6ZS52YWx1ZX0odCx3KHQsZSwiZ2V0IikpfWZ1bmN0aW9uIHcodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIityKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gZS5nZXQodCl9dmFyIEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrU2V0LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIGU7cCh0aGlzLHQpLGcodGhpcyxlPVMpLGUuYWRkKHRoaXMpLG0odGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLG0odGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5vblNldE1vZGlmaWVkPW51bGwsdGhpcy5vblJlc2V0TW9kaWZpZWQ9bnVsbCx0aGlzLm9uQW5ub3RhdGlvbkVkaXRvcj1udWxsfXJldHVybiB5KHQsW3trZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPV8odGhpcyxrKS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXI/ZTpPYmplY3QuYXNzaWduKGUscil9fSx7a2V5OiJnZXRSYXdWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIF8odGhpcyxrKS5nZXQodCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKF8odGhpcyxrKS5kZWxldGUodCksMD09PV8odGhpcyxrKS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe3ZhciBlLHI9aChfKHRoaXMsaykudmFsdWVzKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOylpZihlLnZhbHVlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yKXJldHVybn1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLm9uQW5ub3RhdGlvbkVkaXRvcihudWxsKX19fSx7a2V5OiJzZXRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1fKHRoaXMsaykuZ2V0KHQpLG49ITE7aWYodm9pZCAwIT09cilmb3IodmFyIGk9MCxvPU9iamVjdC5lbnRyaWVzKGUpO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1jKG9baV0sMiksbD1zWzBdLHU9c1sxXTtyW2xdIT09dSYmKG49ITAscltsXT11KX1lbHNlIG49ITAsXyh0aGlzLGspLnNldCh0LGUpO24mJmZ1bmN0aW9uKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfSh0aGlzLFMsRSkuY2FsbCh0aGlzKSxlIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3ImJnRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKGUuY29uc3RydWN0b3IuX3R5cGUpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gXyh0aGlzLGspLmhhcyh0KX19LHtrZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLGspLnNpemU+MD8oMCxpLm9iamVjdEZyb21NYXApKF8odGhpcyxrKSk6bnVsbH19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMsaykuc2l6ZX19LHtrZXk6InJlc2V0TW9kaWZpZWQiLHZhbHVlOmZ1bmN0aW9uKCl7Xyh0aGlzLEEpJiYoYih0aGlzLEEsITEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCYmdGhpcy5vblJlc2V0TW9kaWZpZWQoKSl9fSx7a2V5OiJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUKHRoaXMpfX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZigwPT09Xyh0aGlzLGspLnNpemUpcmV0dXJuIG51bGw7dmFyIHQsZT1uZXcgTWFwLHI9aChfKHRoaXMsaykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIG49Yyh0LnZhbHVlLDIpLGk9blswXSxvPW5bMV0scz1vIGluc3RhbmNlb2YgYS5Bbm5vdGF0aW9uRWRpdG9yP28uc2VyaWFsaXplKCk6bztzJiZlLnNldChpLHMpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gZX19XSxbe2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIiI7dmFyIGUscj1uZXcgby5NdXJtdXJIYXNoM182NCxuPWgodCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1jKGUudmFsdWUsMiksYT1pWzBdLHM9aVsxXTtyLnVwZGF0ZSgiIi5jb25jYXQoYSwiOiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShzKSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gci5oZXhkaWdlc3QoKX19XSksdH0oKTtmdW5jdGlvbiBFKCl7Xyh0aGlzLEEpfHwoYih0aGlzLEEsITApLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQmJnRoaXMub25TZXRNb2RpZmllZCgpKX1lLkFubm90YXRpb25TdG9yYWdlPXg7dmFyIFA9bmV3IFdlYWtNYXAsVD1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmcyh0LGUpfShvLHQpO3ZhciBlLHIsYT0oZT1vLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIHQsaT11KGUpO2lmKHIpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7dD1SZWZsZWN0LmNvbnN0cnVjdChpLGFyZ3VtZW50cyxhKX1lbHNlIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09bihlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gbCh0KX0odGhpcyx0KX0pO2Z1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHAodGhpcyxvKSxtKGwoZT1hLmNhbGwodGhpcykpLFAse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxiKGwoZSksUCxzdHJ1Y3R1cmVkQ2xvbmUodC5zZXJpYWxpemFibGUpKSxlfXJldHVybiB5KG8sW3trZXk6InByaW50IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFByaW50QW5ub3RhdGlvblN0b3JhZ2UucHJpbnQiKX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyxQKX19XSksb30oeCk7ZS5QcmludEFubm90YXRpb25TdG9yYWdlPVR9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXIoMTM2KSxhPXIoMSk7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGMobi5rZXkpLG4pfX1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4oZT1jKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGModCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGgodCxlLHIpeyFmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LHAodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHAodCxlLCJnZXQiKSl9ZnVuY3Rpb24gcCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgdj1uZXcgV2Vha01hcCx5PW5ldyBXZWFrTWFwLG09bmV3IFdlYWtNYXAsZz1uZXcgV2Vha01hcCxiPW5ldyBXZWFrTWFwLF89bmV3IFdlYWtNYXAsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksaCh0aGlzLHYse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNpbi5iaW5kKHRoaXMpfSksaCh0aGlzLHkse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMuZm9jdXNvdXQuYmluZCh0aGlzKX0pLGgodGhpcyxtLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxnLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGgodGhpcyxiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHUodGhpcywiX3VpTWFuYWdlciIsbnVsbCksaCh0aGlzLF8se3dyaXRhYmxlOiEwLHZhbHVlOnQuX3pJbmRleCsrfSksdGhpcy5jb25zdHJ1Y3Rvcj09PXQmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBbm5vdGF0aW9uRWRpdG9yLiIpLHRoaXMucGFyZW50PWUucGFyZW50LHRoaXMuaWQ9ZS5pZCx0aGlzLndpZHRoPXRoaXMuaGVpZ2h0PW51bGwsdGhpcy5wYWdlSW5kZXg9ZS5wYXJlbnQucGFnZUluZGV4LHRoaXMubmFtZT1lLm5hbWUsdGhpcy5kaXY9bnVsbCx0aGlzLl91aU1hbmFnZXI9ZS51aU1hbmFnZXI7dmFyIHI9dGhpcy5wYXJlbnQudmlld3BvcnQsbj1yLnJvdGF0aW9uLGk9ci5yYXdEaW1zLHM9aS5wYWdlV2lkdGgsbD1pLnBhZ2VIZWlnaHQsYz1pLnBhZ2VYLGY9aS5wYWdlWTt0aGlzLnJvdGF0aW9uPW4sdGhpcy5wYWdlRGltZW5zaW9ucz1bcyxsXSx0aGlzLnBhZ2VUcmFuc2xhdGlvbj1bYyxmXTt2YXIgZD1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxwPWRbMF0sdz1kWzFdO3RoaXMueD1lLngvcCx0aGlzLnk9ZS55L3csdGhpcy5pc0F0dGFjaGVkVG9ET009ITF9dmFyIGUscixuO3JldHVybiBlPXQsbj1be2tleToiX2RlZmF1bHRMaW5lQ29sb3IiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfZGVmYXVsdExpbmVDb2xvciIsdGhpcy5fY29sb3JNYW5hZ2VyLmdldEhleENvZGUoIkNhbnZhc1RleHQiKSl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKSx1aU1hbmFnZXI6cn0pO24ucm90YXRpb249dC5yb3RhdGlvbjt2YXIgaT1vKG4ucGFnZURpbWVuc2lvbnMsMiksYT1pWzBdLHM9aVsxXSxsPW8obi5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCxzKSw0KSx1PWxbMF0sYz1sWzFdLGg9bFsyXSxmPWxbM107cmV0dXJuIG4ueD11L2Esbi55PWMvcyxuLndpZHRoPWgvYSxuLmhlaWdodD1mL3Msbn19XSwocj1be2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXJ9fSx7a2V5OiJzZXRJbkJhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PTB9fSx7a2V5OiJzZXRJbkZvcmVncm91bmQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuc3R5bGUuekluZGV4PWQodGhpcyxfKX19LHtrZXk6InNldFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbCE9PXQmJih0aGlzLnBhZ2VJbmRleD10LnBhZ2VJbmRleCx0aGlzLnBhZ2VEaW1lbnNpb25zPXQucGFnZURpbWVuc2lvbnMpLHRoaXMucGFyZW50PXR9fSx7a2V5OiJmb2N1c2luIix2YWx1ZTpmdW5jdGlvbih0KXtkKHRoaXMsbSk/Zih0aGlzLG0sITEpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpfX0se2tleToiZm9jdXNvdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXt2YXIgcj10LnJlbGF0ZWRUYXJnZXQ7bnVsbCE9ciYmci5jbG9zZXN0KCIjIi5jb25jYXQodGhpcy5pZCkpfHwodC5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPT0oZT10aGlzLnBhcmVudCkmJnZvaWQgMCE9PWUmJmUuaXNNdWx0aXBsZVNlbGVjdGlvbnx8dGhpcy5jb21taXRPclJlbW92ZSgpKX19fSx7a2V5OiJjb21taXRPclJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkoKT90aGlzLnJlbW92ZSgpOnRoaXMuY29tbWl0KCl9fSx7a2V5OiJjb21taXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9fSx7a2V5OiJhZGRUb0Fubm90YXRpb25TdG9yYWdlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpfX0se2tleToiZHJhZ3N0YXJ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudC5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zdGFydFg9dC5jbGllbnRYLWUueCx0aGlzLnN0YXJ0WT10LmNsaWVudFktZS55LHQuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRoaXMuaWQpLHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUifX0se2tleToic2V0QXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8odGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxzPWlbMV0sbD1vKHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24ocixuKSwyKTtyPWxbMF0sbj1sWzFdLHRoaXMueD0odCtyKS9hLHRoaXMueT0oZStuKS9zLHRoaXMuZGl2LnN0eWxlLmxlZnQ9IiIuY29uY2F0KDEwMCp0aGlzLngsIiUiKSx0aGlzLmRpdi5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCp0aGlzLnksIiUiKX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdLGE9byh0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSksMik7dD1hWzBdLGU9YVsxXSx0aGlzLngrPXQvbix0aGlzLnkrPWUvaSx0aGlzLmRpdi5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqdGhpcy54LCIlIiksdGhpcy5kaXYuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqdGhpcy55LCIlIil9fSx7a2V5OiJzY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5wYXJlbnRSb3RhdGlvbil7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19fSx7a2V5OiJwYXJlbnRTY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGV9fSx7a2V5OiJwYXJlbnRSb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbn19LHtrZXk6InBhcmVudERpbWVuc2lvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUsZT1vKHRoaXMucGFnZURpbWVuc2lvbnMsMik7cmV0dXJuW2VbMF0qdCxlWzFdKnRdfX0se2tleToic2V0RGltcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxuPXJbMF0saT1yWzFdO3RoaXMuZGl2LnN0eWxlLndpZHRoPSIiLmNvbmNhdCgxMDAqdC9uLCIlIiksdGhpcy5kaXYuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZS9pLCIlIil9fSx7a2V5OiJmaXhEaW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGl2LnN0eWxlLGU9dC5oZWlnaHQscj10LndpZHRoLG49ci5lbmRzV2l0aCgiJSIpLGk9ZS5lbmRzV2l0aCgiJSIpO2lmKCFufHwhaSl7dmFyIGE9byh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscz1hWzBdLGw9YVsxXTtufHwodC53aWR0aD0iIi5jb25jYXQoMTAwKnBhcnNlRmxvYXQocikvcywiJSIpKSxpfHwodC5oZWlnaHQ9IiIuY29uY2F0KDEwMCpwYXJzZUZsb2F0KGUpL2wsIiUiKSl9fX0se2tleToiZ2V0SW5pdGlhbFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblswLDBdfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1lZGl0b3Itcm90YXRpb24iLCgzNjAtdGhpcy5yb3RhdGlvbiklMzYwKSx0aGlzLmRpdi5jbGFzc05hbWU9dGhpcy5uYW1lLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLDApLHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKTt2YXIgdD1vKHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCksMiksZT10WzBdLHI9dFsxXTtyZXR1cm4gdGhpcy50cmFuc2xhdGUoZSxyKSwoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKSx0aGlzLmRpdn19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjOzAhPT10LmJ1dHRvbnx8dC5jdHJsS2V5JiZlP3QucHJldmVudERlZmF1bHQoKToodC5jdHJsS2V5JiYhZXx8dC5zaGlmdEtleXx8dC5tZXRhS2V5JiZlP3RoaXMucGFyZW50LnRvZ2dsZVNlbGVjdGVkKHRoaXMpOnRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLGYodGhpcyxtLCEwKSl9fSx7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyZW50U2NhbGUsbj1vKHRoaXMucGFnZURpbWVuc2lvbnMsMiksaT1uWzBdLGE9blsxXSxzPW8odGhpcy5wYWdlVHJhbnNsYXRpb24sMiksbD1zWzBdLHU9c1sxXSxjPXQvcixoPWUvcixmPXRoaXMueCppLGQ9dGhpcy55KmEscD10aGlzLndpZHRoKmksdj10aGlzLmhlaWdodCphO3N3aXRjaCh0aGlzLnJvdGF0aW9uKXtjYXNlIDA6cmV0dXJuW2YrYytsLGEtZC1oLXYrdSxmK2MrcCtsLGEtZC1oK3VdO2Nhc2UgOTA6cmV0dXJuW2YraCtsLGEtZCtjK3UsZitoK3YrbCxhLWQrYytwK3VdO2Nhc2UgMTgwOnJldHVybltmLWMtcCtsLGEtZCtoK3UsZi1jK2wsYS1kK2grdit1XTtjYXNlIDI3MDpyZXR1cm5bZi1oLXYrbCxhLWQtYy1wK3UsZi1oK2wsYS1kLWMrdV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19fSx7a2V5OiJnZXRSZWN0SW5DdXJyZW50Q29vcmRzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW8odCw0KSxuPXJbMF0saT1yWzFdLGE9clsyXSxzPXJbM10sbD1hLW4sdT1zLWk7c3dpdGNoKHRoaXMucm90YXRpb24pe2Nhc2UgMDpyZXR1cm5bbixlLXMsbCx1XTtjYXNlIDkwOnJldHVybltuLGUtaSx1LGxdO2Nhc2UgMTgwOnJldHVyblthLGUtaSxsLHVdO2Nhc2UgMjcwOnJldHVyblthLGUtcyx1LGxdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fX0se2tleToib25jZUFkZGVkIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtmKHRoaXMsYiwhMCl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zih0aGlzLGIsITEpfX0se2tleToiaXNJbkVkaXRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkKHRoaXMsYil9fSx7a2V5OiJzaG91bGRHZXRLZXlib2FyZEV2ZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6Im5lZWRzVG9CZVJlYnVpbHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2JiYhdGhpcy5pc0F0dGFjaGVkVG9ET019fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O251bGw9PT0odD10aGlzLmRpdil8fHZvaWQgMD09PXR8fHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxhLnVucmVhY2hhYmxlKSgiQW4gZWRpdG9yIG11c3QgYmUgc2VyaWFsaXphYmxlIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsZCh0aGlzLHYpKSx0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsZCh0aGlzLHkpKSx0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKSx0aGlzLnBhcmVudC5yZW1vdmUodGhpcyl9fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZGl2KXx8dm9pZCAwPT09dHx8dC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZEVkaXRvciIpfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe319LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImVuYWJsZUVkaXRpbmciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImlzRWRpdGluZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxnKX0sc2V0OmZ1bmN0aW9uKHQpe2YodGhpcyxnLHQpLHQ/KHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpLHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKSk6dGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKG51bGwpfX1dKSYmbChlLnByb3RvdHlwZSxyKSxuJiZsKGUsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLkFubm90YXRpb25FZGl0b3I9dyx1KHcsIl9jb2xvck1hbmFnZXIiLG5ldyBpLkNvbG9yTWFuYWdlciksdSh3LCJfekluZGV4IiwxKX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMCxlLmJpbmRFdmVudHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9XyhyKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7ZS5hZGRFdmVudExpc3RlbmVyKGEsdFthXS5iaW5kKHQpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fSxlLm9wYWNpdHlUb0hleD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsTWF0aC5tYXgoMSwyNTUqdCkpKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpfTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEEodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHx3KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybihlPXAoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx3KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7eSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHAobi5rZXkpLG4pfX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiB2KHQsZSxyKXt5KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB5KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LGIodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gYih0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj13KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB3KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBBKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciBrPW5ldyBXZWFrTWFwLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpLHYodGhpcyxrLHt3cml0YWJsZTohMCx2YWx1ZTowfSl9cmV0dXJuIGQodCxbe2tleToiZ2V0SWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4iIi5jb25jYXQoaS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KS5jb25jYXQoKG0odGhpcyxrLCh0PWcodGhpcyxrKSxlPXQrKyx0KSksZSkpfX1dKSx0fSgpLHg9bmV3IFdlYWtNYXAsRT1uZXcgV2Vha01hcCxQPW5ldyBXZWFrTWFwLFQ9bmV3IFdlYWtNYXAsQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTI4O2godGhpcyx0KSx2KHRoaXMseCx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2KHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2KHRoaXMsUCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdih0aGlzLFQse3dyaXRhYmxlOiEwLHZhbHVlOi0xfSksbSh0aGlzLFAsZSl9cmV0dXJuIGQodCxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNtZCxyPXQudW5kbyxuPXQubXVzdEV4ZWMsaT10LnR5cGUsYT12b2lkIDA9PT1pP05hTjppLG89dC5vdmVyd3JpdGVJZlNhbWVUeXBlLHM9dm9pZCAwIT09byYmbyxsPXQua2VlcFVuZG8sdT12b2lkIDAhPT1sJiZsO2lmKG4mJmUoKSwhZyh0aGlzLEUpKXt2YXIgYz17Y21kOmUsdW5kbzpyLHR5cGU6YX07aWYoLTE9PT1nKHRoaXMsVCkpcmV0dXJuIGcodGhpcyx4KS5sZW5ndGg+MCYmKGcodGhpcyx4KS5sZW5ndGg9MCksbSh0aGlzLFQsMCksdm9pZCBnKHRoaXMseCkucHVzaChjKTtpZihzJiZnKHRoaXMseClbZyh0aGlzLFQpXS50eXBlPT09YSlyZXR1cm4gdSYmKGMudW5kbz1nKHRoaXMseClbZyh0aGlzLFQpXS51bmRvKSx2b2lkKGcodGhpcyx4KVtnKHRoaXMsVCldPWMpO3ZhciBoPWcodGhpcyxUKSsxO2g9PT1nKHRoaXMsUCk/Zyh0aGlzLHgpLnNwbGljZSgwLDEpOihtKHRoaXMsVCxoKSxoPGcodGhpcyx4KS5sZW5ndGgmJmcodGhpcyx4KS5zcGxpY2UoaCkpLGcodGhpcyx4KS5wdXNoKGMpfX19LHtrZXk6InVuZG8iLHZhbHVlOmZ1bmN0aW9uKCl7LTEhPT1nKHRoaXMsVCkmJihtKHRoaXMsRSwhMCksZyh0aGlzLHgpW2codGhpcyxUKV0udW5kbygpLG0odGhpcyxFLCExKSxtKHRoaXMsVCxnKHRoaXMsVCktMSkpfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xJiYobSh0aGlzLFQsZyh0aGlzLFQpKzEpLG0odGhpcyxFLCEwKSxnKHRoaXMseClbZyh0aGlzLFQpXS5jbWQoKSxtKHRoaXMsRSwhMSkpfX0se2tleToiaGFzU29tZXRoaW5nVG9VbmRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi0xIT09Zyh0aGlzLFQpfX0se2tleToiaGFzU29tZXRoaW5nVG9SZWRvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVCk8Zyh0aGlzLHgpLmxlbmd0aC0xfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXttKHRoaXMseCxudWxsKX19XSksdH0oKTtlLkNvbW1hbmRNYW5hZ2VyPUM7dmFyIE89bmV3IFdlYWtTZXQsRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHUodGhpcyxPKSx0aGlzLmJ1ZmZlcj1bXSx0aGlzLmNhbGxiYWNrcz1uZXcgTWFwLHRoaXMuYWxsS2V5cz1uZXcgU2V0O3ZhciByLG49aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYyxhPV8oZSk7dHJ5e2ZvcihhLnMoKTshKHI9YS5uKCkpLmRvbmU7KXt2YXIgbyxzPWwoci52YWx1ZSwyKSxjPXNbMF0sZj1zWzFdLGQ9XyhjKTt0cnl7Zm9yKGQucygpOyEobz1kLm4oKSkuZG9uZTspe3ZhciBwPW8udmFsdWUsdj1wLnN0YXJ0c1dpdGgoIm1hYysiKTtuJiZ2Pyh0aGlzLmNhbGxiYWNrcy5zZXQocC5zbGljZSg0KSxmKSx0aGlzLmFsbEtleXMuYWRkKHAuc3BsaXQoIisiKS5hdCgtMSkpKTpufHx2fHwodGhpcy5jYWxsYmFja3Muc2V0KHAsZiksdGhpcy5hbGxLZXlzLmFkZChwLnNwbGl0KCIrIikuYXQoLTEpKSl9fWNhdGNoKHQpe2QuZSh0KX1maW5hbGx5e2QuZigpfX19Y2F0Y2godCl7YS5lKHQpfWZpbmFsbHl7YS5mKCl9fXJldHVybiBkKHQsW3trZXk6ImV4ZWMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpe3ZhciByPXRoaXMuY2FsbGJhY2tzLmdldChjKHRoaXMsTyxNKS5jYWxsKHRoaXMsZSkpO3ImJihyLmJpbmQodCkoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9fX1dKSx0fSgpO2Z1bmN0aW9uIE0odCl7dC5hbHRLZXkmJnRoaXMuYnVmZmVyLnB1c2goImFsdCIpLHQuY3RybEtleSYmdGhpcy5idWZmZXIucHVzaCgiY3RybCIpLHQubWV0YUtleSYmdGhpcy5idWZmZXIucHVzaCgibWV0YSIpLHQuc2hpZnRLZXkmJnRoaXMuYnVmZmVyLnB1c2goInNoaWZ0IiksdGhpcy5idWZmZXIucHVzaCh0LmtleSk7dmFyIGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg9MCxlfWUuS2V5Ym9hcmRNYW5hZ2VyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aCh0aGlzLHQpfXJldHVybiBkKHQsW3trZXk6Il9jb2xvcnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PW5ldyBNYXAoW1siQ2FudmFzVGV4dCIsbnVsbF0sWyJDYW52YXMiLG51bGxdXSk7cmV0dXJuKDAsYS5nZXRDb2xvclZhbHVlcykodCksKDAsaS5zaGFkb3cpKHRoaXMsIl9jb2xvcnMiLHQpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHI9KDAsYS5nZXRSR0IpKGUpO2lmKCF3aW5kb3cubWF0Y2hNZWRpYSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5tYXRjaGVzKXJldHVybiByO3ZhciBuLGk9Xyh0aGlzLl9jb2xvcnMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bChuLnZhbHVlLDIpLHM9b1swXTtpZihvWzFdLmV2ZXJ5KChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09cltlXX0pKSlyZXR1cm4gdC5fY29sb3JzTWFwcGluZy5nZXQocyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfXJldHVybiByfX0se2tleToiZ2V0SGV4Q29kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxvKGUpKTp0fX1dKSx0fSgpO2UuQ29sb3JNYW5hZ2VyPVIscyhSLCJfY29sb3JzTWFwcGluZyIsbmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKSk7dmFyIEk9bmV3IFdlYWtNYXAsaj1uZXcgV2Vha01hcCxMPW5ldyBXZWFrTWFwLEQ9bmV3IFdlYWtNYXAsTj1uZXcgV2Vha01hcCxVPW5ldyBXZWFrTWFwLFc9bmV3IFdlYWtNYXAsRz1uZXcgV2Vha01hcCxCPW5ldyBXZWFrTWFwLHE9bmV3IFdlYWtNYXAsSD1uZXcgV2Vha01hcCx6PW5ldyBXZWFrTWFwLFY9bmV3IFdlYWtNYXAsWD1uZXcgV2Vha01hcCxZPW5ldyBXZWFrTWFwLEs9bmV3IFdlYWtNYXAsSj1uZXcgV2Vha01hcCxRPW5ldyBXZWFrTWFwLCQ9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCx0dD1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxydD1uZXcgV2Vha01hcCxudD1uZXcgV2Vha1NldCxpdD1uZXcgV2Vha1NldCxhdD1uZXcgV2Vha1NldCxvdD1uZXcgV2Vha1NldCxzdD1uZXcgV2Vha1NldCxsdD1uZXcgV2Vha1NldCx1dD1uZXcgV2Vha1NldCxjdD1uZXcgV2Vha1NldCxodD1uZXcgV2Vha1NldCxmdD1uZXcgV2Vha1NldCxkdD1uZXcgV2Vha1NldCxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe2godGhpcyx0KSx1KHRoaXMsZHQpLHUodGhpcyxmdCksdSh0aGlzLGh0KSx1KHRoaXMsY3QpLHUodGhpcyx1dCksdSh0aGlzLGx0KSx1KHRoaXMsc3QpLHUodGhpcyxvdCksdSh0aGlzLGF0KSx1KHRoaXMsaXQpLHUodGhpcyxudCksdih0aGlzLEkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsaix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHYodGhpcyxMLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdih0aGlzLEQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx2KHRoaXMsTix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEN9KSx2KHRoaXMsVSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHYodGhpcyxXLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdih0aGlzLEcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2KHRoaXMsQix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLHYodGhpcyxxLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU30pLHYodGhpcyxILHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHYodGhpcyx6LHt3cml0YWJsZTohMCx2YWx1ZTppLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkV9KSx2KHRoaXMsVix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLHYodGhpcyxYLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmNvcHkuYmluZCh0aGlzKX0pLHYodGhpcyxZLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmN1dC5iaW5kKHRoaXMpfSksdih0aGlzLEsse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMucGFzdGUuYmluZCh0aGlzKX0pLHYodGhpcyxKLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLmtleWRvd24uYmluZCh0aGlzKX0pLHYodGhpcyxRLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uRWRpdGluZ0FjdGlvbi5iaW5kKHRoaXMpfSksdih0aGlzLCQse3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKX0pLHYodGhpcyxaLHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLHR0LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpfSksdih0aGlzLGV0LHt3cml0YWJsZTohMCx2YWx1ZTp7aXNFZGl0aW5nOiExLGlzRW1wdHk6ITAsaGFzU29tZXRoaW5nVG9VbmRvOiExLGhhc1NvbWV0aGluZ1RvUmVkbzohMSxoYXNTZWxlY3RlZEVkaXRvcjohMX19KSx2KHRoaXMscnQse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxtKHRoaXMscnQsZSksbSh0aGlzLEIsciksZyh0aGlzLEIpLl9vbigiZWRpdGluZ2FjdGlvbiIsZyh0aGlzLFEpKSxnKHRoaXMsQikuX29uKCJwYWdlY2hhbmdpbmciLGcodGhpcywkKSksZyh0aGlzLEIpLl9vbigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29uKCJyb3RhdGlvbmNoYW5naW5nIixnKHRoaXMsdHQpKSxtKHRoaXMsRCxuKSx0aGlzLnZpZXdQYXJhbWV0ZXJzPXtyZWFsU2NhbGU6YS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMscm90YXRpb246MH19cmV0dXJuIGQodCxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksZyh0aGlzLEIpLl9vZmYoImVkaXRpbmdhY3Rpb24iLGcodGhpcyxRKSksZyh0aGlzLEIpLl9vZmYoInBhZ2VjaGFuZ2luZyIsZyh0aGlzLCQpKSxnKHRoaXMsQikuX29mZigic2NhbGVjaGFuZ2luZyIsZyh0aGlzLFopKSxnKHRoaXMsQikuX29mZigicm90YXRpb25jaGFuZ2luZyIsZyh0aGlzLHR0KSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGVzdHJveSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxMKS5jbGVhcigpLGcodGhpcyxqKS5jbGVhcigpLGcodGhpcyxHKS5jbGVhcigpLG0odGhpcyxJLG51bGwpLGcodGhpcyxWKS5jbGVhcigpLGcodGhpcyxOKS5kZXN0cm95KCl9fSx7a2V5OiJvblBhZ2VDaGFuZ2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYWdlTnVtYmVyO20odGhpcyxVLGUtMSl9fSx7a2V5OiJmb2N1c01haW5Db250YWluZXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zyh0aGlzLHJ0KS5mb2N1cygpfX0se2tleToiYWRkU2hvdWxkUmVzY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEcpLmFkZCh0KX19LHtrZXk6InJlbW92ZVNob3VsZFJlc2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxHKS5kZWxldGUodCl9fSx7a2V5OiJvblNjYWxlQ2hhbmdpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2NhbGU7dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlPWUqYS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7dmFyIHIsbj1fKGcodGhpcyxHKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUub25TY2FsZUNoYW5naW5nKCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToib25Sb3RhdGlvbkNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhZ2VzUm90YXRpb247dGhpcy5jb21taXRPclJlbW92ZSgpLHRoaXMudmlld1BhcmFtZXRlcnMucm90YXRpb249ZX19LHtrZXk6ImFkZFRvQW5ub3RhdGlvblN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuaXNFbXB0eSgpfHwhZyh0aGlzLEQpfHxnKHRoaXMsRCkuaGFzKHQuaWQpfHxnKHRoaXMsRCkuc2V0VmFsdWUodC5pZCx0KX19LHtrZXk6ImNvcHkiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQucHJldmVudERlZmF1bHQoKSxnKHRoaXMsSSkmJmcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpLHRoaXMuaGFzU2VsZWN0aW9uKXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsVikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLmlzRW1wdHkoKXx8ci5wdXNoKGkuc2VyaWFsaXplKCkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX0wIT09ci5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkocikpfX19LHtrZXk6ImN1dCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb3B5KHQpLHRoaXMuZGVsZXRlKCl9fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYocil7dHJ5e3I9SlNPTi5wYXJzZShyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX1pZihBcnJheS5pc0FycmF5KHIpKXt0aGlzLnVuc2VsZWN0QWxsKCk7dmFyIG49Zyh0aGlzLEwpLmdldChnKHRoaXMsVSkpO3RyeXt2YXIgYSxvPVtdLHM9XyhyKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1uLmRlc2VyaWFsaXplKGwpO2lmKCF1KXJldHVybjtvLnB1c2godSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9bzt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtjKGUsaHQsa3QpLmNhbGwoZSxuKX1jKGUsZHQseHQpLmNhbGwoZSxvKX0sdW5kbzpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9bzt0PGUubGVuZ3RoO3QrKyllW3RdLnJlbW92ZSgpfSxtdXN0RXhlYzohMH0pfWNhdGNoKHQpeygwLGkud2FybikoJ3Bhc3RlOiAiJy5jb25jYXQodC5tZXNzYWdlLCciLicpKX19fX19LHtrZXk6ImtleWRvd24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByO251bGwhPT0ocj10aGlzLmdldEFjdGl2ZSgpKSYmdm9pZCAwIT09ciYmci5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpfHx0Ll9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLGUpfX0se2tleToib25FZGl0aW5nQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0KXtbInVuZG8iLCJyZWRvIiwiZGVsZXRlIiwic2VsZWN0QWxsIl0uaW5jbHVkZXModC5uYW1lKSYmdGhpc1t0Lm5hbWVdKCl9fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q/KGModGhpcyxudCx2dCkuY2FsbCh0aGlzKSxjKHRoaXMsYXQsbXQpLmNhbGwodGhpcyksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2lzRWRpdGluZzpnKHRoaXMseikhPT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyksaGFzU29tZXRoaW5nVG9VbmRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvUmVkbygpLGhhc1NlbGVjdGVkRWRpdG9yOiExfSkpOihjKHRoaXMsaXQseXQpLmNhbGwodGhpcyksYyh0aGlzLG90LGd0KS5jYWxsKHRoaXMpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtpc0VkaXRpbmc6ITF9KSl9fSx7a2V5OiJyZWdpc3RlckVkaXRvclR5cGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZyh0aGlzLFcpKXttKHRoaXMsVyx0KTt2YXIgZSxyPV8oZyh0aGlzLFcpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7Yyh0aGlzLGx0LF90KS5jYWxsKHRoaXMsbi5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX19LHtrZXk6ImdldElkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMscSkuZ2V0SWQoKX19LHtrZXk6ImN1cnJlbnRMYXllciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyxMKS5nZXQoZyh0aGlzLFUpKX19LHtrZXk6ImN1cnJlbnRQYWdlSW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMsVSl9fSx7a2V5OiJhZGRMYXllciIsdmFsdWU6ZnVuY3Rpb24odCl7Zyh0aGlzLEwpLnNldCh0LnBhZ2VJbmRleCx0KSxnKHRoaXMsSCk/dC5lbmFibGUoKTp0LmRpc2FibGUoKX19LHtrZXk6InJlbW92ZUxheWVyIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsTCkuZGVsZXRlKHQucGFnZUluZGV4KX19LHtrZXk6InVwZGF0ZU1vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKG0odGhpcyx6LHQpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpdGhpcy5zZXRFZGl0aW5nU3RhdGUoITEpLGModGhpcyxjdCxBdCkuY2FsbCh0aGlzKTtlbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKSxjKHRoaXMsdXQsd3QpLmNhbGwodGhpcyk7dmFyIGUscj1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUudXBkYXRlTW9kZSh0KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fX0se2tleToidXBkYXRlVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24odCl7dCE9PWcodGhpcyx6KSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfX0se2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKGcodGhpcyxXKSl7dmFyIHIsbj1fKGcodGhpcyxWKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUudXBkYXRlUGFyYW1zKHQsZSl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9dmFyIGksYT1fKGcodGhpcyxXKSk7dHJ5e2ZvcihhLnMoKTshKGk9YS5uKCkpLmRvbmU7KWkudmFsdWUudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfX19fSx7a2V5OiJnZXRFZGl0b3JzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTtpLnBhZ2VJbmRleD09PXQmJnIucHVzaChpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fSx7a2V5OiJnZXRFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsaikuZ2V0KHQpfX0se2tleToiYWRkRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXtnKHRoaXMsaikuc2V0KHQuaWQsdCl9fSx7a2V5OiJyZW1vdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO2codGhpcyxqKS5kZWxldGUodC5pZCksdGhpcy51bnNlbGVjdCh0KSxudWxsPT09KGU9Zyh0aGlzLEQpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUodC5pZCl9fSx7a2V5OiJzZXRBY3RpdmVFZGl0b3IiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxJKSE9PXQmJihtKHRoaXMsSSx0KSx0JiZjKHRoaXMsbHQsX3QpLmNhbGwodGhpcyx0LnByb3BlcnRpZXNUb1VwZGF0ZSkpfX0se2tleToidG9nZ2xlU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGcodGhpcyxWKS5oYXModCkpcmV0dXJuIGcodGhpcyxWKS5kZWxldGUodCksdC51bnNlbGVjdCgpLHZvaWQgYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NlbGVjdGVkRWRpdG9yOnRoaXMuaGFzU2VsZWN0aW9ufSk7Zyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7biE9PXQmJm4udW5zZWxlY3QoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9Zyh0aGlzLFYpLmNsZWFyKCksZyh0aGlzLFYpLmFkZCh0KSx0LnNlbGVjdCgpLGModGhpcyxsdCxfdCkuY2FsbCh0aGlzLHQucHJvcGVydGllc1RvVXBkYXRlKSxjKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX19LHtrZXk6ImlzU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsVikuaGFzKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QudW5zZWxlY3QoKSxnKHRoaXMsVikuZGVsZXRlKHQpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfX0se2tleToiaGFzU2VsZWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PWcodGhpcyxWKS5zaXplfX0se2tleToidW5kbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikudW5kbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86Zyh0aGlzLE4pLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToicmVkbyIsdmFsdWU6ZnVuY3Rpb24oKXtnKHRoaXMsTikucmVkbygpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOmcodGhpcyxOKS5oYXNTb21ldGhpbmdUb1JlZG8oKSxpc0VtcHR5OmModGhpcyxmdCxTdCkuY2FsbCh0aGlzKX0pfX0se2tleToiYWRkQ29tbWFuZHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2codGhpcyxOKS5hZGQodCksYyh0aGlzLHN0LGJ0KS5jYWxsKHRoaXMse2hhc1NvbWV0aGluZ1RvVW5kbzohMCxoYXNTb21ldGhpbmdUb1JlZG86ITEsaXNFbXB0eTpjKHRoaXMsZnQsU3QpLmNhbGwodGhpcyl9KX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuY29tbWl0T3JSZW1vdmUoKSx0aGlzLmhhc1NlbGVjdGlvbil7dmFyIGU9byhnKHRoaXMsVikpO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe3ZhciB0LHI9XyhlKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspdC52YWx1ZS5yZW1vdmUoKX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19LHVuZG86ZnVuY3Rpb24oKXt2YXIgcixuPV8oZSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2ModCxodCxrdCkuY2FsbCh0LGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19LG11c3RFeGVjOiEwfSl9fX0se2tleToiY29tbWl0T3JSZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PWcodGhpcyxJKSl8fHZvaWQgMD09PXR8fHQuY29tbWl0T3JSZW1vdmUoKX19LHtrZXk6InNlbGVjdEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS5jb21taXQoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1jKHRoaXMsZHQseHQpLmNhbGwodGhpcyxnKHRoaXMsaikudmFsdWVzKCkpfX0se2tleToidW5zZWxlY3RBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoZyh0aGlzLEkpKWcodGhpcyxJKS5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PWcodGhpcyxWKS5zaXplKXt2YXIgdCxlPV8oZyh0aGlzLFYpKTt0cnl7Zm9yKGUucygpOyEodD1lLm4oKSkuZG9uZTspdC52YWx1ZS51bnNlbGVjdCgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfWcodGhpcyxWKS5jbGVhcigpLGModGhpcyxzdCxidCkuY2FsbCh0aGlzLHtoYXNTZWxlY3RlZEVkaXRvcjohMX0pfX19LHtrZXk6ImlzQWN0aXZlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLEkpPT09dH19LHtrZXk6ImdldEFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLEkpfX0se2tleToiZ2V0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLHopfX1dKSx0fSgpO2Z1bmN0aW9uIHZ0KCl7Zyh0aGlzLHJ0KS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIHl0KCl7Zyh0aGlzLHJ0KS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixnKHRoaXMsSikpfWZ1bmN0aW9uIG10KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsZyh0aGlzLFgpKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLGcodGhpcyxZKSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLGcodGhpcyxLKSl9ZnVuY3Rpb24gZ3QoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5IixnKHRoaXMsWCkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImN1dCIsZyh0aGlzLFkpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYXN0ZSIsZyh0aGlzLEspKX1mdW5jdGlvbiBidCh0KXt2YXIgZT10aGlzO09iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPWwodCwyKSxuPXJbMF0saT1yWzFdO3JldHVybiBnKGUsZXQpW25dIT09aX0pKSYmZyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbihnKHRoaXMsZXQpLHQpfSl9ZnVuY3Rpb24gX3QodCl7Zyh0aGlzLEIpLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6dH0pfWZ1bmN0aW9uIHd0KCl7aWYoIWcodGhpcyxIKSl7bSh0aGlzLEgsITApO3ZhciB0LGU9XyhnKHRoaXMsTCkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24gQXQoKXtpZih0aGlzLnVuc2VsZWN0QWxsKCksZyh0aGlzLEgpKXttKHRoaXMsSCwhMSk7dmFyIHQsZT1fKGcodGhpcyxMKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZGlzYWJsZSgpfWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfX19ZnVuY3Rpb24ga3QodCl7dmFyIGU9Zyh0aGlzLEwpLmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1mdW5jdGlvbiBTdCgpe2lmKDA9PT1nKHRoaXMsaikuc2l6ZSlyZXR1cm4hMDtpZigxPT09Zyh0aGlzLGopLnNpemUpe3ZhciB0LGU9XyhnKHRoaXMsaikudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOylyZXR1cm4gdC52YWx1ZS5pc0VtcHR5KCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fXJldHVybiExfWZ1bmN0aW9uIHh0KHQpe2codGhpcyxWKS5jbGVhcigpO3ZhciBlLHI9Xyh0KTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7bi5pc0VtcHR5KCl8fChnKHRoaXMsVikuYWRkKG4pLG4uc2VsZWN0KCkpfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1jKHRoaXMsc3QsYnQpLmNhbGwodGhpcyx7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1lLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI9cHQscyhwdCwiX2tleWJvYXJkTWFuYWdlciIsbmV3IEYoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxwdC5wcm90b3R5cGUuc2VsZWN0QWxsXSxbWyJjdHJsK3oiLCJtYWMrbWV0YSt6Il0scHQucHJvdG90eXBlLnVuZG9dLFtbImN0cmwreSIsImN0cmwrc2hpZnQrWiIsIm1hYyttZXRhK3NoaWZ0K1oiXSxwdC5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxwdC5wcm90b3R5cGUuZGVsZXRlXSxbWyJFc2NhcGUiLCJtYWMrRXNjYXBlIl0scHQucHJvdG90eXBlLnVuc2VsZWN0QWxsXV0pKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlN0YXRUaW1lcj1lLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbj1lLlBpeGVsc1BlckluY2g9ZS5QYWdlVmlld3BvcnQ9ZS5QREZEYXRlU3RyaW5nPWUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5ET01TVkdGYWN0b3J5PWUuRE9NQ2FudmFzRmFjdG9yeT1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PWUuQW5ub3RhdGlvblByZWZpeD12b2lkIDAsZS5kZXByZWNhdGVkPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKCJEZXByZWNhdGVkIEFQSSB1c2FnZTogIit0KX0sZS5nZXRDb2xvclZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kKGUpO3ZhciByLG49cyh0LmtleXMoKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2Uuc3R5bGUuY29sb3I9aTt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChpLEkoYSkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1lLnJlbW92ZSgpfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUcmFuc2Zvcm0oKTtyZXR1cm5bZS5hLGUuYixlLmMsZS5kLGUuZSxlLmZdfSxlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO3JldHVybltlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZl19LGUuZ2V0RmlsZW5hbWVGcm9tVXJsPWZ1bmN0aW9uKHQpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpe3ZhciBlPXQuc3BsaXQoL1sjP10vLDEpO3Q9KDEsZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0ocj1lKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQsMDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwxIT09cy5sZW5ndGgpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHIpfHxsKHIsMSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSlbMF19dmFyIHI7cmV0dXJuIHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoIi8iKSsxKX0sZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJkb2N1bWVudC5wZGYiO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gZTtpZihDKHQpKXJldHVybigwLGkud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlICJkYXRhOiItVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLGU7dmFyIHI9L1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaSxuPS9eKD86KD86W146XSs6KT9cL1wvW14vXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLmV4ZWModCksYT1yLmV4ZWMoblsxXSl8fHIuZXhlYyhuWzJdKXx8ci5leGVjKG5bM10pO2lmKGEmJihhPWFbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2E9ci5leGVjKGRlY29kZVVSSUNvbXBvbmVudChhKSlbMF19Y2F0Y2godCl7fXJldHVybiBhfHxlfSxlLmdldFJHQj1JLGUuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zY2FsZSxuPXZvaWQgMD09PXI/MTpyLGk9ZS5yb3RhdGlvbixhPXZvaWQgMD09PWk/MDppLG89dC5hdHRyaWJ1dGVzLnN0eWxlLHM9by53aWR0aCxsPW8uaGVpZ2h0LHU9WzAsMCxwYXJzZUludChzKSxwYXJzZUludChsKV07cmV0dXJuIG5ldyBQKHt2aWV3Qm94OnUsc2NhbGU6bixyb3RhdGlvbjphfSl9LGUuaXNEYXRhU2NoZW1lPUMsZS5pc1BkZkZpbGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvXC5wZGYkL2kudGVzdCh0KX0sZS5pc1ZhbGlkRmV0Y2hVcmw9TSxlLmxvYWRTY3JpcHQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aS5zcmM9dCxpLm9ubG9hZD1mdW5jdGlvbih0KXtlJiZpLnJlbW92ZSgpLHIodCl9LGkub25lcnJvcj1mdW5jdGlvbigpe24obmV3IEVycm9yKCJDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICIuY29uY2F0KGkuc3JjKSkpfSwoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQoaSl9KSl9LGUuc2V0TGF5ZXJEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM107aWYoZSBpbnN0YW5jZW9mIFApe3ZhciBpPWUucmF3RGltcyxhPWkucGFnZVdpZHRoLG89aS5wYWdlSGVpZ2h0LHM9dC5zdHlsZSxsPSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChhLCJweCkiKSx1PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikgKiAiLmNvbmNhdChvLCJweCkiKTtyJiZlLnJvdGF0aW9uJTE4MCE9MD8ocy53aWR0aD11LHMuaGVpZ2h0PWwpOihzLndpZHRoPWwscy5oZWlnaHQ9dSl9biYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsZS5yb3RhdGlvbil9O3ZhciBuPXIoMTM4KSxpPXIoMSk7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxzPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIscykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLHMsbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09byhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LHMsbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQscyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LHMoYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LHMsbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W3NdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbyh0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKHQpO2lmKGUpe3ZhciBpPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09byhlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fSh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0scCh0KX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxiKG4ua2V5KSxuKX19ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gbSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybihlPWIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gYih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09byh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW8oZSk/ZTpTdHJpbmcoZSl9ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO3ZhciBfPXkoKGZ1bmN0aW9uIHQoKXttKHRoaXMsdCl9KSk7ZS5QaXhlbHNQZXJJbmNoPV8sZyhfLCJDU1MiLDk2KSxnKF8sIlBERiIsNzIpLGcoXywiUERGX1RPX0NTU19VTklUUyIsXy5DU1MvXy5QREYpO3ZhciB3PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXt2YXIgdCxuPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtyZXR1cm4gbSh0aGlzLHIpLCh0PWUuY2FsbCh0aGlzKSkuX2RvY3VtZW50PWksdH1yZXR1cm4geShyLFt7a2V5OiJfY3JlYXRlQ2FudmFzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxyfX1dKSxyfShuLkJhc2VDYW52YXNGYWN0b3J5KTtmdW5jdGlvbiBBKHQpe3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrKCl7dmFyIHQ7cmV0dXJuIHQ9YSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvPWFyZ3VtZW50cztyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9by5sZW5ndGg+MSYmdm9pZCAwIT09b1sxXSYmb1sxXSwhTShlLGRvY3VtZW50LmJhc2VVUkkpKXt0Lm5leHQ9MjE7YnJlYWt9cmV0dXJuIHQubmV4dD00LGZldGNoKGUpO2Nhc2UgNDppZigobj10LnNlbnQpLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3Iobi5zdGF0dXNUZXh0KTtjYXNlIDc6aWYoIXIpe3QubmV4dD0xNTticmVha31yZXR1cm4gdC50MT1VaW50OEFycmF5LHQubmV4dD0xMSxuLmFycmF5QnVmZmVyKCk7Y2FzZSAxMTp0LnQyPXQuc2VudCx0LnQwPW5ldyB0LnQxKHQudDIpLHQubmV4dD0yMDticmVhaztjYXNlIDE1OnJldHVybiB0LnQzPWkuc3RyaW5nVG9CeXRlcyx0Lm5leHQ9MTgsbi50ZXh0KCk7Y2FzZSAxODp0LnQ0PXQuc2VudCx0LnQwPSgwLHQudDMpKHQudDQpO2Nhc2UgMjA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQudDApO2Nhc2UgMjE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdDthLm9wZW4oIkdFVCIsZSwhMCksciYmKGEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLGEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7dmFyIGU7aWYoKDIwMD09PWEuc3RhdHVzfHwwPT09YS5zdGF0dXMpJiYociYmYS5yZXNwb25zZT9lPW5ldyBVaW50OEFycmF5KGEucmVzcG9uc2UpOiFyJiZhLnJlc3BvbnNlVGV4dCYmKGU9KDAsaS5zdHJpbmdUb0J5dGVzKShhLnJlc3BvbnNlVGV4dCkpLGUpKXJldHVybiB2b2lkIHQoZSk7bihuZXcgRXJyb3IoYS5zdGF0dXNUZXh0KSl9fSxhLnNlbmQobnVsbCl9KSkpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSxrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9LGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuRE9NQ2FudmFzRmFjdG9yeT13O3ZhciBTPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEEodCx0aGlzLmlzQ29tcHJlc3NlZCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9fSkpfX1dKSxyfShuLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSk7ZS5ET01DTWFwUmVhZGVyRmFjdG9yeT1TO3ZhciB4PWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHQsITApfX1dKSxyfShuLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT14O3ZhciBFPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB5KHIsW3trZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KX19XSkscn0obi5CYXNlU1ZHRmFjdG9yeSk7ZS5ET01TVkdGYWN0b3J5PUU7dmFyIFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUudmlld0JveCxuPWUuc2NhbGUsaT1lLnJvdGF0aW9uLGE9ZS5vZmZzZXRYLG89dm9pZCAwPT09YT8wOmEscz1lLm9mZnNldFksbD12b2lkIDA9PT1zPzA6cyx1PWUuZG9udEZsaXAsYz12b2lkIDAhPT11JiZ1O20odGhpcyx0KSx0aGlzLnZpZXdCb3g9cix0aGlzLnNjYWxlPW4sdGhpcy5yb3RhdGlvbj1pLHRoaXMub2Zmc2V0WD1vLHRoaXMub2Zmc2V0WT1sO3ZhciBoLGYsZCxwLHYseSxnLGIsXz0oclsyXStyWzBdKS8yLHc9KHJbM10rclsxXSkvMjtzd2l0Y2goKGklPTM2MCk8MCYmKGkrPTM2MCksaSl7Y2FzZSAxODA6aD0tMSxmPTAsZD0wLHA9MTticmVhaztjYXNlIDkwOmg9MCxmPTEsZD0xLHA9MDticmVhaztjYXNlIDI3MDpoPTAsZj0tMSxkPS0xLHA9MDticmVhaztjYXNlIDA6aD0xLGY9MCxkPTAscD0tMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiUGFnZVZpZXdwb3J0OiBJbnZhbGlkIHJvdGF0aW9uLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgZGVncmVlcy4iKX1jJiYoZD0tZCxwPS1wKSwwPT09aD8odj1NYXRoLmFicyh3LXJbMV0pKm4rbyx5PU1hdGguYWJzKF8tclswXSkqbitsLGc9KHJbM10tclsxXSkqbixiPShyWzJdLXJbMF0pKm4pOih2PU1hdGguYWJzKF8tclswXSkqbitvLHk9TWF0aC5hYnMody1yWzFdKSpuK2wsZz0oclsyXS1yWzBdKSpuLGI9KHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixmKm4sZCpuLHAqbix2LWgqbipfLWQqbip3LHktZipuKl8tcCpuKnddLHRoaXMud2lkdGg9Zyx0aGlzLmhlaWdodD1ifXJldHVybiB5KHQsW3trZXk6InJhd0RpbXMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlld0JveDtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicmF3RGltcyIse3BhZ2VXaWR0aDp0WzJdLXRbMF0scGFnZUhlaWdodDp0WzNdLXRbMV0scGFnZVg6dFswXSxwYWdlWTp0WzFdfSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj1lLnNjYWxlLG49dm9pZCAwPT09cj90aGlzLnNjYWxlOnIsaT1lLnJvdGF0aW9uLGE9dm9pZCAwPT09aT90aGlzLnJvdGF0aW9uOmksbz1lLm9mZnNldFgscz12b2lkIDA9PT1vP3RoaXMub2Zmc2V0WDpvLGw9ZS5vZmZzZXRZLHU9dm9pZCAwPT09bD90aGlzLm9mZnNldFk6bCxjPWUuZG9udEZsaXAsaD12b2lkIDAhPT1jJiZjO3JldHVybiBuZXcgdCh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmEsb2Zmc2V0WDpzLG9mZnNldFk6dSxkb250RmxpcDpofSl9fSx7a2V5OiJjb252ZXJ0VG9WaWV3cG9ydFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3QsZV0sdGhpcy50cmFuc2Zvcm0pfX0se2tleToiY29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzFdXSx0aGlzLnRyYW5zZm9ybSkscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFszXV0sdGhpcy50cmFuc2Zvcm0pO3JldHVybltlWzBdLGVbMV0sclswXSxyWzFdXX19LHtrZXk6ImNvbnZlcnRUb1BkZlBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBpLlV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKFt0LGVdLHRoaXMudHJhbnNmb3JtKX19XSksdH0oKTtlLlBhZ2VWaWV3cG9ydD1QO3ZhciBUPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCxuKXt2YXIgaSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO3JldHVybiBtKHRoaXMsciksKGk9ZS5jYWxsKHRoaXMsdCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikpLnR5cGU9bixpLmV4dHJhRGVsYXk9YSxpfXJldHVybiB5KHIpfShpLkJhc2VFeGNlcHRpb24pO2Z1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGUmJiIiPT09dFtyXS50cmltKCk7KXIrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocixyKzUpLnRvTG93ZXJDYXNlKCl9ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249VDt2YXIgTyxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe20odGhpcyx0KSxnKHRoaXMsInN0YXJ0ZWQiLE9iamVjdC5jcmVhdGUobnVsbCkpLGcodGhpcywidGltZXMiLFtdKX1yZXR1cm4geSh0LFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZCYmKDAsaS53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiLmNvbmNhdCh0KSksdGhpcy5zdGFydGVkW3RdPURhdGUubm93KCl9fSx7a2V5OiJ0aW1lRW5kIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluIHRoaXMuc3RhcnRlZHx8KDAsaS53YXJuKSgiVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICIuY29uY2F0KHQpKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6dCxzdGFydDp0aGlzLnN0YXJ0ZWRbdF0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW3RdfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPTAsbj1zKHRoaXMudGltZXMpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZS5uYW1lO3I9TWF0aC5tYXgoaS5sZW5ndGgscil9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXZhciBhLG89cyh0aGlzLnRpbWVzKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWUsdT1sLm5hbWUsYz1sLnN0YXJ0LGg9bC5lbmQ7ZS5wdXNoKCIiLmNvbmNhdCh1LnBhZEVuZChyKSwiICIpLmNvbmNhdChoLWMsIm1zXG4iKSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiBlLmpvaW4oIiIpfX1dKSx0fSgpO2Z1bmN0aW9uIE0odCxlKXt0cnl7dmFyIHI9KGU/bmV3IFVSTCh0LGUpOm5ldyBVUkwodCkpLnByb3RvY29sO3JldHVybiJodHRwOiI9PT1yfHwiaHR0cHM6Ij09PXJ9Y2F0Y2godCl7cmV0dXJuITF9fWUuU3RhdFRpbWVyPUY7dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bSh0aGlzLHQpfXJldHVybiB5KHQsbnVsbCxbe2tleToidG9EYXRlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO098fChPPW5ldyBSZWdFeHAoIl5EOihcXGR7NH0pKFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFxcZHsyfSk/KFtafCt8LV0pPyhcXGR7Mn0pPyc/KFxcZHsyfSk/Jz8iKSk7dmFyIGU9Ty5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXBhcnNlSW50KGVbMV0sMTApLG49cGFyc2VJbnQoZVsyXSwxMCk7bj1uPj0xJiZuPD0xMj9uLTE6MDt2YXIgaT1wYXJzZUludChlWzNdLDEwKTtpPWk+PTEmJmk8PTMxP2k6MTt2YXIgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDt2YXIgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDt2YXIgcz1wYXJzZUludChlWzZdLDEwKTtzPXM+PTAmJnM8PTU5P3M6MDt2YXIgbD1lWzddfHwiWiIsdT1wYXJzZUludChlWzhdLDEwKTt1PXU+PTAmJnU8PTIzP3U6MDt2YXIgYz1wYXJzZUludChlWzldLDEwKXx8MDtyZXR1cm4gYz1jPj0wJiZjPD01OT9jOjAsIi0iPT09bD8oYSs9dSxvKz1jKToiKyI9PT1sJiYoYS09dSxvLT1jKSxuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSxhLG8scykpfX1dKSx0fSgpO2Z1bmN0aW9uIEkodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe3ZhciBlPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpO3JldHVyblsoMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZV19cmV0dXJuIHQuc3RhcnRzV2l0aCgicmdiKCIpP3Quc2xpY2UoNCwtMSkuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KX0pKTp0LnN0YXJ0c1dpdGgoInJnYmEoIik/dC5zbGljZSg1LC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSkpLnNsaWNlKDAsMyk6KCgwLGkud2FybikoJ05vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIicuY29uY2F0KHQsJyInKSksWzAsMCwwXSl9ZS5QREZEYXRlU3RyaW5nPVJ9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZS5CYXNlU1ZHRmFjdG9yeT1lLkJhc2VDYW52YXNGYWN0b3J5PWUuQmFzZUNNYXBSZWFkZXJGYWN0b3J5PXZvaWQgMDt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkoKXtpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLGwpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PXMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8sbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLGwpfSkpfWwodS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe2EobyxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EobyxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PXModCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1zKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09cyhpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUmJnUodC5wcm90b3R5cGUsZSksciYmdSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9dGhpcy5fY3JlYXRlQ2FudmFzKHQsZSk7cmV0dXJue2NhbnZhczpyLGNvbnRleHQ6ci5nZXRDb250ZXh0KCIyZCIpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYoIXQuY2FudmFzKXRocm93IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWQiKTtpZihlPD0wfHxyPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjYW52YXMgc2l6ZSIpO3QuY2FudmFzLndpZHRoPWUsdC5jYW52YXMuaGVpZ2h0PXJ9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO3QuY2FudmFzLndpZHRoPTAsdC5jYW52YXMuaGVpZ2h0PTAsdC5jYW52YXM9bnVsbCx0LmNvbnRleHQ9bnVsbH19LHtrZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZUNhbnZhc0ZhY3Rvcnk9aDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnIsYT1lLmlzQ29tcHJlc3NlZCxvPXZvaWQgMCE9PWEmJmE7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pLHRoaXMuaXNDb21wcmVzc2VkPW99dmFyIGU7cmV0dXJuIGModCxbe2tleToiZmV0Y2giLHZhbHVlOihlPW8oaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsYSxvLHM9dGhpcztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZS5uYW1lLHRoaXMuYmFzZVVybCl7dC5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCAiYmFzZVVybCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgImNNYXBVcmwiIGFuZCAiY01hcFBhY2tlZCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO2Nhc2UgMzppZihyKXt0Lm5leHQ9NTticmVha310aHJvdyBuZXcgRXJyb3IoIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjYXNlIDU6cmV0dXJuIGE9dGhpcy5iYXNlVXJsK3IrKHRoaXMuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPXRoaXMuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUsdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKGEsbykuY2F0Y2goKGZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIi5jb25jYXQocy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiLCJDTWFwIGF0OiAiKS5jb25jYXQoYSkpfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuIil9fV0pLHR9KCk7ZS5CYXNlQ01hcFJlYWRlckZhY3Rvcnk9Zjt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5iYXNlVXJsLGk9dm9pZCAwPT09cj9udWxsOnI7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5LiIpLHRoaXMuYmFzZVVybD1pfXZhciBlO3JldHVybiBjKHQsW3trZXk6ImZldGNoIix2YWx1ZTooZT1vKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZmlsZW5hbWUsdGhpcy5iYXNlVXJsKXt0Lm5leHQ9MzticmVha310aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGFuZGFyZCBmb250ICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAic3RhbmRhcmRGb250RGF0YVVybCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtjYXNlIDM6aWYocil7dC5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpO2Nhc2UgNTpyZXR1cm4gbj0iIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQociksdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogIi5jb25jYXQobikpfSkpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1dKSx0fSgpO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bCh0aGlzLHQpLHRoaXMuY29uc3RydWN0b3I9PT10JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9cmV0dXJuIGModCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodDw9MHx8ZTw9MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTt2YXIgbj10aGlzLl9jcmVhdGVTVkcoInN2ZzpzdmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyfHwobi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiIi5jb25jYXQodCwicHgiKSksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIiIuY29uY2F0KGUsInB4IikpKSxuLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiLmNvbmNhdCh0LCIgIikuY29uY2F0KGUpKSxufX0se2tleToiY3JlYXRlRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX19LHtrZXk6Il9jcmVhdGVTVkciLHZhbHVlOmZ1bmN0aW9uKHQpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19XSksdH0oKTtlLkJhc2VTVkdGYWN0b3J5PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBpKHQpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxpKHQpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09aSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1pKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxsPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6byx0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm99dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpLHI9MDtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKTtvPD0yNTU/ZVtyKytdPW86KGVbcisrXT1vPj4+OCxlW3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KGU9dC5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGM9ci00KnUsaD1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCx1KSxmPTAsZD0wLHA9dGhpcy5oMSx2PXRoaXMuaDIseT0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MTE2MDEsYj0xMzcxNSxfPTA7Xzx1O18rKykxJl8/cD01KihwPShwXj1mPShmPShmPShmPWhbX10pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2OnY9NSoodj0odl49ZD0oZD0oZD0oZD1oW19dKSp5JnN8ZCpnJmwpPDwxNXxkPj4+MTcpKm0mc3xkKmImbCk8PDEzfHY+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goZj0wLGMpe2Nhc2UgMzpmXj1lWzQqdSsyXTw8MTY7Y2FzZSAyOmZePWVbNCp1KzFdPDw4O2Nhc2UgMTpmPShmPShmPShmXj1lWzQqdV0pKnkmc3xmKmcmbCk8PDE1fGY+Pj4xNykqbSZzfGYqYiZsLDEmdT9wXj1mOnZePWZ9dGhpcy5oMT1wLHRoaXMuaDI9dn19LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmgxLGU9dGhpcy5oMjtyZXR1cm4gdD0zOTgxODA2Nzk3Kih0Xj1lPj4+MSkmc3wzNjA0NSp0JmwsdD00NDQ5ODQ0MDMqKHRePShlPTQyODM1NDM1MTEqZSZzfCgyOTUwMTYzNzk3KihlPDwxNnx0Pj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSp0JmwsKCh0Xj0oZT0zMzAxODgyMzY2KmUmc3woMzEyMDQzNzg5MyooZTw8MTZ8dD4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZhKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NdXJtdXJIYXNoM182ND11fSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRm9udExvYWRlcj1lLkZvbnRGYWNlT2JqZWN0PXZvaWQgMDt2YXIgbj1yKDEpLGk9cigzKTtmdW5jdGlvbiBhKHQpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxhKHQpfWZ1bmN0aW9uIG8oKXtvPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbD1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLHMpJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sbyxzLGwpe3ZhciB1PWYodFtuXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWEoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxzLGwpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LHMsbCl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxzKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxzLGwpfSkpfWwodS5hcmcpfXZhciBvO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtzXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUsbCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWEodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIGUmJmgodC5wcm90b3R5cGUsZSksciYmaCh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWUub25VbnN1cHBvcnRlZEZlYXR1cmUsbj1lLm93bmVyRG9jdW1lbnQsaT12b2lkIDA9PT1uP2dsb2JhbFRoaXMuZG9jdW1lbnQ6bjtlLnN0eWxlRWxlbWVudCxjKHRoaXMsdCksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9cix0aGlzLl9kb2N1bWVudD1pLHRoaXMubmF0aXZlRm9udEZhY2VzPVtdLHRoaXMuc3R5bGVFbGVtZW50PW51bGwsdGhpcy5sb2FkaW5nUmVxdWVzdHM9W10sdGhpcy5sb2FkVGVzdEZvbnRJZD0wfXZhciBlLHI7cmV0dXJuIGYodCxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2godCksdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zdHlsZUVsZW1lbnR8fCh0aGlzLnN0eWxlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZCh0aGlzLnN0eWxlRWxlbWVudCkpO3ZhciBlPXRoaXMuc3R5bGVFbGVtZW50LnNoZWV0O2UuaW5zZXJ0UnVsZSh0LGUuY3NzUnVsZXMubGVuZ3RoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9bCh0aGlzLm5hdGl2ZUZvbnRGYWNlcyk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShyKX19Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9dGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOihlPW8oKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLGksYT10aGlzO3JldHVybiBvKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUuYXR0YWNoZWQmJiFlLm1pc3NpbmdGaWxlKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZihlLmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe3QubmV4dD0xOTticmVha31pZighKHI9ZS5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLHQucHJldj03LHQubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOnQubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IHQucHJldj0xMix0LnQwPXQuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmV9KSwoMCxuLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdCh0LnQwLCInLiIpKSxlLmRpc2FibGVGb250RmFjZT0hMCx0LnQwO2Nhc2UgMTg6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEoaT1lLmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7dC5uZXh0PTI2O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShpKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gdC5uZXh0PTI2LG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1hLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KTthLl9wcmVwYXJlRm9udExvYWRFdmVudChlLHIpfSkpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgYT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyh0KXtzKGEsbixpLG8sbCwibmV4dCIsdCl9ZnVuY3Rpb24gbCh0KXtzKGEsbixpLG8sbCwidGhyb3ciLHQpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0LGU9IShudWxsPT09KHQ9dGhpcy5fZG9jdW1lbnQpfHx2b2lkIDA9PT10fHwhdC5mb250cyk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PSExO3JldHVybihpLmlzTm9kZUpTfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL01vemlsbGFcLzUuMC4qP3J2OlxkKy4qPyBHZWNrby8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkmJih0PSEwKSwoMCxuLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfX0se2tleToiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRpbmdSZXF1ZXN0cyxyPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLG4uYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDtlLmxlbmd0aD4wJiZlWzBdLmRvbmU7KXt2YXIgdD1lLnNoaWZ0KCk7c2V0VGltZW91dCh0LmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6dH07cmV0dXJuIGUucHVzaChyKSxyfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9fSx7a2V5OiJfcHJlcGFyZUZvbnRMb2FkRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0LmNoYXJDb2RlQXQoZSk8PDI0fHQuY2hhckNvZGVBdChlKzEpPDwxNnx0LmNoYXJDb2RlQXQoZSsyKTw8OHwyNTUmdC5jaGFyQ29kZUF0KGUrMyl9ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStuK3Quc3Vic3RyaW5nKGUrcil9dmFyIGEsbyxzPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9MSxzLmhlaWdodD0xO3ZhciBsPXMuZ2V0Q29udGV4dCgiMmQiKSx1PTAsYz0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxmPTE0ODIxODQ3OTIsZD1yKGg9aShoLDk3NixjLmxlbmd0aCxjKSwxNik7Zm9yKGE9MCxvPWMubGVuZ3RoLTM7YTxvO2ErPTQpZD1kLWYrcihjLGEpfDA7YTxjLmxlbmd0aCYmKGQ9ZC1mK3IoYysiWFhYIixhKXwwKSxoPWkoaCwxNiw0LCgwLG4uc3RyaW5nMzIpKGQpKTt2YXIgcD0idXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsIi5jb25jYXQoYnRvYShoKSwiKTsiKSx2PSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQoYywnIjtzcmM6JykuY29uY2F0KHAsIn0iKTt0aGlzLmluc2VydFJ1bGUodik7dmFyIHk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7eS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHkuc3R5bGUud2lkdGg9eS5zdHlsZS5oZWlnaHQ9IjEwcHgiLHkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix5LnN0eWxlLnRvcD15LnN0eWxlLmxlZnQ9IjBweCI7Zm9yKHZhciBtPTAsZz1bdC5sb2FkZWROYW1lLGNdO208Zy5sZW5ndGg7bSsrKXt2YXIgYj1nW21dLF89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO18udGV4dENvbnRlbnQ9IkhpIixfLnN0eWxlLmZvbnRGYW1pbHk9Yix5LmFwcGVuZChfKX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZCh5KSxmdW5jdGlvbiB0KGUscil7aWYoKyt1PjMwKXJldHVybigwLG4ud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtsLmZvbnQ9IjMwcHggIitlLGwuZmlsbFRleHQoIi4iLDAsMjApLGwuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dCh0LmJpbmQobnVsbCxlLHIpKX0oYywoZnVuY3Rpb24oKXt5LnJlbW92ZSgpLGUuY29tcGxldGUoKX0pKX19XSksdH0oKTtlLkZvbnRMb2FkZXI9ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgbj1yLmlzRXZhbFN1cHBvcnRlZCxpPXZvaWQgMD09PW58fG4sYT1yLmRpc2FibGVGb250RmFjZSxvPXZvaWQgMCE9PWEmJmEscz1yLmlnbm9yZUVycm9ycyxsPXZvaWQgMCE9PXMmJnMsdT1yLm9uVW5zdXBwb3J0ZWRGZWF0dXJlLGg9ci5mb250UmVnaXN0cnksZj12b2lkIDA9PT1oP251bGw6aDtmb3IodmFyIGQgaW4gYyh0aGlzLHQpLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXRoaXNbZF09ZVtkXTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWksdGhpcy5kaXNhYmxlRm9udEZhY2U9ITA9PT1vLHRoaXMuaWdub3JlRXJyb3JzPSEwPT09bCx0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZT11LHRoaXMuZm9udFJlZ2lzdHJ5PWZ9cmV0dXJuIGYodCxbe2tleToiY3JlYXRlTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZTtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtpZih0aGlzLmNzc0ZvbnRJbmZvKXt2YXIgcj17d2VpZ2h0OnRoaXMuY3NzRm9udEluZm8uZm9udFdlaWdodH07dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHIuc3R5bGU9Im9ibGlxdWUgIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwiZGVnIikpLGU9bmV3IEZvbnRGYWNlKHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSx0aGlzLmRhdGEscil9ZWxzZSBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gbnVsbD09PSh0PXRoaXMuZm9udFJlZ2lzdHJ5KXx8dm9pZCAwPT09dHx8dC5yZWdpc3RlckZvbnQodGhpcyksZX19LHtrZXk6ImNyZWF0ZUZvbnRGYWNlUnVsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDt2YXIgZSxyPSgwLG4uYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxpPSJ1cmwoZGF0YToiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCI7YmFzZTY0LCIpLmNvbmNhdChidG9hKHIpLCIpOyIpO2lmKHRoaXMuY3NzRm9udEluZm8pe3ZhciBhPSJmb250LXdlaWdodDogIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0LCI7Iik7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKGErPSJmb250LXN0eWxlOiBvYmxpcXVlICIuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUsImRlZzsiKSksZT0nQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IicuY29uY2F0KHRoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseSwnIjsnKS5jb25jYXQoYSwic3JjOiIpLmNvbmNhdChpLCJ9Iil9ZWxzZSBlPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQoaSwifSIpO3JldHVybiBudWxsPT09KHQ9dGhpcy5mb250UmVnaXN0cnkpfHx2b2lkIDA9PT10fHx0LnJlZ2lzdGVyRm9udCh0aGlzLGkpLGV9fSx7a2V5OiJnZXRQYXRoR2VuZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbZV0pcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07dmFyIHI7dHJ5e3I9dC5nZXQodGhpcy5sb2FkZWROYW1lKyJfcGF0aF8iK2UpfWNhdGNoKHQpe2lmKCF0aGlzLmlnbm9yZUVycm9ycyl0aHJvdyB0O3JldHVybiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aH0pLCgwLG4ud2FybikoJ2dldFBhdGhHZW5lcmF0b3IgLSBpZ25vcmluZyBjaGFyYWN0ZXI6ICInLmNvbmNhdCh0LCciLicpKSx0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7fX1pZih0aGlzLmlzRXZhbFN1cHBvcnRlZCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBpLGE9W10sbz1sKHIpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PXZvaWQgMCE9PXMuYXJncz9zLmFyZ3Muam9pbigiLCIpOiIiO2EucHVzaCgiYy4iLHMuY21kLCIoIix1LCIpO1xuIil9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLGEuam9pbigiIikpfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT1sKHIpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTsic2NhbGUiPT09YS5jbWQmJihhLmFyZ3M9W2UsLWVdKSx0W2EuY21kXS5hcHBseSh0LGEuYXJncyl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfX19fV0pLHR9KCk7ZS5Gb250RmFjZU9iamVjdD1wfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDE0Miksbz1yKDE0Mykscz1yKDMpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9Zih0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHxmKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBmKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBkKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz00MDk2LGI9cy5pc05vZGVKUyYmInVuZGVmaW5lZCI9PXR5cGVvZiBQYXRoMkQ/LTE6MWUzLF89MTYsdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dih0aGlzLHQpLHRoaXMuY2FudmFzRmFjdG9yeT1lLHRoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtyZXR1cm4gdm9pZCAwIT09dGhpcy5jYWNoZVt0XT8obj10aGlzLmNhY2hlW3RdLHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChuLGUscikpOihuPXRoaXMuY2FudmFzRmFjdG9yeS5jcmVhdGUoZSxyKSx0aGlzLmNhY2hlW3RdPW4pLG59fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmNhY2hlW3RdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuY2FjaGUpe3ZhciBlPXRoaXMuY2FjaGVbdF07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuY2FjaGVbdF19fX1dKSx0fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixhLG8scyxsLHUsYyl7dmFyIGY9aCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpLDYpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWZbNF0sZz1mWzVdO2lmKDA9PT1wJiYwPT09dil7dmFyIGI9cypkK20sXz1NYXRoLnJvdW5kKGIpLHc9bCp5K2csQT1NYXRoLnJvdW5kKHcpLGs9KHMrdSkqZCttLFM9TWF0aC5hYnMoTWF0aC5yb3VuZChrKS1fKXx8MSx4PShsK2MpKnkrZyxFPU1hdGguYWJzKE1hdGgucm91bmQoeCktQSl8fDE7cmV0dXJuIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwwLDAsTWF0aC5zaWduKHkpLF8sQSksdC5kcmF3SW1hZ2UoZSxyLG4sYSxvLDAsMCxTLEUpLHQuc2V0VHJhbnNmb3JtKGQscCx2LHksbSxnKSxbUyxFXX1pZigwPT09ZCYmMD09PXkpe3ZhciBQPWwqdittLFQ9TWF0aC5yb3VuZChQKSxDPXMqcCtnLE89TWF0aC5yb3VuZChDKSxGPShsK2MpKnYrbSxNPU1hdGguYWJzKE1hdGgucm91bmQoRiktVCl8fDEsUj0ocyt1KSpwK2csST1NYXRoLmFicyhNYXRoLnJvdW5kKFIpLU8pfHwxO3JldHVybiB0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbihwKSxNYXRoLnNpZ24odiksMCxULE8pLHQuZHJhd0ltYWdlKGUscixuLGEsbywwLDAsSSxNKSx0LnNldFRyYW5zZm9ybShkLHAsdix5LG0sZyksW0ksTV19cmV0dXJuIHQuZHJhd0ltYWdlKGUscixuLGEsbyxzLGwsdSxjKSxbTWF0aC5oeXBvdChkLHApKnUsTWF0aC5oeXBvdCh2LHkpKmNdfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3YodGhpcyx0KSx0aGlzLmFscGhhSXNTaGFwZT0hMSx0aGlzLmZvbnRTaXplPTAsdGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeFNjYWxlPTEsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy54PTAsdGhpcy55PTAsdGhpcy5saW5lWD0wLHRoaXMubGluZVk9MCx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMudGV4dFJpc2U9MCx0aGlzLmZpbGxDb2xvcj0iIzAwMDAwMCIsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5wYXR0ZXJuRmlsbD0hMSx0aGlzLmZpbGxBbHBoYT0xLHRoaXMuc3Ryb2tlQWxwaGE9MSx0aGlzLmxpbmVXaWR0aD0xLHRoaXMuYWN0aXZlU01hc2s9bnVsbCx0aGlzLnRyYW5zZmVyTWFwcz1udWxsLHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwwLGUscl0pfXJldHVybiBtKHQsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQuY2xpcEJveD10aGlzLmNsaXBCb3guc2xpY2UoKSx0fX0se2tleToic2V0Q3VycmVudFBvaW50Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMueD10LHRoaXMueT1lfX0se2tleToidXBkYXRlUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWgobi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHJdLHQpLDIpO2U9aVswXSxyPWlbMV0sdGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlKSx0aGlzLm1pblk9TWF0aC5taW4odGhpcy5taW5ZLHIpLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZSksdGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxyKX19LHtrZXk6InVwZGF0ZVJlY3RNaW5NYXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCksaT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyKSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLHJbMF0saVswXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxyWzFdLGlbMV0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsclswXSxpWzBdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHJbMV0saVsxXSl9fSx7a2V5OiJ1cGRhdGVTY2FsaW5nUGF0aE1pbk1heCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtuLlV0aWwuc2NhbGVNaW5NYXgodCxlKSx0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGVbMF0pLHRoaXMubWF4WD1NYXRoLm1heCh0aGlzLm1heFgsZVsxXSksdGhpcy5taW5ZPU1hdGgubWluKHRoaXMubWluWSxlWzJdKSx0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLGVbM10pfX0se2tleToidXBkYXRlQ3VydmVQYXRoTWluTWF4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjKXt2YXIgaD1uLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxyLGksYSxvLHMsbCx1KTtpZihjKXJldHVybiBjWzBdPU1hdGgubWluKGNbMF0saFswXSxoWzJdKSxjWzFdPU1hdGgubWF4KGNbMV0saFswXSxoWzJdKSxjWzJdPU1hdGgubWluKGNbMl0saFsxXSxoWzNdKSx2b2lkKGNbM109TWF0aC5tYXgoY1szXSxoWzFdLGhbM10pKTt0aGlzLnVwZGF0ZVJlY3RNaW5NYXgodCxoKX19LHtrZXk6ImdldFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1bdGhpcy5taW5YLHRoaXMubWluWSx0aGlzLm1heFgsdGhpcy5tYXhZXTtpZih0PT09YS5QYXRoVHlwZS5TVFJPS0Upe2V8fCgwLG4udW5yZWFjaGFibGUpKCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uIik7dmFyIGk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG89aVswXSp0aGlzLmxpbmVXaWR0aC8yLHM9aVsxXSp0aGlzLmxpbmVXaWR0aC8yO3JbMF0tPW8sclsxXS09cyxyWzJdKz1vLHJbM10rPXN9cmV0dXJuIHJ9fSx7a2V5OiJ1cGRhdGVDbGlwRnJvbVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bi5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsdGhpcy5nZXRQYXRoQm91bmRpbmdCb3goKSk7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHR8fFswLDAsMCwwXSl9fSx7a2V5OiJpc0VtcHR5Q2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5YPT09MS8wfX0se2tleToic3RhcnROZXdQYXRoQW5kQ2xpcEJveCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jbGlwQm94PXQsdGhpcy5taW5YPTEvMCx0aGlzLm1pblk9MS8wLHRoaXMubWF4WD0wLHRoaXMubWF4WT0wfX0se2tleToiZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YS5QYXRoVHlwZS5GSUxMLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIG4uVXRpbC5pbnRlcnNlY3QodGhpcy5jbGlwQm94LHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsZSkpfX1dKSx0fSgpO2Z1bmN0aW9uIFModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGF0YSYmZSBpbnN0YW5jZW9mIEltYWdlRGF0YSl0LnB1dEltYWdlRGF0YShlLDAsMCk7ZWxzZXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD1lLmhlaWdodCxwPWUud2lkdGgsdj1kJV8seT0oZC12KS9fLG09MD09PXY/eTp5KzEsZz10LmNyZWF0ZUltYWdlRGF0YShwLF8pLGI9MCx3PWUuZGF0YSxBPWcuZGF0YTtpZihyKXN3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnU9clswXSxjPXJbMF0saD1yWzBdLGY9clswXTticmVhaztjYXNlIDQ6dT1yWzBdLGM9clsxXSxoPXJbMl0sZj1yWzNdfWlmKGUua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgaz13LmJ5dGVMZW5ndGgsUz1uZXcgVWludDMyQXJyYXkoQS5idWZmZXIsMCxBLmJ5dGVMZW5ndGg+PjIpLHg9Uy5sZW5ndGgsRT1wKzc+PjMsUD00Mjk0OTY3Mjk1LFQ9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtpZihmJiYyNTU9PT1mWzBdJiYwPT09ZlsyNTVdKXt2YXIgQz1bVCxQXTtQPUNbMF0sVD1DWzFdfWZvcihhPTA7YTxtO2ErKyl7Zm9yKHM9YTx5P186dixpPTAsbz0wO288cztvKyspe2Zvcih2YXIgTz1rLWIsRj0wLE09Tz5FP3A6OCpPLTcsUj0tOCZNLEk9MCxqPTA7RjxSO0YrPTgpaj13W2IrK10sU1tpKytdPTEyOCZqP1A6VCxTW2krK109NjQmaj9QOlQsU1tpKytdPTMyJmo/UDpULFNbaSsrXT0xNiZqP1A6VCxTW2krK109OCZqP1A6VCxTW2krK109NCZqP1A6VCxTW2krK109MiZqP1A6VCxTW2krK109MSZqP1A6VDtmb3IoO0Y8TTtGKyspMD09PUkmJihqPXdbYisrXSxJPTEyOCksU1tpKytdPWomST9QOlQsST4+PTF9Zm9yKDtpPHg7KVNbaSsrXT0wO3QucHV0SW1hZ2VEYXRhKGcsMCxhKl8pfX1lbHNlIGlmKGUua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe3ZhciBMPSEhKHV8fGN8fGgpO2ZvcihvPTAsbD1wKl8qNCxhPTA7YTx5O2ErKyl7aWYoQS5zZXQody5zdWJhcnJheShiLGIrbCkpLGIrPWwsTClmb3IodmFyIEQ9MDtEPGw7RCs9NCl1JiYoQVtEKzBdPXVbQVtEKzBdXSksYyYmKEFbRCsxXT1jW0FbRCsxXV0pLGgmJihBW0QrMl09aFtBW0QrMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsbyksbys9X31pZihhPG0pe2lmKGw9cCp2KjQsQS5zZXQody5zdWJhcnJheShiLGIrbCkpLEwpZm9yKHZhciBOPTA7TjxsO04rPTQpdSYmKEFbTiswXT11W0FbTiswXV0pLGMmJihBW04rMV09Y1tBW04rMV1dKSxoJiYoQVtOKzJdPWhbQVtOKzJdXSk7dC5wdXRJbWFnZURhdGEoZywwLG8pfX1lbHNle2lmKGUua2luZCE9PW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCl0aHJvdyBuZXcgRXJyb3IoImJhZCBpbWFnZSBraW5kOiAiLmNvbmNhdChlLmtpbmQpKTt2YXIgVT0hISh1fHxjfHxoKTtmb3IobD1wKihzPV8pLGE9MDthPG07YSsrKXtmb3IoYT49eSYmKGw9cCoocz12KSksaT0wLG89bDtvLS07KUFbaSsrXT13W2IrK10sQVtpKytdPXdbYisrXSxBW2krK109d1tiKytdLEFbaSsrXT0yNTU7aWYoVSlmb3IodmFyIFc9MDtXPGk7Vys9NCl1JiYoQVtXKzBdPXVbQVtXKzBdXSksYyYmKEFbVysxXT1jW0FbVysxXV0pLGgmJihBW1crMl09aFtBW1crMl1dKTt0LnB1dEltYWdlRGF0YShnLDAsYSpfKX19fX1mdW5jdGlvbiB4KHQsZSl7aWYoZS5iaXRtYXApdC5kcmF3SW1hZ2UoZS5iaXRtYXAsMCwwKTtlbHNlIGZvcih2YXIgcj1lLmhlaWdodCxuPWUud2lkdGgsaT1yJV8sYT0oci1pKS9fLHM9MD09PWk/YTphKzEsbD10LmNyZWF0ZUltYWdlRGF0YShuLF8pLHU9MCxjPWUuZGF0YSxoPWwuZGF0YSxmPTA7ZjxzO2YrKyl7dmFyIGQ9ZjxhP186aTt1PSgwLG8uYXBwbHlNYXNrSW1hZ2VEYXRhKSh7c3JjOmMsc3JjUG9zOnUsZGVzdDpoLHdpZHRoOm4saGVpZ2h0OmR9KS5zcmNQb3MsdC5wdXRJbWFnZURhdGEobCwwLGYqXyl9fWZ1bmN0aW9uIEUodCxlKXtmb3IodmFyIHI9MCxuPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTt2b2lkIDAhPT10W2ldJiYoZVtpXT10W2ldKX12b2lkIDAhPT10LnNldExpbmVEYXNoJiYoZS5zZXRMaW5lRGFzaCh0LmdldExpbmVEYXNoKCkpLGUubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gUCh0LGUpe3Quc3Ryb2tlU3R5bGU9dC5maWxsU3R5bGU9ZXx8IiMwMDAwMDAiLHQuZmlsbFJ1bGU9Im5vbnplcm8iLHQuZ2xvYmFsQWxwaGE9MSx0LmxpbmVXaWR0aD0xLHQubGluZUNhcD0iYnV0dCIsdC5saW5lSm9pbj0ibWl0ZXIiLHQubWl0ZXJMaW1pdD0xMCx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuZm9udD0iMTBweCBzYW5zLXNlcmlmIix2b2lkIDAhPT10LnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChbXSksdC5saW5lRGFzaE9mZnNldD0wKX1mdW5jdGlvbiBUKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTM7YTxpO2ErPTQpe3ZhciBvPXRbYV07aWYoMD09PW8pdFthLTNdPWUsdFthLTJdPXIsdFthLTFdPW47ZWxzZSBpZihvPDI1NSl7dmFyIHM9MjU1LW87dFthLTNdPXRbYS0zXSpvK2Uqcz4+OCx0W2EtMl09dFthLTJdKm8rcipzPj44LHRbYS0xXT10W2EtMV0qbytuKnM+Pjh9fX1mdW5jdGlvbiBDKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT0zO2k8bjtpKz00KXt2YXIgYT1yP3JbdFtpXV06dFtpXTtlW2ldPWVbaV0qYSouMDAzOTIxNTY4NjI3NDUwOTh8MH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MztpPG47aSs9NCl7dmFyIGE9NzcqdFtpLTNdKzE1Mip0W2ktMl0rMjgqdFtpLTFdO2VbaV09cj9lW2ldKnJbYT4+OF0+Pjg6ZVtpXSphPj4xNn19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtyWzBdPU1hdGguZnJvdW5kKHJbMF0pLHJbMV09TWF0aC5mcm91bmQoclsxXSk7dmFyIGE9TWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MSkqaS5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO3JldHVybiB2b2lkIDAhPT1lP2U6clswXTw9YXx8clsxXTw9YX12YXIgTT1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLFI9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxJPXt9LGo9e30sTD1uZXcgV2Vha1NldCxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzKXt2YXIgbCx1LGM9YS5vcHRpb25hbENvbnRlbnRDb25maWcsaD1hLm1hcmtlZENvbnRlbnRTdGFjayxmPXZvaWQgMD09PWg/bnVsbDpoO3YodGhpcyx0KSxmdW5jdGlvbih0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KGw9dGhpcyx1PUwpLHUuYWRkKGwpLHRoaXMuY3R4PWUsdGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnN0YXRlU3RhY2s9W10sdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMucGVuZGluZ0VPRmlsbD0hMSx0aGlzLnJlcz1udWxsLHRoaXMueG9ianM9bnVsbCx0aGlzLmNvbW1vbk9ianM9cix0aGlzLm9ianM9bix0aGlzLmNhbnZhc0ZhY3Rvcnk9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuc3VzcGVuZGVkQ3R4PW51bGwsdGhpcy5jb250ZW50VmlzaWJsZT0hMCx0aGlzLm1hcmtlZENvbnRlbnRTdGFjaz1mfHxbXSx0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZz1jLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHcodGhpcy5jYW52YXNGYWN0b3J5KSx0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXAsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPW8sdGhpcy52aWV3cG9ydFNjYWxlPTEsdGhpcy5vdXRwdXRTY2FsZVg9MSx0aGlzLm91dHB1dFNjYWxlWT0xLHRoaXMuYmFja2dyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmJhY2tncm91bmQpfHxudWxsLHRoaXMuZm9yZWdyb3VuZENvbG9yPShudWxsPT1zP3ZvaWQgMDpzLmZvcmVncm91bmQpfHxudWxsLHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsdGhpcy5fY2FjaGVkQml0bWFwc01hcD1uZXcgTWFwfXJldHVybiBtKHQsW3trZXk6ImdldE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX19LHtrZXk6ImJlZ2luRHJhd2luZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuPXQudHJhbnNmb3JtLGE9dC52aWV3cG9ydCxvPXQudHJhbnNwYXJlbmN5LHM9dm9pZCAwIT09byYmbyx1PXQuYmFja2dyb3VuZCxjPXZvaWQgMD09PXU/bnVsbDp1LGY9dGhpcy5jdHguY2FudmFzLndpZHRoLGQ9dGhpcy5jdHguY2FudmFzLmhlaWdodCxwPWN8fCIjZmZmZmZmIjtpZih0aGlzLmN0eC5zYXZlKCksdGhpcy5mb3JlZ3JvdW5kQ29sb3ImJnRoaXMuYmFja2dyb3VuZENvbG9yKXt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5mb3JlZ3JvdW5kQ29sb3I7dmFyIHY9dGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcjt2YXIgeSxtLGc9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5jdHguZmlsbFN0eWxlO2lmKHRoaXMuY3R4LmZpbGxTdHlsZT1wLHk9InN0cmluZyI9PXR5cGVvZihtPXRoaXMuY3R4LmZpbGxTdHlsZSkmJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChtKSwiIzAwMDAwMCI9PT12JiYiI2ZmZmZmZiI9PT1nfHx2PT09Z3x8IXkpdGhpcy5mb3JlZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbDtlbHNle3ZhciBiPWgoKDAsaS5nZXRSR0IpKG0pLDMpLF89YlswXSx3PWJbMV0sQT1iWzJdLGs9ZnVuY3Rpb24odCl7cmV0dXJuKHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9LFM9TWF0aC5yb3VuZCguMjEyNiprKF8pKy43MTUyKmsodykrLjA3MjIqayhBKSk7dGhpcy5zZWxlY3RDb2xvcj1mdW5jdGlvbih0LGUscil7dmFyIG49LjIxMjYqayh0KSsuNzE1MiprKGUpKy4wNzIyKmsocik7cmV0dXJuIE1hdGgucm91bmQobik9PT1TP2c6dn19fWlmKHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8cCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsZixkKSx0aGlzLmN0eC5yZXN0b3JlKCkscyl7dmFyIHgsRT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLGYsZCk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHgsdGhpcy50cmFuc3BhcmVudENhbnZhcz1FLmNhbnZhcyx0aGlzLmN0eD1FLmNvbnRleHQsdGhpcy5jdHguc2F2ZSgpLCh4PXRoaXMuY3R4KS50cmFuc2Zvcm0uYXBwbHkoeCxsKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jb21wb3NpdGVDdHgpKSl9dGhpcy5jdHguc2F2ZSgpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpLG4mJigocj10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KHIsbChuKSksdGhpcy5vdXRwdXRTY2FsZVg9blswXSx0aGlzLm91dHB1dFNjYWxlWT1uWzBdKSwoZT10aGlzLmN0eCkudHJhbnNmb3JtLmFwcGx5KGUsbChhLnRyYW5zZm9ybSkpLHRoaXMudmlld3BvcnRTY2FsZT1hLnNjYWxlLHRoaXMuYmFzZVRyYW5zZm9ybT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KX19LHtrZXk6ImV4ZWN1dGVPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuYXJnc0FycmF5LG89dC5mbkFycmF5LHM9ZXx8MCxsPWEubGVuZ3RoO2lmKGw9PT1zKXJldHVybiBzO2Zvcih2YXIgdSxoPWwtcz4xMCYmImZ1bmN0aW9uIj09dHlwZW9mIHIsZj1oP0RhdGUubm93KCkrMTU6MCxkPTAscD10aGlzLmNvbW1vbk9ianMsdj10aGlzLm9ianM7Oyl7aWYodm9pZCAwIT09aSYmcz09PWkubmV4dEJyZWFrUG9pbnQpcmV0dXJuIGkuYnJlYWtJdChzLHIpLHM7aWYoKHU9b1tzXSkhPT1uLk9QUy5kZXBlbmRlbmN5KXRoaXNbdV0uYXBwbHkodGhpcyxhW3NdKTtlbHNle3ZhciB5LG09YyhhW3NdKTt0cnl7Zm9yKG0ucygpOyEoeT1tLm4oKSkuZG9uZTspe3ZhciBnPXkudmFsdWUsYj1nLnN0YXJ0c1dpdGgoImdfIik/cDp2O2lmKCFiLmhhcyhnKSlyZXR1cm4gYi5nZXQoZyxyKSxzfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19aWYoKytzPT09bClyZXR1cm4gcztpZihoJiYrK2Q+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7ZD0wfX19fSx7a2V5OiJlbmREcmF3aW5nIix2YWx1ZTpmdW5jdGlvbigpe3UodGhpcyxMLE4pLmNhbGwodGhpcyksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTt2YXIgdCxlPWModGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcixuPXQudmFsdWUsaT1jKG4udmFsdWVzKCkpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTsidW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQmJihhLndpZHRoPWEuaGVpZ2h0PTApfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1uLmNsZWFyKCl9fWNhdGNoKHQpe2UuZSh0KX1maW5hbGx5e2UuZigpfXRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKX19LHtrZXk6Il9zY2FsZUltYWdlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9dC53aWR0aCxhPXQuaGVpZ2h0LG89TWF0aC5tYXgoTWF0aC5oeXBvdChlWzBdLGVbMV0pLDEpLHM9TWF0aC5tYXgoTWF0aC5oeXBvdChlWzJdLGVbM10pLDEpLGw9aSx1PWEsYz0icHJlc2NhbGUxIjtvPjImJmw+MXx8cz4yJiZ1PjE7KXt2YXIgaD1sLGY9dTtvPjImJmw+MSYmKG8vPWwvKGg9TWF0aC5jZWlsKGwvMikpKSxzPjImJnU+MSYmKHMvPXUvKGY9TWF0aC5jZWlsKHUvMikpKSwobj0ocj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjLGgsZikpLmNvbnRleHQpLmNsZWFyUmVjdCgwLDAsaCxmKSxuLmRyYXdJbWFnZSh0LDAsMCxsLHUsMCwwLGgsZiksdD1yLmNhbnZhcyxsPWgsdT1mLGM9InByZXNjYWxlMSI9PT1jPyJwcmVzY2FsZTIiOiJwcmVzY2FsZTEifXJldHVybntpbWc6dCxwYWludFdpZHRoOmwscGFpbnRIZWlnaHQ6dX19fSx7a2V5OiJfY3JlYXRlTWFza0NhbnZhcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixvLHMsdT10aGlzLmN0eCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXRoaXMuY3VycmVudC5maWxsQ29sb3IsZD10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHUpO2lmKCh0LmJpdG1hcHx8dC5kYXRhKSYmdC5jb3VudD4xKXt2YXIgdj10LmJpdG1hcHx8dC5kYXRhLmJ1ZmZlcjtyPUpTT04uc3RyaW5naWZ5KGQ/cDpbcC5zbGljZSgwLDQpLGZdKSwoZT10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldCh2KSl8fChlPW5ldyBNYXAsdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQodixlKSk7dmFyIHk9ZS5nZXQocik7aWYoeSYmIWQpcmV0dXJue2NhbnZhczp5LG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihwWzBdLHBbMl0pK3BbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihwWzFdLHBbM10pK3BbNV0pfTtvPXl9b3x8eCgocz10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsYyxoKSkuY29udGV4dCx0KTt2YXIgbT1uLlV0aWwudHJhbnNmb3JtKHAsWzEvYywwLDAsLTEvaCwwLDBdKTttPW4uVXRpbC50cmFuc2Zvcm0obSxbMSwwLDAsMSwwLC1oXSk7dmFyIGc9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLDBdLG0pLGI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtjLGhdLG0pLF89bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2dbMF0sZ1sxXSxiWzBdLGJbMV1dKSx3PU1hdGgucm91bmQoX1syXS1fWzBdKXx8MSxrPU1hdGgucm91bmQoX1szXS1fWzFdKXx8MSxTPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJmaWxsQ2FudmFzIix3LGspLEU9Uy5jb250ZXh0LFA9TWF0aC5taW4oZ1swXSxiWzBdKSxUPU1hdGgubWluKGdbMV0sYlsxXSk7RS50cmFuc2xhdGUoLVAsLVQpLEUudHJhbnNmb3JtLmFwcGx5KEUsbChtKSksb3x8KG89KG89dGhpcy5fc2NhbGVJbWFnZShzLmNhbnZhcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSkpLmltZyxlJiZkJiZlLnNldChyLG8pKSxFLmltYWdlU21vb3RoaW5nRW5hYmxlZD1GKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkoRSksdC5pbnRlcnBvbGF0ZSksQShFLG8sMCwwLG8ud2lkdGgsby5oZWlnaHQsMCwwLGMsaCksRS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7dmFyIEM9bi5VdGlsLnRyYW5zZm9ybSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShFKSxbMSwwLDAsMSwtUCwtVF0pO3JldHVybiBFLmZpbGxTdHlsZT1kP2YuZ2V0UGF0dGVybih1LHRoaXMsQyxhLlBhdGhUeXBlLkZJTEwpOmYsRS5maWxsUmVjdCgwLDAsYyxoKSxlJiYhZCYmKHRoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIiksZS5zZXQocixTLmNhbnZhcykpLHtjYW52YXM6Uy5jYW52YXMsb2Zmc2V0WDpNYXRoLnJvdW5kKFApLG9mZnNldFk6TWF0aC5yb3VuZChUKX19fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLmN1cnJlbnQubGluZVdpZHRoJiYodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsKSx0aGlzLmN1cnJlbnQubGluZVdpZHRoPXQsdGhpcy5jdHgubGluZVdpZHRoPXR9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lQ2FwPU1bdF19fSx7a2V5OiJzZXRMaW5lSm9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHgubGluZUpvaW49Ult0XX19LHtrZXk6InNldE1pdGVyTGltaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldERhc2giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jdHg7dm9pZCAwIT09ci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2godCksci5saW5lRGFzaE9mZnNldD1lKX19LHtrZXk6InNldFJlbmRlcmluZ0ludGVudCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0RmxhdG5lc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe319LHtrZXk6InNldEdTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1jKHQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49aChlLnZhbHVlLDIpLGk9blswXSxhPW5bMV07c3dpdGNoKGkpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGEpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChhKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGEpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChhKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChhWzBdLGFbMV0pO2JyZWFrO2Nhc2UiUkkiOnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGEpO2JyZWFrO2Nhc2UiRkwiOnRoaXMuc2V0RmxhdG5lc3MoYSk7YnJlYWs7Y2FzZSJGb250Ijp0aGlzLnNldEZvbnQoYVswXSxhWzFdKTticmVhaztjYXNlIkNBIjp0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9YTticmVhaztjYXNlImNhIjp0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWEsdGhpcy5jdHguZ2xvYmFsQWxwaGE9YTticmVhaztjYXNlIkJNIjp0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YTticmVhaztjYXNlIlNNYXNrIjp0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9YT90aGlzLnRlbXBTTWFzazpudWxsLHRoaXMudGVtcFNNYXNrPW51bGwsdGhpcy5jaGVja1NNYXNrU3RhdGUoKTticmVhaztjYXNlIlRSIjp0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzPWF9fX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19fSx7a2V5OiJpblNNYXNrTW9kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnN1c3BlbmRlZEN0eH19LHtrZXk6ImNoZWNrU01hc2tTdGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluU01hc2tNb2RlO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzayYmIXQ/dGhpcy5iZWdpblNNYXNrTW9kZSgpOiF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJnQmJnRoaXMuZW5kU01hc2tNb2RlKCl9fSx7a2V5OiJiZWdpblNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmluU01hc2tNb2RlKXRocm93IG5ldyBFcnJvcigiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZSIpO3ZhciB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsbj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhyLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9bi5jb250ZXh0O3ZhciBhPXRoaXMuY3R4O2Euc2V0VHJhbnNmb3JtLmFwcGx5KGEsbCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSkpLEUodGhpcy5zdXNwZW5kZWRDdHgsYSksZnVuY3Rpb24odCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlLHQuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlLHQuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZSx0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlLHQuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZSx0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm0sdC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtLHQuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm0sdC5fX29yaWdpbmFsQ2xpcD10LmNsaXAsdC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvLHQuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbyx0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbyx0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdCx0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGgsdC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoLHQuX3JlbW92ZU1pcnJvcmluZz1mdW5jdGlvbigpe3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlLHQucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlLHQucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZSx0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlLHQudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZSx0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm0sdC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtLHQucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0sdC5jbGlwPXQuX19vcmlnaW5hbENsaXAsdC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvLHQubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbyx0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyx0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdCx0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGgsdC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoLGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9LHQuc2F2ZT1mdW5jdGlvbigpe2Uuc2F2ZSgpLHRoaXMuX19vcmlnaW5hbFNhdmUoKX0sdC5yZXN0b3JlPWZ1bmN0aW9uKCl7ZS5yZXN0b3JlKCksdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe2UudHJhbnNsYXRlKHQsciksdGhpcy5fX29yaWdpbmFsVHJhbnNsYXRlKHQscil9LHQuc2NhbGU9ZnVuY3Rpb24odCxyKXtlLnNjYWxlKHQsciksdGhpcy5fX29yaWdpbmFsU2NhbGUodCxyKX0sdC50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UudHJhbnNmb3JtKHQscixuLGksYSxvKSx0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4saSxhLG8pfSx0LnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixpLGEsbyl7ZS5zZXRUcmFuc2Zvcm0odCxyLG4saSxhLG8pLHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybSh0LHIsbixpLGEsbyl9LHQucmVzZXRUcmFuc2Zvcm09ZnVuY3Rpb24oKXtlLnJlc2V0VHJhbnNmb3JtKCksdGhpcy5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0oKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7ZS5yb3RhdGUodCksdGhpcy5fX29yaWdpbmFsUm90YXRlKHQpfSx0LmNsaXA9ZnVuY3Rpb24odCl7ZS5jbGlwKHQpLHRoaXMuX19vcmlnaW5hbENsaXAodCl9LHQubW92ZVRvPWZ1bmN0aW9uKHQscil7ZS5tb3ZlVG8odCxyKSx0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxyKX0sdC5saW5lVG89ZnVuY3Rpb24odCxyKXtlLmxpbmVUbyh0LHIpLHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LHIpfSx0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxyLG4saSxhLG8pe2UuYmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyksdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHIsbixpLGEsbyl9LHQucmVjdD1mdW5jdGlvbih0LHIsbixpKXtlLnJlY3QodCxyLG4saSksdGhpcy5fX29yaWdpbmFsUmVjdCh0LHIsbixpKX0sdC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpLHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfSx0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCksdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShhLHRoaXMuc3VzcGVuZGVkQ3R4KSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX19LHtrZXk6ImVuZFNNYXNrTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCksRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5jdHg9dGhpcy5zdXNwZW5kZWRDdHgsdGhpcy5zdXNwZW5kZWRDdHg9bnVsbH19LHtrZXk6ImNvbXBvc2UiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayl7dD8odFswXT1NYXRoLmZsb29yKHRbMF0pLHRbMV09TWF0aC5mbG9vcih0WzFdKSx0WzJdPU1hdGguY2VpbCh0WzJdKSx0WzNdPU1hdGguY2VpbCh0WzNdKSk6dD1bMCwwLHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTt2YXIgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7KGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5bMF0sYT1uWzFdLG89blsyXS1pLHM9blszXS1hOzAhPT1vJiYwIT09cyYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGgsZj0hIWEsZD1mP2FbMF06MCxwPWY/YVsxXTowLHY9Zj9hWzJdOjA7aD0iTHVtaW5vc2l0eSI9PT1pP086Qztmb3IodmFyIHk9TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksbT0wO208bjttKz15KXt2YXIgZz1NYXRoLm1pbih5LG4tbSksYj10LmdldEltYWdlRGF0YShzLXUsbSsobC1jKSxyLGcpLF89ZS5nZXRJbWFnZURhdGEocyxtK2wscixnKTtmJiZUKGIuZGF0YSxkLHAsdiksaChiLmRhdGEsXy5kYXRhLG8pLGUucHV0SW1hZ2VEYXRhKF8scyxtK2wpfX0oZS5jb250ZXh0LHIsbyxzLGUuc3VidHlwZSxlLmJhY2tkcm9wLGUudHJhbnNmZXJNYXAsaSxhLGUub2Zmc2V0WCxlLm9mZnNldFkpLHQuc2F2ZSgpLHQuZ2xvYmFsQWxwaGE9MSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmRyYXdJbWFnZShyLmNhbnZhcywwLDApLHQucmVzdG9yZSgpKX0pKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCksdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCksdGhpcy5jdHgucmVzdG9yZSgpfX19LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pblNNYXNrTW9kZT8oRSh0aGlzLmN0eCx0aGlzLnN1c3BlbmRlZEN0eCksdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpKTp0aGlzLmN0eC5zYXZlKCk7dmFyIHQ9dGhpcy5jdXJyZW50O3RoaXMuc3RhdGVTdGFjay5wdXNoKHQpLHRoaXMuY3VycmVudD10LmNsb25lKCl9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbigpezA9PT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiZ0aGlzLmluU01hc2tNb2RlJiZ0aGlzLmVuZFNNYXNrTW9kZSgpLDAhPT10aGlzLnN0YXRlU3RhY2subGVuZ3RoJiYodGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKSx0aGlzLmluU01hc2tNb2RlPyh0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCksRSh0aGlzLnN1c3BlbmRlZEN0eCx0aGlzLmN0eCkpOnRoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLmNoZWNrU01hc2tTdGF0ZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscixuLGksYSksdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH19LHtrZXk6ImNvbnN0cnVjdFBhdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGEsbyxzPXRoaXMuY3R4LGw9dGhpcy5jdXJyZW50LHU9bC54LGM9bC55LGg9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShzKSxmPTA9PT1oWzBdJiYwPT09aFszXXx8MD09PWhbMV0mJjA9PT1oWzJdLGQ9Zj9yLnNsaWNlKDApOm51bGwscD0wLHY9MCx5PXQubGVuZ3RoO3A8eTtwKyspc3dpdGNoKDB8dFtwXSl7Y2FzZSBuLk9QUy5yZWN0YW5nbGU6dT1lW3YrK10sYz1lW3YrK107dmFyIG09ZVt2KytdLGc9ZVt2KytdLGI9dSttLF89YytnO3MubW92ZVRvKHUsYyksMD09PW18fDA9PT1nP3MubGluZVRvKGIsXyk6KHMubGluZVRvKGIsYykscy5saW5lVG8oYixfKSxzLmxpbmVUbyh1LF8pKSxmfHxsLnVwZGF0ZVJlY3RNaW5NYXgoaCxbdSxjLGIsX10pLHMuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVG86dT1lW3YrK10sYz1lW3YrK10scy5tb3ZlVG8odSxjKSxmfHxsLnVwZGF0ZVBhdGhNaW5NYXgoaCx1LGMpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOnU9ZVt2KytdLGM9ZVt2KytdLHMubGluZVRvKHUsYyksZnx8bC51cGRhdGVQYXRoTWluTWF4KGgsdSxjKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86YT11LG89Yyx1PWVbdis0XSxjPWVbdis1XSxzLmJlemllckN1cnZlVG8oZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sdSxjLGQpLHYrPTY7YnJlYWs7Y2FzZSBuLk9QUy5jdXJ2ZVRvMjphPXUsbz1jLHMuYmV6aWVyQ3VydmVUbyh1LGMsZVt2XSxlW3YrMV0sZVt2KzJdLGVbdiszXSksbC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoaCxhLG8sdSxjLGVbdl0sZVt2KzFdLGVbdisyXSxlW3YrM10sZCksdT1lW3YrMl0sYz1lW3YrM10sdis9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmE9dSxvPWMsdT1lW3YrMl0sYz1lW3YrM10scy5iZXppZXJDdXJ2ZVRvKGVbdl0sZVt2KzFdLHUsYyx1LGMpLGwudXBkYXRlQ3VydmVQYXRoTWluTWF4KGgsYSxvLGVbdl0sZVt2KzFdLHUsYyx1LGMsZCksdis9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDpzLmNsb3NlUGF0aCgpfWYmJmwudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoaCxkKSxsLnNldEN1cnJlbnRQb2ludCh1LGMpfX0se2tleToiY2xvc2VQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfX0se2tleToic3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYSx0aGlzLmNvbnRlbnRWaXNpYmxlJiYoIm9iamVjdCI9PT1wKHIpJiZudWxsIT1yJiZyLmdldFBhdHRlcm4/KGUuc2F2ZSgpLGUuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKGUsdGhpcywoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSxhLlBhdGhUeXBlLlNUUk9LRSksdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCExKSxlLnJlc3RvcmUoKSk6dGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKSksdCYmdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKSxlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5maWxsQWxwaGF9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbj0hMTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT1yLmdldFBhdHRlcm4oZSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLGEuUGF0aFR5cGUuRklMTCksbj0hMCk7dmFyIG89dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTt0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09byYmKHRoaXMucGVuZGluZ0VPRmlsbD8oZS5maWxsKCJldmVub2RkIiksdGhpcy5wZW5kaW5nRU9GaWxsPSExKTplLmZpbGwoKSksbiYmZS5yZXN0b3JlKCksdCYmdGhpcy5jb25zdW1lUGF0aChvKX19LHtrZXk6ImVvRmlsbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZmlsbCghMSksdGhpcy5zdHJva2UoITEpLHRoaXMuY29uc3VtZVBhdGgoKX19LHtrZXk6ImVvRmlsbFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0VPRmlsbD0hMCx0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfX0se2tleToiZW5kUGF0aCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9SX19LHtrZXk6ImVvQ2xpcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPWp9fSx7a2V5OiJiZWdpblRleHQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpO3ZhciByLG49Yyh0KTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSxsKGkudHJhbnNmb3JtKSksZS50cmFuc2xhdGUoaS54LGkueSksaS5hZGRUb1BhdGgoZSxpLmZvbnRTaXplKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9ZS5yZXN0b3JlKCksZS5jbGlwKCksZS5iZWdpblBhdGgoKSxkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzfWVsc2UgZS5iZWdpblBhdGgoKX19LHtrZXk6InNldENoYXJTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH19LHtrZXk6InNldFdvcmRTcGFjaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH19LHtrZXk6InNldEhTY2FsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9fSx7a2V5OiJzZXRMZWFkaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldCh0KSxpPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQodCkpO2lmKGkuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWkuZm9udE1hdHJpeFswXSYmMCE9PWkuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpLGU8MD8oZT0tZSxpLmZvbnREaXJlY3Rpb249LTEpOmkuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPWUsIXIuaXNUeXBlM0ZvbnQpe3ZhciBhPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89Im5vcm1hbCI7ci5ibGFjaz9vPSI5MDAiOnIuYm9sZCYmKG89ImJvbGQiKTt2YXIgcz1yLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIixsPSciJy5jb25jYXQoYSwnIiwgJykuY29uY2F0KHIuZmFsbGJhY2tOYW1lKSx1PWU7ZTwxNj91PTE2OmU+MTAwJiYodT0xMDApLHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvdSx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQodSwicHggIikuY29uY2F0KGwpfX19LHtrZXk6InNldFRleHRSZW5kZXJpbmdNb2RlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH19LHtrZXk6InNldFRleHRSaXNlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPWV9fSx7a2V5OiJzZXRMZWFkaW5nTW92ZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKSx0aGlzLm1vdmVUZXh0KHQsZSl9fSx7a2V5OiJzZXRUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9W3QsZSxyLG4saSxhXSx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSx0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH19LHtrZXk6Im5leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9fSx7a2V5OiJwYWludENoYXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9dGhpcy5jdHgsdT10aGlzLmN1cnJlbnQsYz11LmZvbnQsaD11LnRleHRSZW5kZXJpbmdNb2RlLGY9dS5mb250U2l6ZS91LmZvbnRTaXplU2NhbGUsZD1oJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxwPSEhKGgmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSx2PXUucGF0dGVybkZpbGwmJiFjLm1pc3NpbmdGaWxlOyhjLmRpc2FibGVGb250RmFjZXx8cHx8dikmJihvPWMuZ2V0UGF0aEdlbmVyYXRvcih0aGlzLmNvbW1vbk9ianMsdCkpLGMuZGlzYWJsZUZvbnRGYWNlfHx2PyhzLnNhdmUoKSxzLnRyYW5zbGF0ZShlLHIpLHMuYmVnaW5QYXRoKCksbyhzLGYpLGEmJnMuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbChhKSksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuZmlsbCgpLGQhPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpOihkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5maWxsVGV4dCh0LGUsciksZCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8cy5zdHJva2VUZXh0KHQsZSxyKSkscCYmKHRoaXMucGVuZGluZ1RleHRQYXRoc3x8KHRoaXMucGVuZGluZ1RleHRQYXRocz1bXSkpLnB1c2goe3RyYW5zZm9ybTooMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLHg6ZSx5OnIsZm9udFNpemU6ZixhZGRUb1BhdGg6b30pfX0se2tleToiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsMTAsMTApLmNvbnRleHQ7dC5zY2FsZSgxLjUsMSksdC5maWxsVGV4dCgiSSIsMCwxMCk7Zm9yKHZhciBlPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxMCwxMCkuZGF0YSxyPSExLGk9MztpPGUubGVuZ3RoO2krPTQpaWYoZVtpXT4wJiZlW2ldPDI1NSl7cj0hMDticmVha31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLHIpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7dmFyIG89ZS5mb250U2l6ZTtpZigwIT09byl7dmFyIHMsdT10aGlzLmN0eCxoPWUuZm9udFNpemVTY2FsZSxmPWUuY2hhclNwYWNpbmcsZD1lLndvcmRTcGFjaW5nLHA9ZS5mb250RGlyZWN0aW9uLHY9ZS50ZXh0SFNjYWxlKnAseT10Lmxlbmd0aCxtPXIudmVydGljYWwsZz1tPzE6LTEsYj1yLmRlZmF1bHRWTWV0cmljcyxfPW8qZS5mb250TWF0cml4WzBdLHc9ZS50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhZS5wYXR0ZXJuRmlsbDtpZih1LnNhdmUoKSx1LnRyYW5zZm9ybS5hcHBseSh1LGwoZS50ZXh0TWF0cml4KSksdS50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKSxwPjA/dS5zY2FsZSh2LC0xKTp1LnNjYWxlKHYsMSksZS5wYXR0ZXJuRmlsbCl7dS5zYXZlKCk7dmFyIEE9ZS5maWxsQ29sb3IuZ2V0UGF0dGVybih1LHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkodSksYS5QYXRoVHlwZS5GSUxMKTtzPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodSksdS5yZXN0b3JlKCksdS5maWxsU3R5bGU9QX12YXIgaz1lLmxpbmVXaWR0aCxTPWUudGV4dE1hdHJpeFNjYWxlO2lmKDA9PT1TfHwwPT09ayl7dmFyIHg9ZS50ZXh0UmVuZGVyaW5nTW9kZSZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7eCE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZ4IT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8KGs9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2Ugay89UztpZigxIT09aCYmKHUuc2NhbGUoaCxoKSxrLz1oKSx1LmxpbmVXaWR0aD1rLHIuaXNJbnZhbGlkUERGanNGb250KXt2YXIgRSxQPVtdLFQ9MCxDPWModCk7dHJ5e2ZvcihDLnMoKTshKEU9Qy5uKCkpLmRvbmU7KXt2YXIgTz1FLnZhbHVlO1AucHVzaChPLnVuaWNvZGUpLFQrPU8ud2lkdGh9fWNhdGNoKHQpe0MuZSh0KX1maW5hbGx5e0MuZigpfXJldHVybiB1LmZpbGxUZXh0KFAuam9pbigiIiksMCwwKSxlLngrPVQqXyp2LHUucmVzdG9yZSgpLHZvaWQgdGhpcy5jb21wb3NlKCl9dmFyIEYsTT0wO2ZvcihGPTA7Rjx5OysrRil7dmFyIFI9dFtGXTtpZigibnVtYmVyIiE9dHlwZW9mIFIpe3ZhciBJPSExLGo9KFIuaXNTcGFjZT9kOjApK2YsTD1SLmZvbnRDaGFyLEQ9Ui5hY2NlbnQsTj12b2lkIDAsVT12b2lkIDAsVz1SLndpZHRoO2lmKG0pe3ZhciBHPVIudm1ldHJpY3x8YixCPS0oUi52bWV0cmljP0dbMV06LjUqVykqXyxxPUdbMl0qXztXPUc/LUdbMF06VyxOPUIvaCxVPShNK3EpL2h9ZWxzZSBOPU0vaCxVPTA7aWYoci5yZW1lYXN1cmUmJlc+MCl7dmFyIEg9MWUzKnUubWVhc3VyZVRleHQoTCkud2lkdGgvbypoO2lmKFc8SCYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIHo9Vy9IO0k9ITAsdS5zYXZlKCksdS5zY2FsZSh6LDEpLE4vPXp9ZWxzZSBXIT09SCYmKE4rPShXLUgpLzJlMypvL2gpfWlmKHRoaXMuY29udGVudFZpc2libGUmJihSLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSlpZih3JiYhRCl1LmZpbGxUZXh0KEwsTixVKTtlbHNlIGlmKHRoaXMucGFpbnRDaGFyKEwsTixVLHMpLEQpe3ZhciBWPU4rbypELm9mZnNldC54L2gsWD1VLW8qRC5vZmZzZXQueS9oO3RoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsVixYLHMpfU0rPW0/VypfLWoqcDpXKl8raipwLEkmJnUucmVzdG9yZSgpfWVsc2UgTSs9ZypSKm8vMWUzfW0/ZS55LT1NOmUueCs9TSp2LHUucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InNob3dUeXBlM1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsdT1zLmZvbnQsYz1zLmZvbnRTaXplLGg9cy5mb250RGlyZWN0aW9uLGY9dS52ZXJ0aWNhbD8xOi0xLGQ9cy5jaGFyU3BhY2luZyxwPXMud29yZFNwYWNpbmcsdj1zLnRleHRIU2NhbGUqaCx5PXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxtPXQubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwsdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsLG8uc2F2ZSgpLG8udHJhbnNmb3JtLmFwcGx5KG8sbChzLnRleHRNYXRyaXgpKSxvLnRyYW5zbGF0ZShzLngscy55KSxvLnNjYWxlKHYsaCksZT0wO2U8bTsrK2UpaWYoIm51bWJlciIhPXR5cGVvZihyPXRbZV0pKXt2YXIgZz0oci5pc1NwYWNlP3A6MCkrZCxiPXUuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07Yj8odGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMucHJvY2Vzc2luZ1R5cGUzPXIsdGhpcy5zYXZlKCksby5zY2FsZShjLGMpLG8udHJhbnNmb3JtLmFwcGx5KG8sbCh5KSksdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KGIpLHRoaXMucmVzdG9yZSgpKSxpPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbci53aWR0aCwwXSx5KVswXSpjK2csby50cmFuc2xhdGUoaSwwKSxzLngrPWkqdik6KDAsbi53YXJuKSgnVHlwZTMgY2hhcmFjdGVyICInLmNvbmNhdChyLm9wZXJhdG9yTGlzdElkLCciIGlzIG5vdCBhdmFpbGFibGUuJykpfWVsc2UgYT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGEsMCkscy54Kz1hKnY7by5yZXN0b3JlKCksdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19fSx7a2V5OiJzZXRDaGFyV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToic2V0Q2hhcldpZHRoQW5kQm91bmRzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jdHgucmVjdChyLG4saS1yLGEtbiksdGhpcy5jdHguY2xpcCgpLHRoaXMuZW5kUGF0aCgpfX0se2tleToiZ2V0Q29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcztpZigiVGlsaW5nUGF0dGVybiI9PT1lWzBdKXt2YXIgbz1lWzFdLHM9dGhpcy5iYXNlVHJhbnNmb3JtfHwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxsPXtjcmVhdGVDYW52YXNHcmFwaGljczpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSxuLmNvbW1vbk9ianMsbi5vYmpzLG4uY2FudmFzRmFjdG9yeSx7b3B0aW9uYWxDb250ZW50Q29uZmlnOm4ub3B0aW9uYWxDb250ZW50Q29uZmlnLG1hcmtlZENvbnRlbnRTdGFjazpuLm1hcmtlZENvbnRlbnRTdGFja30pfX07cj1uZXcgYS5UaWxpbmdQYXR0ZXJuKGUsbyx0aGlzLmN0eCxsLHMpfWVsc2Ugcj10aGlzLl9nZXRQYXR0ZXJuKGVbMV0sZVsyXSk7cmV0dXJuIHJ9fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKX19LHtrZXk6InNldEZpbGxDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyksdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsPSEwfX0se2tleToic2V0U3Ryb2tlUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LnN0cm9rZVN0eWxlPWEsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWF9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPShudWxsPT09KGk9dGhpcy5zZWxlY3RDb2xvcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbCh0aGlzLHQsZSxyKSl8fG4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpO3RoaXMuY3R4LmZpbGxTdHlsZT1hLHRoaXMuY3VycmVudC5maWxsQ29sb3I9YSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITF9fSx7a2V5OiJfZ2V0UGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCk/ZT10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTooZT0oMCxhLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLm9ianMuZ2V0KHQpKSx0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LGUpKSxyJiYoZS5tYXRyaXg9ciksZX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmN0eDt0aGlzLnNhdmUoKTt2YXIgcj10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXIuZ2V0UGF0dGVybihlLHRoaXMsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksYS5QYXRoVHlwZS5TSEFESU5HKTt2YXIgbz0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKTtpZihvKXt2YXIgcz1lLmNhbnZhcyxsPXMud2lkdGgsdT1zLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxvKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCx1XSxvKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCwwXSxvKSxkPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbbCx1XSxvKSxwPU1hdGgubWluKGNbMF0saFswXSxmWzBdLGRbMF0pLHY9TWF0aC5taW4oY1sxXSxoWzFdLGZbMV0sZFsxXSkseT1NYXRoLm1heChjWzBdLGhbMF0sZlswXSxkWzBdKSxtPU1hdGgubWF4KGNbMV0saFsxXSxmWzFdLGRbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KHAsdix5LXAsbS12KX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpLHRoaXMucmVzdG9yZSgpfX19LHtrZXk6ImJlZ2luSW5saW5lSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9fSx7a2V5OiJiZWdpbkltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KHQpJiY2PT09dC5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbCh0KSksdGhpcy5iYXNlVHJhbnNmb3JtPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLGUpKXt2YXIgcj1lWzJdLWVbMF0sbj1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0scixuKSx0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSxlKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0RW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGVudFZpc2libGUmJih0aGlzLnJlc3RvcmUoKSx0aGlzLmJhc2VUcmFuc2Zvcm09dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCkpfX0se2tleToiYmVnaW5Hcm91cCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCksdGhpcy5pblNNYXNrTW9kZSYmKHRoaXMuZW5kU01hc2tNb2RlKCksdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPW51bGwpO3ZhciBlPXRoaXMuY3R4O3QuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSx0Lmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO2lmKHQubWF0cml4JiZlLnRyYW5zZm9ybS5hcHBseShlLGwodC5tYXRyaXgpKSwhdC5iYm94KXRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpO3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSksbz1bMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF07YT1uLlV0aWwuaW50ZXJzZWN0KGEsbyl8fFswLDAsMCwwXTt2YXIgcz1NYXRoLmZsb29yKGFbMF0pLHU9TWF0aC5mbG9vcihhWzFdKSxjPU1hdGgubWF4KE1hdGguY2VpbChhWzJdKS1zLDEpLGg9TWF0aC5tYXgoTWF0aC5jZWlsKGFbM10pLXUsMSksZj0xLGQ9MTtjPmcmJihmPWMvZyxjPWcpLGg+ZyYmKGQ9aC9nLGg9ZyksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3goWzAsMCxjLGhdKTt2YXIgcD0iZ3JvdXBBdCIrdGhpcy5ncm91cExldmVsO3Quc21hc2smJihwKz0iX3NtYXNrXyIrdGhpcy5zbWFza0NvdW50ZXIrKyUyKTt2YXIgdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhwLGMsaCkseT12LmNvbnRleHQ7eS5zY2FsZSgxL2YsMS9kKSx5LnRyYW5zbGF0ZSgtcywtdSkseS50cmFuc2Zvcm0uYXBwbHkoeSxsKHIpKSx0LnNtYXNrP3RoaXMuc21hc2tTdGFjay5wdXNoKHtjYW52YXM6di5jYW52YXMsY29udGV4dDp5LG9mZnNldFg6cyxvZmZzZXRZOnUsc2NhbGVYOmYsc2NhbGVZOmQsc3VidHlwZTp0LnNtYXNrLnN1YnR5cGUsYmFja2Ryb3A6dC5zbWFzay5iYWNrZHJvcCx0cmFuc2Zlck1hcDp0LnNtYXNrLnRyYW5zZmVyTWFwfHxudWxsLHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTpudWxsfSk6KGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLnRyYW5zbGF0ZShzLHUpLGUuc2NhbGUoZixkKSxlLnNhdmUoKSksRShlLHkpLHRoaXMuY3R4PXksdGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSksdGhpcy5ncm91cFN0YWNrLnB1c2goZSksdGhpcy5ncm91cExldmVsKyt9fX0se2tleToiZW5kR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuZ3JvdXBMZXZlbC0tO3ZhciBlPXRoaXMuY3R4LHI9dGhpcy5ncm91cFN0YWNrLnBvcCgpO2lmKHRoaXMuY3R4PXIsdGhpcy5jdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLHQuc21hc2spdGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpLHRoaXMucmVzdG9yZSgpO2Vsc2V7dmFyIGE7dGhpcy5jdHgucmVzdG9yZSgpO3ZhciBvPSgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO3RoaXMucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSwoYT10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KGEsbChvKSk7dmFyIHM9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XSxvKTt0aGlzLmN0eC5kcmF3SW1hZ2UoZS5jYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy5jb21wb3NlKHMpfX19fSx7a2V5OiJiZWdpbkFubm90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM7aWYodSh0aGlzLEwsTikuY2FsbCh0aGlzKSxQKHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKSx0aGlzLmN0eC5zYXZlKCksdGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiYocz10aGlzLmN0eCkuc2V0VHJhbnNmb3JtLmFwcGx5KHMsbCh0aGlzLmJhc2VUcmFuc2Zvcm0pKSxBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGgpe3ZhciBjPWVbMl0tZVswXSxmPWVbM10tZVsxXTtpZihvJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhyPXIuc2xpY2UoKSlbNF0tPWVbMF0scls1XS09ZVsxXSwoZT1lLnNsaWNlKCkpWzBdPWVbMV09MCxlWzJdPWMsZVszXT1mO3ZhciBkPWgobi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSwyKSxwPWRbMF0sdj1kWzFdLHk9dGhpcy52aWV3cG9ydFNjYWxlLG09TWF0aC5jZWlsKGMqdGhpcy5vdXRwdXRTY2FsZVgqeSksZz1NYXRoLmNlaWwoZip0aGlzLm91dHB1dFNjYWxlWSp5KTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShtLGcpO3ZhciBiPXRoaXMuYW5ub3RhdGlvbkNhbnZhcyxfPWIuY2FudmFzLHc9Yi5jb250ZXh0O3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCxfKSx0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHgsdGhpcy5jdHg9dyx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0ocCwwLDAsLXYsMCxmKnYpLFAodGhpcy5jdHgsdGhpcy5mb3JlZ3JvdW5kQ29sb3IpfWVsc2UgUCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvciksdGhpcy5jdHgucmVjdChlWzBdLGVbMV0sYyxmKSx0aGlzLmN0eC5jbGlwKCksdGhpcy5lbmRQYXRoKCl9dGhpcy5jdXJyZW50PW5ldyBrKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KSx0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLGwocikpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsbChhKSl9fSx7a2V5OiJlbmRBbm5vdGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbkNhbnZhcyYmKHRoaXMuY3R4PXRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCxkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4LGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMpfX0se2tleToicGFpbnRJbWFnZU1hc2tYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10LmNvdW50Oyh0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KSkuY291bnQ9ZTt2YXIgcj10aGlzLmN0eCxuPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKG4mJih2b2lkIDA9PT1uLmNvbXBpbGVkJiYobi5jb21waWxlZD1mdW5jdGlvbih0KXt2YXIgZT10LndpZHRoLHI9dC5oZWlnaHQ7aWYoZT5ifHxyPmIpcmV0dXJuIG51bGw7dmFyIG4saSxhLG8scz1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxsPWUrMSx1PW5ldyBVaW50OEFycmF5KGwqKHIrMSkpLGg9ZSs3Ji04LGY9bmV3IFVpbnQ4QXJyYXkoaCpyKSxkPTAscD1jKHQuZGF0YSk7dHJ5e2ZvcihwLnMoKTshKG89cC5uKCkpLmRvbmU7KWZvcih2YXIgdj1vLnZhbHVlLHk9MTI4O3k+MDspZltkKytdPXYmeT8wOjI1NSx5Pj49MX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX12YXIgbT0wO2ZvcigwIT09ZltkPTBdJiYodVswXT0xLCsrbSksaT0xO2k8ZTtpKyspZltkXSE9PWZbZCsxXSYmKHVbaV09ZltkXT8yOjEsKyttKSxkKys7Zm9yKDAhPT1mW2RdJiYodVtpXT0yLCsrbSksbj0xO248cjtuKyspe2E9bipsLGZbKGQ9bipoKS1oXSE9PWZbZF0mJih1W2FdPWZbZF0/MTo4LCsrbSk7dmFyIGc9KGZbZF0/NDowKSsoZltkLWhdPzg6MCk7Zm9yKGk9MTtpPGU7aSsrKXNbZz0oZz4+MikrKGZbZCsxXT80OjApKyhmW2QtaCsxXT84OjApXSYmKHVbYStpXT1zW2ddLCsrbSksZCsrO2lmKGZbZC1oXSE9PWZbZF0mJih1W2EraV09ZltkXT8yOjQsKyttKSxtPjFlMylyZXR1cm4gbnVsbH1mb3IoYT1uKmwsMCE9PWZbZD1oKihyLTEpXSYmKHVbYV09OCwrK20pLGk9MTtpPGU7aSsrKWZbZF0hPT1mW2QrMV0mJih1W2EraV09ZltkXT80OjgsKyttKSxkKys7aWYoMCE9PWZbZF0mJih1W2EraV09NCwrK20pLG0+MWUzKXJldHVybiBudWxsO3ZhciBfPW5ldyBJbnQzMkFycmF5KFswLGwsLTEsMCwtbCwwLDAsMCwxXSksdz1uZXcgUGF0aDJEO2ZvcihuPTA7bSYmbjw9cjtuKyspe2Zvcih2YXIgQT1uKmwsaz1BK2U7QTxrJiYhdVtBXTspQSsrO2lmKEEhPT1rKXt3Lm1vdmVUbyhBJWwsbik7dmFyIFM9QSx4PXVbQV07ZG97dmFyIEU9X1t4XTtkb3tBKz1FfXdoaWxlKCF1W0FdKTt2YXIgUD11W0FdOzUhPT1QJiYxMCE9PVA/KHg9UCx1W0FdPTApOih4PVAmNTEqeD4+NCx1W0FdJj14Pj4yfHg8PDIpLHcubGluZVRvKEElbCxBL2x8MCksdVtBXXx8LS1tfXdoaWxlKFMhPT1BKTstLW59fXJldHVybiBmPW51bGwsdT1udWxsLGZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2NhbGUoMS9lLC0xL3IpLHQudHJhbnNsYXRlKDAsLXIpLHQuZmlsbCh3KSx0LmJlZ2luUGF0aCgpLHQucmVzdG9yZSgpfX0odCkpLG4uY29tcGlsZWQpKW4uY29tcGlsZWQocik7ZWxzZXt2YXIgaT10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpLGE9aS5jYW52YXM7ci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZHJhd0ltYWdlKGEsaS5vZmZzZXRYLGkub2Zmc2V0WSksci5yZXN0b3JlKCksdGhpcy5jb21wb3NlKCl9fX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLG89YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOnZvaWQgMDtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0PXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTt2YXIgbD10aGlzLmN0eDtsLnNhdmUoKTt2YXIgdT0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGwpO2wudHJhbnNmb3JtKGUscixhLG8sMCwwKTt2YXIgYz10aGlzLl9jcmVhdGVNYXNrQ2FudmFzKHQpO2wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYy5vZmZzZXRYLXVbNF0sYy5vZmZzZXRZLXVbNV0pO2Zvcih2YXIgZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrPTIpe3ZhciBwPW4uVXRpbC50cmFuc2Zvcm0odSxbZSxyLGEsbyxzW2ZdLHNbZisxXV0pLHY9aChuLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0scCksMikseT12WzBdLG09dlsxXTtsLmRyYXdJbWFnZShjLmNhbnZhcyx5LG0pfWwucmVzdG9yZSgpLHRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZSxyPXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixvPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxzPWModCk7dHJ5e2ZvcihzLnMoKTshKGU9cy5uKCkpLmRvbmU7KXt2YXIgdT1lLnZhbHVlLGg9dS5kYXRhLGY9dS53aWR0aCxkPXUuaGVpZ2h0LHA9dS50cmFuc2Zvcm0sdj10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsZixkKSx5PXYuY29udGV4dDt5LnNhdmUoKSx4KHksdGhpcy5nZXRPYmplY3QoaCx1KSkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIseS5maWxsU3R5bGU9bz9uLmdldFBhdHRlcm4oeSx0aGlzLCgwLGkuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHIpLGEuUGF0aFR5cGUuRklMTCk6bix5LmZpbGxSZWN0KDAsMCxmLGQpLHkucmVzdG9yZSgpLHIuc2F2ZSgpLHIudHJhbnNmb3JtLmFwcGx5KHIsbChwKSksci5zY2FsZSgxLC0xKSxBKHIsdi5jYW52YXMsMCwwLGYsZCwwLC0xLDEsMSksci5yZXN0b3JlKCl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuY29tcG9zZSgpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfX19LHtrZXk6InBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Iix2YWx1ZTpmdW5jdGlvbih0LGUscixpKXtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt2YXIgYT10aGlzLmdldE9iamVjdCh0KTtpZihhKXtmb3IodmFyIG89YS53aWR0aCxzPWEuaGVpZ2h0LGw9W10sdT0wLGM9aS5sZW5ndGg7dTxjO3UrPTIpbC5wdXNoKHt0cmFuc2Zvcm06W2UsMCwwLHIsaVt1XSxpW3UrMV1dLHg6MCx5OjAsdzpvLGg6c30pO3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChhLGwpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9fX0se2tleToicGFpbnRJbmxpbmVJbWFnZVhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGE9dGhpcy5jdHg7aWYodGhpcy5zYXZlKCksYS5zY2FsZSgxL3IsLTEvbiksImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpZT10O2Vsc2V7dmFyIG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pO1Moby5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyksZT1vLmNhbnZhc312YXIgcz10aGlzLl9zY2FsZUltYWdlKGUsKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoYSkpO2EuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPUYoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSx0LmludGVycG9sYXRlKSxBKGEscy5pbWcsMCwwLHMucGFpbnRXaWR0aCxzLnBhaW50SGVpZ2h0LDAsLW4scixuKSx0aGlzLmNvbXBvc2UoKSx0aGlzLnJlc3RvcmUoKX19fSx7a2V5OiJwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3ZhciByPXRoaXMuY3R4LG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixuLGkpO1MoYS5jb250ZXh0LHQsdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7dmFyIG8scz1jKGUpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtyLnNhdmUoKSxyLnRyYW5zZm9ybS5hcHBseShyLGwodS50cmFuc2Zvcm0pKSxyLnNjYWxlKDEsLTEpLEEocixhLmNhbnZhcyx1LngsdS55LHUudyx1LmgsMCwtMSwxLDEpLHIucmVzdG9yZSgpfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX10aGlzLmNvbXBvc2UoKX19fSx7a2V5OiJwYWludFNvbGlkQ29sb3JJbWFnZU1hc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZW50VmlzaWJsZSYmKHRoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpLHRoaXMuY29tcG9zZSgpKX19LHtrZXk6Im1hcmtQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToibWFya1BvaW50UHJvcHMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7fX0se2tleToiYmVnaW5NYXJrZWRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9fSx7a2V5OiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiZW5kTWFya2VkQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKSx0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfX0se2tleToiYmVnaW5Db21wYXQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiZW5kQ29tcGF0Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImNvbnN1bWVQYXRoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQuaXNFbXB0eUNsaXAoKTt0aGlzLnBlbmRpbmdDbGlwJiZ0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCksdGhpcy5wZW5kaW5nQ2xpcHx8dGhpcy5jb21wb3NlKHQpO3ZhciByPXRoaXMuY3R4O3RoaXMucGVuZGluZ0NsaXAmJihlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWo/ci5jbGlwKCJldmVub2RkIik6ci5jbGlwKCkpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCksdGhpcy5jdXJyZW50LnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godGhpcy5jdXJyZW50LmNsaXBCb3gpLHIuYmVnaW5QYXRoKCl9fSx7a2V5OiJnZXRTaW5nbGVQaXhlbFdpZHRoIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD0oMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtpZigwPT09dFsxXSYmMD09PXRbMl0pdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD0xL01hdGgubWluKE1hdGguYWJzKHRbMF0pLE1hdGguYWJzKHRbM10pKTtlbHNle3ZhciBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHI9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLG49TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocixuKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH19LHtrZXk6ImdldFNjYWxlRm9yU3Ryb2tpbmciLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe3ZhciB0LGUscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PW5bMV0mJjA9PT1uWzJdKXt2YXIgYT1NYXRoLmFicyhuWzBdKSxvPU1hdGguYWJzKG5bM10pO2lmKDA9PT1yKXQ9MS9hLGU9MS9vO2Vsc2V7dmFyIHM9YSpyLGw9bypyO3Q9czwxPzEvczoxLGU9bDwxPzEvbDoxfX1lbHNle3ZhciB1PU1hdGguYWJzKG5bMF0qblszXS1uWzJdKm5bMV0pLGM9TWF0aC5oeXBvdChuWzBdLG5bMV0pLGg9TWF0aC5oeXBvdChuWzJdLG5bM10pO2lmKDA9PT1yKXQ9aC91LGU9Yy91O2Vsc2V7dmFyIGY9cip1O3Q9aD5mP2gvZjoxLGU9Yz5mP2MvZjoxfX10aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPVt0LGVdfXJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nfX0se2tleToicmVzY2FsZUFuZFN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQubGluZVdpZHRoLG49aCh0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKSwyKSxhPW5bMF0sbz1uWzFdO2lmKGUubGluZVdpZHRoPXJ8fDEsMSE9PWF8fDEhPT1vKXt2YXIgcyx1LGM7dCYmKHM9KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShlKSx1PWUuZ2V0TGluZURhc2goKS5zbGljZSgpLGM9ZS5saW5lRGFzaE9mZnNldCksZS5zY2FsZShhLG8pO3ZhciBmPU1hdGgubWF4KGEsbyk7ZS5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9mfSkpKSxlLmxpbmVEYXNoT2Zmc2V0Lz1mLGUuc3Ryb2tlKCksdCYmKGUuc2V0VHJhbnNmb3JtLmFwcGx5KGUsbChzKSksZS5zZXRMaW5lRGFzaCh1KSxlLmxpbmVEYXNoT2Zmc2V0PWMpfWVsc2UgZS5zdHJva2UoKX19LHtrZXk6ImlzQ29udGVudFZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1t0XS52aXNpYmxlKXJldHVybiExO3JldHVybiEwfX1dKSx0fSgpO2Z1bmN0aW9uIE4oKXtmb3IoO3RoaXMuc3RhdGVTdGFjay5sZW5ndGh8fHRoaXMuaW5TTWFza01vZGU7KXRoaXMucmVzdG9yZSgpO3RoaXMuY3R4LnJlc3RvcmUoKSx0aGlzLnRyYW5zcGFyZW50Q2FudmFzJiYodGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHgsdGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsKX1mb3IodmFyIFUgaW4gZS5DYW52YXNHcmFwaGljcz1ELG4uT1BTKXZvaWQgMCE9PUQucHJvdG90eXBlW1VdJiYoRC5wcm90b3R5cGVbbi5PUFNbVV1dPUQucHJvdG90eXBlW1VdKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlRpbGluZ1BhdHRlcm49ZS5QYXRoVHlwZT12b2lkIDAsZS5nZXRTaGFkaW5nUGF0dGVybj1mdW5jdGlvbih0KXtzd2l0Y2godFswXSl7Y2FzZSJSYWRpYWxBeGlhbCI6cmV0dXJuIG5ldyB3KHQpO2Nhc2UiTWVzaCI6cmV0dXJuIG5ldyBTKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgeH10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQodFswXSkpfTt2YXIgbj1yKDEpLGk9cigxMzcpLGE9cigzKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB1KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8bCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1sKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBsKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1KHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dSh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LGgodCxlKX1mdW5jdGlvbiBmKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQodCk7aWYoZSl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGkpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1wKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxkKHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHAodCl9ZnVuY3Rpb24gdih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXAobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1wKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gZSYmeSh0LnByb3RvdHlwZSxlKSxyJiZ5KHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgZz17RklMTDoiRmlsbCIsU1RST0tFOiJTdHJva2UiLFNIQURJTkc6IlNoYWRpbmcifTtmdW5jdGlvbiBiKHQsZSl7aWYoZSYmIWEuaXNOb2RlSlMpe3ZhciByPWVbMl0tZVswXSxuPWVbM10tZVsxXSxpPW5ldyBQYXRoMkQ7aS5yZWN0KGVbMF0sZVsxXSxyLG4pLHQuY2xpcChpKX19ZS5QYXRoVHlwZT1nO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YodGhpcyx0KSx0aGlzLmNvbnN0cnVjdG9yPT09dCYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1yZXR1cm4gbSh0LFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKX19XSksdH0oKSx3PWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl90eXBlPXRbMV0sbi5fYmJveD10WzJdLG4uX2NvbG9yU3RvcHM9dFszXSxuLl9wMD10WzRdLG4uX3AxPXRbNV0sbi5fcjA9dFs2XSxuLl9yMT10WzddLG4ubWF0cml4PW51bGwsbn1yZXR1cm4gbShyLFt7a2V5OiJfY3JlYXRlR3JhZGllbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlOyJheGlhbCI9PT10aGlzLl90eXBlP2U9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSk6InJhZGlhbCI9PT10aGlzLl90eXBlJiYoZT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLHRoaXMuX3AwWzFdLHRoaXMuX3IwLHRoaXMuX3AxWzBdLHRoaXMuX3AxWzFdLHRoaXMuX3IxKSk7dmFyIHIsbj1zKHRoaXMuX2NvbG9yU3RvcHMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtlLmFkZENvbG9yU3RvcChpWzBdLGlbMV0pfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX1yZXR1cm4gZX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzO2lmKGE9PT1nLlNUUk9LRXx8YT09PWcuRklMTCl7dmFyIGw9ZS5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goYSwoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKXx8WzAsMCwwLDBdLHU9TWF0aC5jZWlsKGxbMl0tbFswXSl8fDEsYz1NYXRoLmNlaWwobFszXS1sWzFdKXx8MSxoPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIix1LGMsITApLGY9aC5jb250ZXh0O2YuY2xlYXJSZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYuYmVnaW5QYXRoKCksZi5yZWN0KDAsMCxmLmNhbnZhcy53aWR0aCxmLmNhbnZhcy5oZWlnaHQpLGYudHJhbnNsYXRlKC1sWzBdLC1sWzFdKSxyPW4uVXRpbC50cmFuc2Zvcm0ocixbMSwwLDAsMSxsWzBdLGxbMV1dKSxmLnRyYW5zZm9ybS5hcHBseShmLG8oZS5iYXNlVHJhbnNmb3JtKSksdGhpcy5tYXRyaXgmJmYudHJhbnNmb3JtLmFwcGx5KGYsbyh0aGlzLm1hdHJpeCkpLGIoZix0aGlzLl9iYm94KSxmLmZpbGxTdHlsZT10aGlzLl9jcmVhdGVHcmFkaWVudChmKSxmLmZpbGwoKSxzPXQuY3JlYXRlUGF0dGVybihoLmNhbnZhcywibm8tcmVwZWF0Iik7dmFyIGQ9bmV3IERPTU1hdHJpeChyKTtzLnNldFRyYW5zZm9ybShkKX1lbHNlIGIodCx0aGlzLl9iYm94KSxzPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpO3JldHVybiBzfX1dKSxyfShfKTtmdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGwsdT1lLmNvb3JkcyxjPWUuY29sb3JzLGg9dC5kYXRhLGY9NCp0LndpZHRoO3VbcisxXT51W24rMV0mJihsPXIscj1uLG49bCxsPWEsYT1vLG89bCksdVtuKzFdPnVbaSsxXSYmKGw9bixuPWksaT1sLGw9byxvPXMscz1sKSx1W3IrMV0+dVtuKzFdJiYobD1yLHI9bixuPWwsbD1hLGE9byxvPWwpO3ZhciBkPSh1W3JdK2Uub2Zmc2V0WCkqZS5zY2FsZVgscD0odVtyKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVksdj0odVtuXStlLm9mZnNldFgpKmUuc2NhbGVYLHk9KHVbbisxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KHVbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxnPSh1W2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWTtpZighKHA+PWcpKWZvcih2YXIgYixfLHcsQSxrLFMseCxFLFA9Y1thXSxUPWNbYSsxXSxDPWNbYSsyXSxPPWNbb10sRj1jW28rMV0sTT1jW28rMl0sUj1jW3NdLEk9Y1tzKzFdLGo9Y1tzKzJdLEw9TWF0aC5yb3VuZChwKSxEPU1hdGgucm91bmQoZyksTj1MO048PUQ7TisrKXtpZihOPHkpe3ZhciBVO2I9ZC0oZC12KSooVT1OPHA/MDoocC1OKS8ocC15KSksXz1QLShQLU8pKlUsdz1ULShULUYpKlUsQT1DLShDLU0pKlV9ZWxzZXt2YXIgVztiPXYtKHYtbSkqKFc9Tj5nPzE6eT09PWc/MDooeS1OKS8oeS1nKSksXz1PLShPLVIpKlcsdz1GLShGLUkpKlcsQT1NLShNLWopKld9dmFyIEc9dm9pZCAwO2s9ZC0oZC1tKSooRz1OPHA/MDpOPmc/MToocC1OKS8ocC1nKSksUz1QLShQLVIpKkcseD1ULShULUkpKkcsRT1DLShDLWopKkc7Zm9yKHZhciBCPU1hdGgucm91bmQoTWF0aC5taW4oYixrKSkscT1NYXRoLnJvdW5kKE1hdGgubWF4KGIsaykpLEg9ZipOKzQqQix6PUI7ejw9cTt6KyspKEc9KGIteikvKGItaykpPDA/Rz0wOkc+MSYmKEc9MSksaFtIKytdPV8tKF8tUykqR3wwLGhbSCsrXT13LSh3LXgpKkd8MCxoW0grK109QS0oQS1FKSpHfDAsaFtIKytdPTI1NX19ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saSxhPWUuY29vcmRzLG89ZS5jb2xvcnM7c3dpdGNoKGUudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgcz1lLnZlcnRpY2VzUGVyUm93LGw9TWF0aC5mbG9vcihhLmxlbmd0aC9zKS0xLHU9cy0xO2ZvcihuPTA7bjxsO24rKylmb3IodmFyIGM9bipzLGg9MDtoPHU7aCsrLGMrKylBKHQscixhW2NdLGFbYysxXSxhW2Mrc10sb1tjXSxvW2MrMV0sb1tjK3NdKSxBKHQscixhW2MrcysxXSxhW2MrMV0sYVtjK3NdLG9bYytzKzFdLG9bYysxXSxvW2Mrc10pO2JyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rPTMpQSh0LHIsYVtuXSxhW24rMV0sYVtuKzJdLG9bbl0sb1tuKzFdLG9bbisyXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgZmlndXJlIil9fXZhciBTPWZ1bmN0aW9uKHQpe2Mocix0KTt2YXIgZT1mKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG47cmV0dXJuIHYodGhpcyxyKSwobj1lLmNhbGwodGhpcykpLl9jb29yZHM9dFsyXSxuLl9jb2xvcnM9dFszXSxuLl9maWd1cmVzPXRbNF0sbi5fYm91bmRzPXRbNV0sbi5fYmJveD10WzddLG4uX2JhY2tncm91bmQ9dFs4XSxuLm1hdHJpeD1udWxsLG59cmV0dXJuIG0ocixbe2tleToiX2NyZWF0ZU1lc2hDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSksYT1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1uLG89TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktaSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMF0qMS4xKSksM2UzKSx1PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhvKnRbMV0qMS4xKSksM2UzKSxjPWEvbCxoPW8vdSxmPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotbixvZmZzZXRZOi1pLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sZD1sKzQscD11KzQsdj1yLmdldENhbnZhcygibWVzaCIsZCxwLCExKSx5PXYuY29udGV4dCxtPXkuY3JlYXRlSW1hZ2VEYXRhKGwsdSk7aWYoZSlmb3IodmFyIGc9bS5kYXRhLGI9MCxfPWcubGVuZ3RoO2I8XztiKz00KWdbYl09ZVswXSxnW2IrMV09ZVsxXSxnW2IrMl09ZVsyXSxnW2IrM109MjU1O3ZhciB3LEE9cyh0aGlzLl9maWd1cmVzKTt0cnl7Zm9yKEEucygpOyEodz1BLm4oKSkuZG9uZTspayhtLHcudmFsdWUsZil9Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9cmV0dXJuIHkucHV0SW1hZ2VEYXRhKG0sMiwyKSx7Y2FudmFzOnYuY2FudmFzLG9mZnNldFg6bi0yKmMsb2Zmc2V0WTppLTIqaCxzY2FsZVg6YyxzY2FsZVk6aH19fSx7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0LGUscixhKXt2YXIgcztpZihiKHQsdGhpcy5fYmJveCksYT09PWcuU0hBRElORylzPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCxpLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQpKTtlbHNlIGlmKHM9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgpe3ZhciBsPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7cz1bc1swXSpsWzBdLHNbMV0qbFsxXV19dmFyIHU9dGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzLGE9PT1nLlNIQURJTkc/bnVsbDp0aGlzLl9iYWNrZ3JvdW5kLGUuY2FjaGVkQ2FudmFzZXMpO3JldHVybiBhIT09Zy5TSEFESU5HJiYodC5zZXRUcmFuc2Zvcm0uYXBwbHkodCxvKGUuYmFzZVRyYW5zZm9ybSkpLHRoaXMubWF0cml4JiZ0LnRyYW5zZm9ybS5hcHBseSh0LG8odGhpcy5tYXRyaXgpKSksdC50cmFuc2xhdGUodS5vZmZzZXRYLHUub2Zmc2V0WSksdC5zY2FsZSh1LnNjYWxlWCx1LnNjYWxlWSksdC5jcmVhdGVQYXR0ZXJuKHUuY2FudmFzLCJuby1yZXBlYXQiKX19XSkscn0oXykseD1mdW5jdGlvbih0KXtjKHIsdCk7dmFyIGU9ZihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHYodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbShyLFt7a2V5OiJnZXRQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJob3RwaW5rIn19XSkscn0oXyksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4saSxhKXt2KHRoaXMsdCksdGhpcy5vcGVyYXRvckxpc3Q9ZVsyXSx0aGlzLm1hdHJpeD1lWzNdfHxbMSwwLDAsMSwwLDBdLHRoaXMuYmJveD1lWzRdLHRoaXMueHN0ZXA9ZVs1XSx0aGlzLnlzdGVwPWVbNl0sdGhpcy5wYWludFR5cGU9ZVs3XSx0aGlzLnRpbGluZ1R5cGU9ZVs4XSx0aGlzLmNvbG9yPXIsdGhpcy5jdHg9bix0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pLHRoaXMuYmFzZVRyYW5zZm9ybT1hfXJldHVybiBtKHQsW3trZXk6ImNyZWF0ZVBhdHRlcm5DYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3BlcmF0b3JMaXN0LHI9dGhpcy5iYm94LGE9dGhpcy54c3RlcCxvPXRoaXMueXN0ZXAscz10aGlzLnBhaW50VHlwZSxsPXRoaXMudGlsaW5nVHlwZSx1PXRoaXMuY29sb3IsYz10aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTsoMCxuLmluZm8pKCJUaWxpbmdUeXBlOiAiK2wpO3ZhciBoPXJbMF0sZj1yWzFdLGQ9clsyXSxwPXJbM10sdj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLHk9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksbT1bdlswXSp5WzBdLHZbMV0qeVsxXV0sZz10aGlzLmdldFNpemVBbmRTY2FsZShhLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxtWzBdKSxiPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKG8sdGhpcy5jdHguY2FudmFzLmhlaWdodCxtWzFdKSxfPXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLnNpemUsYi5zaXplLCEwKSx3PV8uY29udGV4dCxBPWMuY3JlYXRlQ2FudmFzR3JhcGhpY3Modyk7QS5ncm91cExldmVsPXQuZ3JvdXBMZXZlbCx0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChBLHMsdSk7dmFyIGs9aCxTPWYseD1kLEU9cDtyZXR1cm4gaDwwJiYoaz0wLHgrPU1hdGguYWJzKGgpKSxmPDAmJihTPTAsRSs9TWF0aC5hYnMoZikpLHcudHJhbnNsYXRlKC1nLnNjYWxlKmssLWIuc2NhbGUqUyksQS50cmFuc2Zvcm0oZy5zY2FsZSwwLDAsYi5zY2FsZSwwLDApLHcuc2F2ZSgpLHRoaXMuY2xpcEJib3goQSxrLFMseCxFKSxBLmJhc2VUcmFuc2Zvcm09KDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKShBLmN0eCksQS5leGVjdXRlT3BlcmF0b3JMaXN0KGUpLEEuZW5kRHJhd2luZygpLHtjYW52YXM6Xy5jYW52YXMsc2NhbGVYOmcuc2NhbGUsc2NhbGVZOmIuc2NhbGUsb2Zmc2V0WDprLG9mZnNldFk6U319fSx7a2V5OiJnZXRTaXplQW5kU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtlPU1hdGguYWJzKGUpO3ZhciBpPU1hdGgubWF4KHQuTUFYX1BBVFRFUk5fU0laRSxyKSxhPU1hdGguY2VpbChlKm4pO3JldHVybiBhPj1pP2E9aTpuPWEvZSx7c2NhbGU6bixzaXplOmF9fX0se2tleToiY2xpcEJib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89bi1lLHM9YS1yO3QuY3R4LnJlY3QoZSxyLG8scyksdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsaS5nZXRDdXJyZW50VHJhbnNmb3JtKSh0LmN0eCksW2UscixuLGFdKSx0LmNsaXAoKSx0LmVuZFBhdGgoKX19LHtrZXk6InNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY3R4LGE9dC5jdXJyZW50O3N3aXRjaChlKXtjYXNlIDE6dmFyIG89dGhpcy5jdHg7aS5maWxsU3R5bGU9by5maWxsU3R5bGUsaS5zdHJva2VTdHlsZT1vLnN0cm9rZVN0eWxlLGEuZmlsbENvbG9yPW8uZmlsbFN0eWxlLGEuc3Ryb2tlQ29sb3I9by5zdHJva2VTdHlsZTticmVhaztjYXNlIDI6dmFyIHM9bi5VdGlsLm1ha2VIZXhDb2xvcihyWzBdLHJbMV0sclsyXSk7aS5maWxsU3R5bGU9cyxpLnN0cm9rZVN0eWxlPXMsYS5maWxsQ29sb3I9cyxhLnN0cm9rZUNvbG9yPXM7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogIi5jb25jYXQoZSkpfX19LHtrZXk6ImdldFBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXI7aSE9PWcuU0hBRElORyYmKGE9bi5VdGlsLnRyYW5zZm9ybShhLGUuYmFzZVRyYW5zZm9ybSksdGhpcy5tYXRyaXgmJihhPW4uVXRpbC50cmFuc2Zvcm0oYSx0aGlzLm1hdHJpeCkpKTt2YXIgbz10aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSkscz1uZXcgRE9NTWF0cml4KGEpO3M9KHM9cy50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSkpLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7dmFyIGw9dC5jcmVhdGVQYXR0ZXJuKG8uY2FudmFzLCJyZXBlYXQiKTtyZXR1cm4gbC5zZXRUcmFuc2Zvcm0ocyksbH19XSxbe2tleToiTUFYX1BBVFRFUk5fU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9QQVRURVJOX1NJWkUiLDNlMyl9fV0pLHR9KCk7ZS5UaWxpbmdQYXR0ZXJuPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNyYyxhPXQuc3JjUG9zLG89dm9pZCAwPT09YT8wOmEscz10LmRlc3QsbD10LmRlc3RQb3MsdT12b2lkIDA9PT1sPzA6bCxjPXQud2lkdGgsaD10LmhlaWdodCxmPXQuaW52ZXJzZURlY29kZSxkPXZvaWQgMCE9PWYmJmYscD1uLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1LHY9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0oZT1kP1swLHBdOltwLDBdKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtmb3IoYT0ocj1yLmNhbGwodCkpLm5leHQ7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGkodCwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKHQsMik6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSx5PXZbMF0sbT12WzFdLGc9Yz4+MyxiPTcmYyxfPXIubGVuZ3RoO3M9bmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtmb3IodmFyIHc9MDt3PGg7dysrKXtmb3IodmFyIEE9bytnO288QTtvKyspe3ZhciBrPW88Xz9yW29dOjI1NTtzW3UrK109MTI4Jms/bTp5LHNbdSsrXT02NCZrP206eSxzW3UrK109MzImaz9tOnksc1t1KytdPTE2Jms/bTp5LHNbdSsrXT04Jms/bTp5LHNbdSsrXT00Jms/bTp5LHNbdSsrXT0yJms/bTp5LHNbdSsrXT0xJms/bTp5fWlmKDAhPT1iKWZvcih2YXIgUz1vPF8/cltvKytdOjI1NSx4PTA7eDxiO3grKylzW3UrK109UyYxPDw3LXg/bTp5fXJldHVybntzcmNQb3M6byxkZXN0UG9zOnV9fTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtlLkdsb2JhbFdvcmtlck9wdGlvbnM9cixyLndvcmtlclBvcnQ9dm9pZCAwPT09ci53b3JrZXJQb3J0P251bGw6ci53b3JrZXJQb3J0LHIud29ya2VyU3JjPXZvaWQgMD09PXIud29ya2VyU3JjPyIiOnIud29ya2VyU3JjfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gaSgpe2k9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixsPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtjKHt9LCIiKX1jYXRjaCh0KXtjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGYodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9aDt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtjKG0sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsbykmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8sbCl7dmFyIHU9Zih0W25dLHQsYSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09cyhoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT9lLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8sbCl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxsKX0pKTplLnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24odCl7Yy52YWx1ZT10LG8oYyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8sbCl9KSl9bCh1LmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWYodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1mKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W29dO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWMoeSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksYyh0LHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksYyhBLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShoKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksYyhfLHUsIkdlbmVyYXRvciIpLGMoXyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1zKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBzKHQpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxzKHQpfWZ1bmN0aW9uIGwodCl7c3dpdGNoKHQgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKHQpJiZudWxsIT09dHx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksdC5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSx0LnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPXRoaXM7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKGUudGFyZ2V0TmFtZT09PWkuc291cmNlTmFtZSlpZihlLnN0cmVhbSlpLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtlbHNlIGlmKGUuY2FsbGJhY2spe3ZhciByPWUuY2FsbGJhY2tJZCxhPWkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGkuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PWUuY2FsbGJhY2spYS5yZXNvbHZlKGUuZGF0YSk7ZWxzZXtpZigyIT09ZS5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2EucmVqZWN0KGwoZS5yZWFzb24pKX19ZWxzZXt2YXIgbz1pLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KGUuYWN0aW9uKSk7aWYoZS5jYWxsYmFja0lkKXt2YXIgcz1pLnNvdXJjZU5hbWUsdT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobyhlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbih0KXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjpsKHQpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP2kuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6byhlLmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIGUscixzLHU7cmV0dXJuIGU9dCxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYoclt0XSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KHQsJyInKSk7clt0XT1lfX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246dCxkYXRhOmV9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5jYWxsYmFja0lkKyssYT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbaV09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6aSxkYXRhOmV9LHIpfWNhdGNoKHQpe2EucmVqZWN0KHQpfXJldHVybiBhLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxjPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBsPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bCxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246dCxzdHJlYW1JZDpvLGRhdGE6ZSxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxpKSxsLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24odCl7dmFyIGU9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD1lLGMucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSksZS5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciBlPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD1lLGEuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsYy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpsKHQpfSksZS5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbih0KXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbD10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sbD4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo0LHN0cmVhbUlkOmUsY2h1bms6dH0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjMsc3RyZWFtSWQ6ZX0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW2VdKX0sZXJyb3I6ZnVuY3Rpb24odCl7KDAsbi5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NSxzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6dC5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2VdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocyh0LmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06OCxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo4LHN0cmVhbUlkOmUscmVhc29uOmwodCl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxpPXQuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxzPXRoaXMuc3RyZWFtU2lua3NbZV07c3dpdGNoKHQuc3RyZWFtKXtjYXNlIDg6dC5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNzp0LnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QobCh0LnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06NyxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZ0LmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9dC5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTppLHN0cmVhbTo3LHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjcsc3RyZWFtSWQ6ZSxyZWFzb246bCh0KX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUodC5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihsKHQucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLGUpO2JyZWFrO2Nhc2UgMjp0LnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGwodC5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sZSk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHMub25DYW5jZWwmJnMub25DYW5jZWwobCh0LnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmksc3RyZWFtOjIsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6aSxzdHJlYW06MixzdHJlYW1JZDplLHJlYXNvbjpsKHQpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QobCh0LnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9aSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsJiZlLnN0YXJ0Q2FsbC5wcm9taXNlLGUucHVsbENhbGwmJmUucHVsbENhbGwucHJvbWlzZSxlLmNhbmNlbENhbGwmJmUuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBpPXMuYXBwbHkodCxlKTtmdW5jdGlvbiBvKHQpe2EoaSxyLG4sbyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe2EoaSxyLG4sbyxsLCJ0aHJvdyIsdCl9byh2b2lkIDApfSkpfSxmdW5jdGlvbih0LGUpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKGUucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5NZXNzYWdlSGFuZGxlcj11fSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5NZXRhZGF0YT12b2lkIDA7dmFyIGk9cigxKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGE9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0oaS5rZXkpLCJzeW1ib2wiPT09bihhKT9hOlN0cmluZyhhKSksaSl9dmFyIGF9ZnVuY3Rpb24gbyh0LGUscil7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LHUodCxlLCJnZXQiKSl9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCx1KHQsZSwic2V0Iikscikscn1mdW5jdGlvbiB1KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBjPW5ldyBXZWFrTWFwLGg9bmV3IFdlYWtNYXAsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5wYXJzZWREYXRhLG49ZS5yYXdEYXRhOyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLG8odGhpcyxjLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxvKHRoaXMsaCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksbCh0aGlzLGMsciksbCh0aGlzLGgsbil9dmFyIGUscjtyZXR1cm4gZT10LChyPVt7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcyxoKX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zKHRoaXMsYykuZ2V0KHQpKSYmdm9pZCAwIT09ZT9lOm51bGx9fSx7a2V5OiJnZXRBbGwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKShzKHRoaXMsYykpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLGMpLmhhcyh0KX19XSkmJmEoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLk1ldGFkYXRhPWZ9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cigxKSxhPXIoMTM5KTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1zKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgYX19fX1mdW5jdGlvbiBzKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBsKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gZSYmaCh0LnByb3RvdHlwZSxlKSxyJiZoKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBkKHQsZSxyKXtwKHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiBwKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LG0odCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LG0odCxlLCJnZXQiKSl9ZnVuY3Rpb24gbSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgZz1TeW1ib2woIklOVEVSTkFMIiksYj1uZXcgV2Vha01hcCxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2ModGhpcyx0KSxkKHRoaXMsYix7d3JpdGFibGU6ITAsdmFsdWU6ITB9KSx0aGlzLm5hbWU9ZSx0aGlzLmludGVudD1yfXJldHVybiBmKHQsW3trZXk6InZpc2libGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsYil9fSx7a2V5OiJfc2V0VmlzaWJsZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0IT09ZyYmKDAsaS51bnJlYWNoYWJsZSkoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKSx2KHRoaXMsYixlKX19XSksdH0oKSx3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXAsaz1uZXcgV2Vha01hcCxTPW5ldyBXZWFrTWFwLHg9bmV3IFdlYWtTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7aWYoYyh0aGlzLHQpLHAodGhpcyxyPXgpLHIuYWRkKHRoaXMpLGQodGhpcyx3LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZCh0aGlzLEEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxkKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGQodGhpcyxTLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksdGhpcy5uYW1lPW51bGwsdGhpcy5jcmVhdG9yPW51bGwsbnVsbCE9PWUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5jcmVhdG9yPWUuY3JlYXRvcix2KHRoaXMsUyxlLm9yZGVyKTt2YXIgbixpPW8oZS5ncm91cHMpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTt5KHRoaXMsQSkuc2V0KGEuaWQsbmV3IF8oYS5uYW1lLGEuaW50ZW50KSl9fWNhdGNoKHQpe2kuZSh0KX1maW5hbGx5e2kuZigpfWlmKCJPRkYiPT09ZS5iYXNlU3RhdGUpe3ZhciBzLGw9byh5KHRoaXMsQSkudmFsdWVzKCkpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOylzLnZhbHVlLl9zZXRWaXNpYmxlKGcsITEpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX12YXIgdSxoPW8oZS5vbik7dHJ5e2ZvcihoLnMoKTshKHU9aC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO3kodGhpcyxBKS5nZXQoZikuX3NldFZpc2libGUoZywhMCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXZhciBtLGI9byhlLm9mZik7dHJ5e2ZvcihiLnMoKTshKG09Yi5uKCkpLmRvbmU7KXt2YXIgRT1tLnZhbHVlO3kodGhpcyxBKS5nZXQoRSkuX3NldFZpc2libGUoZywhMSl9fWNhdGNoKHQpe2IuZSh0KX1maW5hbGx5e2IuZigpfXYodGhpcyxrLHRoaXMuZ2V0SGFzaCgpKX19cmV0dXJuIGYodCxbe2tleToiaXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09eSh0aGlzLEEpLnNpemUpcmV0dXJuITA7aWYoIXQpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC4iKSwhMDtpZigiT0NHIj09PXQudHlwZSlyZXR1cm4geSh0aGlzLEEpLmhhcyh0LmlkKT95KHRoaXMsQSkuZ2V0KHQuaWQpLnZpc2libGU6KCgwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh0LmlkKSksITApO2lmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB1KHRoaXMseCxQKS5jYWxsKHRoaXMsdC5leHByZXNzaW9uKTtpZighdC5wb2xpY3l8fCJBbnlPbiI9PT10LnBvbGljeSl7dmFyIGUscj1vKHQuaWRzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuPWUudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobikpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KG4pKSwhMDtpZih5KHRoaXMsQSkuZ2V0KG4pLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXJldHVybiExfWlmKCJBbGxPbiI9PT10LnBvbGljeSl7dmFyIGEscz1vKHQuaWRzKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYoIXkodGhpcyxBKS5oYXMobCkpcmV0dXJuKDAsaS53YXJuKSgiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICIuY29uY2F0KGwpKSwhMDtpZigheSh0aGlzLEEpLmdldChsKS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtzLmUodCl9ZmluYWxseXtzLmYoKX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXt2YXIgYyxoPW8odC5pZHMpO3RyeXtmb3IoaC5zKCk7IShjPWgubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZigheSh0aGlzLEEpLmhhcyhmKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoZikpLCEwO2lmKCF5KHRoaXMsQSkuZ2V0KGYpLnZpc2libGUpcmV0dXJuITB9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiExfWlmKCJBbGxPZmYiPT09dC5wb2xpY3kpe3ZhciBkLHA9byh0Lmlkcyk7dHJ5e2ZvcihwLnMoKTshKGQ9cC5uKCkpLmRvbmU7KXt2YXIgdj1kLnZhbHVlO2lmKCF5KHRoaXMsQSkuaGFzKHYpKXJldHVybigwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAiLmNvbmNhdCh2KSksITA7aWYoeSh0aGlzLEEpLmdldCh2KS52aXNpYmxlKXJldHVybiExfX1jYXRjaCh0KXtwLmUodCl9ZmluYWxseXtwLmYoKX1yZXR1cm4hMH1yZXR1cm4oMCxpLndhcm4pKCJVbmtub3duIG9wdGlvbmFsIGNvbnRlbnQgcG9saWN5ICIuY29uY2F0KHQucG9saWN5LCIuIikpLCEwfXJldHVybigwLGkud2FybikoIlVua25vd24gZ3JvdXAgdHlwZSAiLmNvbmNhdCh0LnR5cGUsIi4iKSksITB9fSx7a2V5OiJzZXRWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3kodGhpcyxBKS5oYXModCk/KHkodGhpcyxBKS5nZXQodCkuX3NldFZpc2libGUoZywhIWUpLHYodGhpcyx3LG51bGwpKTooMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQodCkpfX0se2tleToiaGFzSW5pdGlhbFZpc2liaWxpdHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhhc2goKT09PXkodGhpcyxrKX19LHtrZXk6ImdldE9yZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT95KHRoaXMsUyk/eSh0aGlzLFMpLnNsaWNlKCk6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbCh0KX0odD15KHRoaXMsQSkua2V5cygpKXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8cyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKTpudWxsO3ZhciB0fX0se2tleToiZ2V0R3JvdXBzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMsQSkuc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkoeSh0aGlzLEEpKTpudWxsfX0se2tleToiZ2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHRoaXMsQSkuZ2V0KHQpfHxudWxsfX0se2tleToiZ2V0SGFzaCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsIT09eSh0aGlzLHcpKXJldHVybiB5KHRoaXMsdyk7dmFyIHQsZSxyLG49bmV3IGEuTXVybXVySGFzaDNfNjQsaT1vKHkodGhpcyxBKSk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbD0oZT10LnZhbHVlLHI9MixmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fShlKXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fShlLHIpfHxzKGUscil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdT1sWzBdLGM9bFsxXTtuLnVwZGF0ZSgiIi5jb25jYXQodSwiOiIpLmNvbmNhdChjLnZpc2libGUpKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHYodGhpcyx3LG4uaGV4ZGlnZXN0KCkpfX1dKSx0fSgpO2Z1bmN0aW9uIFAodCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwyKXJldHVybiEwO2Zvcih2YXIgcj10WzBdLG49MTtuPGU7bisrKXt2YXIgYT10W25dLG89dm9pZCAwO2lmKEFycmF5LmlzQXJyYXkoYSkpbz11KHRoaXMseCxQKS5jYWxsKHRoaXMsYSk7ZWxzZXtpZigheSh0aGlzLEEpLmhhcyhhKSlyZXR1cm4oMCxpLndhcm4pKCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogIi5jb25jYXQoYSkpLCEwO289eSh0aGlzLEEpLmdldChhKS52aXNpYmxlfXN3aXRjaChyKXtjYXNlIkFuZCI6aWYoIW8pcmV0dXJuITE7YnJlYWs7Y2FzZSJPciI6aWYobylyZXR1cm4hMDticmVhaztjYXNlIk5vdCI6cmV0dXJuIW87ZGVmYXVsdDpyZXR1cm4hMH19cmV0dXJuIkFuZCI9PT1yfWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPUV9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxMzcpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBjKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bCh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1sKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXt2YXIgaT10aGlzO2godGhpcyx0KSwoMCxuLmFzc2VydCkociwnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyksdGhpcy5fcXVldWVkQ2h1bmtzPVtdLHRoaXMuX3Byb2dyZXNzaXZlRG9uZT1lLnByb2dyZXNzaXZlRG9uZXx8ITEsdGhpcy5fY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU9ZS5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZXx8bnVsbDt2YXIgYT1lLmluaXRpYWxEYXRhO2lmKChudWxsPT1hP3ZvaWQgMDphLmxlbmd0aCk+MCl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSkuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKG8pfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD1yLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblJlY2VpdmVEYXRhKHtiZWdpbjp0LGNodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24odCxlKXtpLl9vblByb2dyZXNzKHtsb2FkZWQ6dCx0b3RhbDplfSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKChmdW5jdGlvbih0KXtpLl9vblJlY2VpdmVEYXRhKHtjaHVuazp0fSl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKChmdW5jdGlvbigpe2kuX29uUHJvZ3Jlc3NpdmVEb25lKCl9KSksdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnRyYW5zcG9ydFJlYWR5KCl9cmV0dXJuIGQodCxbe2tleToiX29uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7dmFyIHI9dGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiByLl9iZWdpbj09PXQuYmVnaW4mJihyLl9lbnF1ZXVlKGUpLCEwKX0pKTsoMCxuLmFzc2VydCkociwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKX19fSx7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7dm9pZCAwPT09dC50b3RhbD9udWxsPT09KGU9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUub25Qcm9ncmVzcyl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHtsb2FkZWQ6dC5sb2FkZWR9KTpudWxsPT09KG49dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09aXx8aS5jYWxsKG4se2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9fSx7a2V5OiJfb25Qcm9ncmVzc2l2ZURvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09dHx8dC5wcm9ncmVzc2l2ZURvbmUoKSx0aGlzLl9wcm9ncmVzc2l2ZURvbmU9ITB9fSx7a2V5OiJfcmVtb3ZlUmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHQpO2U+PTAmJnRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3ZhciB0PXRoaXMuX3F1ZXVlZENodW5rcztyZXR1cm4gdGhpcy5fcXVldWVkQ2h1bmtzPW51bGwsbmV3IHYodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IHkodGhpcyx0LGUpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCk7dmFyIHIsbj11KHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXIudmFsdWUuY2FuY2VsKHQpfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX1dKSx0fSgpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1wO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtoKHRoaXMsdCksdGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT1ufHwhMSx0aGlzLl9maWxlbmFtZT0oMCxpLmlzUGRmRmlsZSkoYSk/YTpudWxsLHRoaXMuX3F1ZXVlZENodW5rcz1yfHxbXSx0aGlzLl9sb2FkZWQ9MDt2YXIgbyxzPXUodGhpcy5fcXVldWVkQ2h1bmtzKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWU7dGhpcy5fbG9hZGVkKz1sLmJ5dGVMZW5ndGh9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKSxlLl9mdWxsUmVxdWVzdFJlYWRlcj10aGlzLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lfHwodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KSx0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aCl9fSx7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJyZWFkIix2YWx1ZTooZT1zKGEoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCEodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKSl7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIGU9dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmUsZG9uZTohMX0pO2Nhc2UgMzppZighdGhpcy5fZG9uZSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNTpyZXR1cm4gcj0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3JlcXVlc3RzLnB1c2gociksdC5hYnJ1cHQoInJldHVybiIsci5wcm9taXNlKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITA7dmFyIGUscj11KHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX0se2tleToicHJvZ3Jlc3NpdmVEb25lIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXIsdGhpcy5fZW5kPW4sdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9lbnF1ZXVlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTt2YXIgZSxyPXUodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NDticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9kb25lPSEwO3ZhciBlLHI9dSh0aGlzLl9yZXF1ZXN0cyk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWUudmFsdWUucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX10aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MCx0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1dKSx0fSgpfSwodCxlKT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LHIodCl9ZnVuY3Rpb24gbih0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09cih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4uY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1yKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5YZmFUZXh0PXZvaWQgMDt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToidGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9e2l0ZW1zOnIsc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybiBmdW5jdGlvbiBlKGkpe3ZhciBhO2lmKGkpe3ZhciBvPW51bGwscz1pLm5hbWU7aWYoIiN0ZXh0Ij09PXMpbz1pLnZhbHVlO2Vsc2V7aWYoIXQuc2hvdWxkQnVpbGRUZXh0KHMpKXJldHVybjtudWxsIT1pJiZudWxsIT09KGE9aS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09YSYmYS50ZXh0Q29udGVudD9vPWkuYXR0cmlidXRlcy50ZXh0Q29udGVudDppLnZhbHVlJiYobz1pLnZhbHVlKX1pZihudWxsIT09byYmci5wdXNoKHtzdHI6b30pLGkuY2hpbGRyZW4pe3ZhciBsLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBuKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/bih0LGUpOnZvaWQgMH19KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIGk9MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gaT49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbaSsrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxsPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gcz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtsPSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgb319fX0oaS5jaGlsZHJlbik7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWUobC52YWx1ZSl9Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9fX19KGUpLGl9fSx7a2V5OiJzaG91bGRCdWlsZFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fV0sbnVsbCYmaShlLnByb3RvdHlwZSxudWxsKSxyJiZpKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYVRleHQ9YX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXIoMTM4KTtmdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBlJiZvKHQucHJvdG90eXBlLGUpLHImJm8odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGwodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZSYmdSh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lLHR9LHUodCxlKX1mdW5jdGlvbiBjKHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPWgodCk7aWYoZSl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGksYXJndW1lbnRzLGEpfWVsc2Ugcj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9KHQpfSh0aGlzLHIpfX1mdW5jdGlvbiBoKHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxoKHQpfXZhciBmPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKGZ1bmN0aW9uKHQsbil7IXQmJm4/ZShuZXcgVWludDhBcnJheShuKSk6cihuZXcgRXJyb3IodCkpfSkpfSkpfSxkPWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9jcmVhdGVDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJlcXVpcmUoImNhbnZhcyIpLmNyZWF0ZUNhbnZhcyh0LGUpfX1dKSxyfShpLkJhc2VDYW52YXNGYWN0b3J5KTtlLk5vZGVDYW52YXNGYWN0b3J5PWQ7dmFyIHA9ZnVuY3Rpb24odCl7bChyLHQpO3ZhciBlPWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBhKHRoaXMsciksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHMocixbe2tleToiX2ZldGNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57Y01hcERhdGE6dCxjb21wcmVzc2lvblR5cGU6ZX19KSl9fV0pLHJ9KGkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5KTtlLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1wO3ZhciB2PWZ1bmN0aW9uKHQpe2wocix0KTt2YXIgZT1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gYSh0aGlzLHIpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBzKHIsW3trZXk6Il9mZXRjaERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpfX1dKSxyfShpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7ZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9dn0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuVGV4dExheWVyUmVuZGVyVGFzaz12b2lkIDAsZS5yZW5kZXJUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dC50ZXh0Q29udGVudFNvdXJjZXx8IXQudGV4dENvbnRlbnQmJiF0LnRleHRDb250ZW50U3RyZWFtfHwoKDAsYS5kZXByZWNhdGVkKSgiVGhlIFRleHRMYXllclJlbmRlciBgdGV4dENvbnRlbnRgL2B0ZXh0Q29udGVudFN0cmVhbWAgcGFyYW1ldGVycyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSwgcGxlYXNlIHVzZSBgdGV4dENvbnRlbnRTb3VyY2VgIGluc3RlYWQuIiksdC50ZXh0Q29udGVudFNvdXJjZT10LnRleHRDb250ZW50fHx0LnRleHRDb250ZW50U3RyZWFtKTt2YXIgZT1uZXcgcCh0KTtyZXR1cm4gZS5fcmVuZGVyKCksZX0sZS51cGRhdGVUZXh0TGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250YWluZXIscj10LnZpZXdwb3J0LG49dC50ZXh0RGl2cyxpPXQudGV4dERpdlByb3BlcnRpZXMsbz10LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkLGw9dC5tdXN0Um90YXRlLHU9dm9pZCAwPT09bHx8bCxjPXQubXVzdFJlc2NhbGUsZj12b2lkIDA9PT1jfHxjO2lmKHUmJigwLGEuc2V0TGF5ZXJEaW1lbnNpb25zKShlLHtyb3RhdGlvbjpyLnJvdGF0aW9ufSksZil7dmFyIHAsdj1oKDAsbykseT17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpyLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6dn0sbT1zKG4pO3RyeXtmb3IobS5zKCk7IShwPW0ubigpKS5kb25lOyl7dmFyIGc9cC52YWx1ZTt5LnByb3BlcnRpZXM9aS5nZXQoZykseS5kaXY9ZyxkKHkpfX1jYXRjaCh0KXttLmUodCl9ZmluYWxseXttLmYoKX19fTt2YXIgaT1yKDEpLGE9cigxMzcpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsYT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShpLmtleSksInN5bWJvbCI9PT1uKGEpP2E6U3RyaW5nKGEpKSxpKX12YXIgYX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2wodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufXZhciB1PTMwLGM9bmV3IE1hcDtmdW5jdGlvbiBoKHQsZSl7dmFyIHI7aWYoZSYmaS5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClyPW5ldyBPZmZzY3JlZW5DYW52YXModCx0KS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PXQscj1uLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksYT17YW5nbGU6MCxjYW52YXNXaWR0aDowLGhhc1RleHQ6IiIhPT1lLnN0cixoYXNFT0w6ZS5oYXNFT0wsZm9udFNpemU6MH07dC5fdGV4dERpdnMucHVzaChuKTt2YXIgbz1pLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSxlLnRyYW5zZm9ybSkscz1NYXRoLmF0YW4yKG9bMV0sb1swXSksbD1yW2UuZm9udE5hbWVdO2wudmVydGljYWwmJihzKz1NYXRoLlBJLzIpO3ZhciBmLGQscD1NYXRoLmh5cG90KG9bMl0sb1szXSksdj1wKmZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5nZXQodCk7aWYocilyZXR1cm4gcjt2YXIgbj1oKHUsZSk7bi5mb250PSIiLmNvbmNhdCh1LCJweCAiKS5jb25jYXQodCk7dmFyIGk9bi5tZWFzdXJlVGV4dCgiIiksYT1pLmZvbnRCb3VuZGluZ0JveEFzY2VudCxvPU1hdGguYWJzKGkuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7aWYoYSl7dmFyIHM9YS8oYStvKTtyZXR1cm4gYy5zZXQodCxzKSxuLmNhbnZhcy53aWR0aD1uLmNhbnZhcy5oZWlnaHQ9MCxzfW4uc3Ryb2tlU3R5bGU9InJlZCIsbi5jbGVhclJlY3QoMCwwLHUsdSksbi5zdHJva2VUZXh0KCJnIiwwLDApO3ZhciBsPW4uZ2V0SW1hZ2VEYXRhKDAsMCx1LHUpLmRhdGE7bz0wO2Zvcih2YXIgZj1sLmxlbmd0aC0xLTM7Zj49MDtmLT00KWlmKGxbZl0+MCl7bz1NYXRoLmNlaWwoZi80L3UpO2JyZWFrfW4uY2xlYXJSZWN0KDAsMCx1LHUpLG4uc3Ryb2tlVGV4dCgiQSIsMCx1KSxhPTA7Zm9yKHZhciBkPTAscD0obD1uLmdldEltYWdlRGF0YSgwLDAsdSx1KS5kYXRhKS5sZW5ndGg7ZDxwO2QrPTQpaWYobFtkXT4wKXthPXUtTWF0aC5mbG9vcihkLzQvdSk7YnJlYWt9aWYobi5jYW52YXMud2lkdGg9bi5jYW52YXMuaGVpZ2h0PTAsYSl7dmFyIHY9YS8oYStvKTtyZXR1cm4gYy5zZXQodCx2KSx2fXJldHVybiBjLnNldCh0LC44KSwuOH0obC5mb250RmFtaWx5LHQuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKTswPT09cz8oZj1vWzRdLGQ9b1s1XS12KTooZj1vWzRdK3YqTWF0aC5zaW4ocyksZD1vWzVdLXYqTWF0aC5jb3MocykpO3ZhciB5PSJjYWxjKHZhcigtLXNjYWxlLWZhY3RvcikqIixtPW4uc3R5bGU7dC5fY29udGFpbmVyPT09dC5fcm9vdENvbnRhaW5lcj8obS5sZWZ0PSIiLmNvbmNhdCgoMTAwKmYvdC5fcGFnZVdpZHRoKS50b0ZpeGVkKDIpLCIlIiksbS50b3A9IiIuY29uY2F0KCgxMDAqZC90Ll9wYWdlSGVpZ2h0KS50b0ZpeGVkKDIpLCIlIikpOihtLmxlZnQ9IiIuY29uY2F0KHkpLmNvbmNhdChmLnRvRml4ZWQoMiksInB4KSIpLG0udG9wPSIiLmNvbmNhdCh5KS5jb25jYXQoZC50b0ZpeGVkKDIpLCJweCkiKSksbS5mb250U2l6ZT0iIi5jb25jYXQoeSkuY29uY2F0KHAudG9GaXhlZCgyKSwicHgpIiksbS5mb250RmFtaWx5PWwuZm9udEZhbWlseSxhLmZvbnRTaXplPXAsbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKSxuLnRleHRDb250ZW50PWUuc3RyLG4uZGlyPWUuZGlyLHQuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYobi5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpLDAhPT1zJiYoYS5hbmdsZT1zKigxODAvTWF0aC5QSSkpO3ZhciBnPSExO2lmKGUuc3RyLmxlbmd0aD4xKWc9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7dmFyIGI9TWF0aC5hYnMoZS50cmFuc2Zvcm1bMF0pLF89TWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO2IhPT1fJiZNYXRoLm1heChiLF8pL01hdGgubWluKGIsXyk+MS41JiYoZz0hMCl9ZyYmKGEuY2FudmFzV2lkdGg9bC52ZXJ0aWNhbD9lLmhlaWdodDplLndpZHRoKSx0Ll90ZXh0RGl2UHJvcGVydGllcy5zZXQobixhKSx0Ll9pc1JlYWRhYmxlU3RyZWFtJiZ0Ll9sYXlvdXRUZXh0KG4pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXYscj10LnNjYWxlLG49dC5wcm9wZXJ0aWVzLGk9dC5jdHgsYT10LnByZXZGb250U2l6ZSxvPXQucHJldkZvbnRGYW1pbHkscz1lLnN0eWxlLGw9IiI7aWYoMCE9PW4uY2FudmFzV2lkdGgmJm4uaGFzVGV4dCl7dmFyIHU9cy5mb250RmFtaWx5LGM9bi5jYW52YXNXaWR0aCxoPW4uZm9udFNpemU7YT09PWgmJm89PT11fHwoaS5mb250PSIiLmNvbmNhdChoKnIsInB4ICIpLmNvbmNhdCh1KSx0LnByZXZGb250U2l6ZT1oLHQucHJldkZvbnRGYW1pbHk9dSk7dmFyIGY9aS5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aDtmPjAmJihsPSJzY2FsZVgoIi5jb25jYXQoYypyL2YsIikiKSl9MCE9PW4uYW5nbGUmJihsPSJyb3RhdGUoIi5jb25jYXQobi5hbmdsZSwiZGVnKSAiKS5jb25jYXQobCkpLGwubGVuZ3RoPjAmJihzLnRyYW5zZm9ybT1sKX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbj10aGlzLG89ZS50ZXh0Q29udGVudFNvdXJjZSxzPWUuY29udGFpbmVyLGw9ZS52aWV3cG9ydCx1PWUudGV4dERpdnMsYz1lLnRleHREaXZQcm9wZXJ0aWVzLGY9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGQ9ZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLl90ZXh0Q29udGVudFNvdXJjZT1vLHRoaXMuX2lzUmVhZGFibGVTdHJlYW09byBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtLHRoaXMuX2NvbnRhaW5lcj10aGlzLl9yb290Q29udGFpbmVyPXMsdGhpcy5fdGV4dERpdnM9dXx8W10sdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0cj1mfHxbXSx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKG51bGw9PT0ocj1nbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpfHx2b2lkIDA9PT1yfHwhci5lbmFibGVkKSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1jfHxuZXcgV2Vha01hcCx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fbGF5b3V0VGV4dFBhcmFtcz17cHJldkZvbnRTaXplOm51bGwscHJldkZvbnRGYW1pbHk6bnVsbCxkaXY6bnVsbCxzY2FsZTpsLnNjYWxlKihnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpLHByb3BlcnRpZXM6bnVsbCxjdHg6aCgwLGQpfTt2YXIgcD1sLnJhd0RpbXMsdj1wLnBhZ2VXaWR0aCx5PXAucGFnZUhlaWdodCxtPXAucGFnZVgsZz1wLnBhZ2VZO3RoaXMuX3RyYW5zZm9ybT1bMSwwLDAsLTEsLW0sZyt5XSx0aGlzLl9wYWdlV2lkdGg9dix0aGlzLl9wYWdlSGVpZ2h0PXksKDAsYS5zZXRMYXllckRpbWVuc2lvbnMpKHMsbCksdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKGZ1bmN0aW9uKCl7bi5fbGF5b3V0VGV4dFBhcmFtcz1udWxsfSkpLmNhdGNoKChmdW5jdGlvbigpe30pKX12YXIgZSxyO3JldHVybiBlPXQsKHI9W3trZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsZWQ9ITAsdGhpcy5fcmVhZGVyJiYodGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBpLkFib3J0RXhjZXB0aW9uKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfX0se2tleToiX3Byb2Nlc3NJdGVtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXModCk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKHZvaWQgMCE9PWkuc3RyKXRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpLnN0ciksZih0aGlzLGksZSk7ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09aS50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PWkudHlwZSl7dmFyIGE9dGhpcy5fY29udGFpbmVyO3RoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcmtlZENvbnRlbnQiKSxudWxsIT09aS5pZCYmdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCIiLmNvbmNhdChpLmlkKSksYS5hcHBlbmQodGhpcy5fY29udGFpbmVyKX1lbHNlImVuZE1hcmtlZENvbnRlbnQiPT09aS50eXBlJiYodGhpcy5fY29udGFpbmVyPXRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2xheW91dFRleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcz10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodCk7aWYodGhpcy5fbGF5b3V0VGV4dFBhcmFtcy5kaXY9dCxkKHRoaXMuX2xheW91dFRleHRQYXJhbXMpLGUuaGFzVGV4dCYmdGhpcy5fY29udGFpbmVyLmFwcGVuZCh0KSxlLmhhc0VPTCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTtyLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmQocil9fX0se2tleToiX3JlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5faXNSZWFkYWJsZVN0cmVhbSl0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTb3VyY2UuZ2V0UmVhZGVyKCksZnVuY3Rpb24gbigpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oaSl7dmFyIGE9aS52YWx1ZTtpLmRvbmU/ZS5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24ocixhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsciksbigpKX0pLGUucmVqZWN0KX0oKTtlbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFNvdXJjZSl0aHJvdyBuZXcgRXJyb3IoJ05vICJ0ZXh0Q29udGVudFNvdXJjZSIgcGFyYW1ldGVyIHNwZWNpZmllZC4nKTt2YXIgbj10aGlzLl90ZXh0Q29udGVudFNvdXJjZSxhPW4uaXRlbXMsbz1uLnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMoYSxvKSxlLnJlc29sdmUoKX1lLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyPW51bGwsZnVuY3Rpb24odCl7aWYoIXQuX2NhbmNlbGVkKXt2YXIgZT10Ll90ZXh0RGl2cyxyPXQuX2NhcGFiaWxpdHk7aWYoZS5sZW5ndGg+MWU1KXIucmVzb2x2ZSgpO2Vsc2V7aWYoIXQuX2lzUmVhZGFibGVTdHJlYW0pe3ZhciBuLGk9cyhlKTt0cnl7Zm9yKGkucygpOyEobj1pLm4oKSkuZG9uZTspe3ZhciBhPW4udmFsdWU7dC5fbGF5b3V0VGV4dChhKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fXIucmVzb2x2ZSgpfX19KHQpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1dKSYmbyhlLnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fSgpO2UuVGV4dExheWVyUmVuZGVyVGFzaz1wfSwodCxlLHIpPT57ZnVuY3Rpb24gbih0KXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sbih0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDE1Mykscz1yKDE1NCksbD1yKDEzNyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGModCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKHQsZSk6dm9pZCAwfX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxkKG4ua2V5KSxuKX19ZnVuY3Rpb24gZih0LGUpe3YodCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBkKHQpe3ZhciBlPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KHQpO3JldHVybiJzeW1ib2wiPT09bihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwKHQsZSxyKXt2KHQsZSksZS5zZXQodCxyKX1mdW5jdGlvbiB2KHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB5KHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LGIodCxlLCJnZXQiKSl9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlLnNldCllLnNldC5jYWxsKHQscik7ZWxzZXtpZighZS53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7ZS52YWx1ZT1yfX0odCxiKHQsZSwic2V0Iikscikscn1mdW5jdGlvbiBiKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGUuZ2V0KHQpfXZhciBfLHcsQT1uZXcgV2Vha01hcCxrPW5ldyBXZWFrTWFwLFM9bmV3IFdlYWtNYXAseD1uZXcgV2Vha01hcCxFPW5ldyBXZWFrTWFwLFA9bmV3IFdlYWtNYXAsVD1uZXcgV2Vha01hcCxDPW5ldyBXZWFrTWFwLE89bmV3IFdlYWtTZXQsRj1uZXcgV2Vha1NldCxNPW5ldyBXZWFrU2V0LFI9bmV3IFdlYWtTZXQsST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksZih0aGlzLFIpLGYodGhpcyxNKSxmKHRoaXMsRiksZih0aGlzLE8pLHAodGhpcyxBLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxwKHRoaXMsayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxwKHRoaXMsUyx7d3JpdGFibGU6ITAsdmFsdWU6dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKX0pLHAodGhpcyx4LHt3cml0YWJsZTohMCx2YWx1ZTp0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyl9KSxwKHRoaXMsRSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLHAodGhpcyxQLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxULHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLHAodGhpcyxDLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0Ll9pbml0aWFsaXplZHx8KHQuX2luaXRpYWxpemVkPSEwLG8uRnJlZVRleHRFZGl0b3IuaW5pdGlhbGl6ZShlLmwxMG4pLHMuSW5rRWRpdG9yLmluaXRpYWxpemUoZS5sMTBuKSksZS51aU1hbmFnZXIucmVnaXN0ZXJFZGl0b3JUeXBlcyhbby5GcmVlVGV4dEVkaXRvcixzLklua0VkaXRvcl0pLGcodGhpcyxDLGUudWlNYW5hZ2VyKSx0aGlzLnBhZ2VJbmRleD1lLnBhZ2VJbmRleCx0aGlzLmRpdj1lLmRpdixnKHRoaXMsQSxlLmFjY2Vzc2liaWxpdHlNYW5hZ2VyKSxtKHRoaXMsQykuYWRkTGF5ZXIodGhpcyl9dmFyIGUscjtyZXR1cm4gZT10LHI9W3trZXk6InVwZGF0ZVRvb2xiYXIiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51cGRhdGVUb29sYmFyKHQpfX0se2tleToidXBkYXRlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bSh0aGlzLEMpLmdldE1vZGUoKTt5KHRoaXMsUixOKS5jYWxsKHRoaXMpLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8odGhpcy5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMSksdGhpcy5kaXNhYmxlQ2xpY2soKSk6dGhpcy5lbmFibGVDbGljaygpLG0odGhpcyxDKS51bnNlbGVjdEFsbCgpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWVUZXh0RWRpdGluZyIsdD09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImlua0VkaXRpbmciLHQ9PT1pLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyl9fSx7a2V5OiJhZGRJbmtFZGl0b3JJZk5lZWRlZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodHx8bSh0aGlzLEMpLmdldE1vZGUoKT09PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKXtpZighdCl7dmFyIGUscj11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlO2lmKG4uaXNFbXB0eSgpKXJldHVybiB2b2lkIG4uc2V0SW5CYWNrZ3JvdW5kKCl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX15KHRoaXMsTSxEKS5jYWxsKHRoaXMse29mZnNldFg6MCxvZmZzZXRZOjB9KS5zZXRJbkJhY2tncm91bmQoKX19fSx7a2V5OiJzZXRFZGl0aW5nU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS5zZXRFZGl0aW5nU3RhdGUodCl9fSx7a2V5OiJhZGRDb21tYW5kcyIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLmFkZENvbW1hbmRzKHQpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmVuYWJsZUVkaXRpbmcoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiO3ZhciB0LGU9dShtKHRoaXMsRSkudmFsdWVzKCkpO3RyeXtmb3IoZS5zKCk7ISh0PWUubigpKS5kb25lOyl0LnZhbHVlLmRpc2FibGVFZGl0aW5nKCl9Y2F0Y2godCl7ZS5lKHQpfWZpbmFsbHl7ZS5mKCl9fX0se2tleToic2V0QWN0aXZlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuZ2V0QWN0aXZlKCkhPT10JiZtKHRoaXMsQykuc2V0QWN0aXZlRWRpdG9yKHQpfX0se2tleToiZW5hYmxlQ2xpY2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0odGhpcyx4KSksdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixtKHRoaXMsUykpfX0se2tleToiZGlzYWJsZUNsaWNrIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixtKHRoaXMseCkpLHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsbSh0aGlzLFMpKX19LHtrZXk6ImF0dGFjaCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEUpLnNldCh0LmlkLHQpfX0se2tleToiZGV0YWNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTttKHRoaXMsRSkuZGVsZXRlKHQuaWQpLG51bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO20odGhpcyxDKS5yZW1vdmVFZGl0b3IodCksdGhpcy5kZXRhY2godCksdC5kaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmRpdi5zdHlsZS5kaXNwbGF5PSIiLHQuZGl2LnJlbW92ZSgpLHQuaXNBdHRhY2hlZFRvRE9NPSExLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5JiZtKGUsQykuZm9jdXNNYWluQ29udGFpbmVyKCl9KSwwKSxtKHRoaXMsVCl8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtpZih5KHRoaXMsTyxqKS5jYWxsKHRoaXMsdCksbSh0aGlzLEMpLmFkZEVkaXRvcih0KSx0aGlzLmF0dGFjaCh0KSwhdC5pc0F0dGFjaGVkVG9ET00pe3ZhciBlPXQucmVuZGVyKCk7dGhpcy5kaXYuYXBwZW5kKGUpLHQuaXNBdHRhY2hlZFRvRE9NPSEwfXRoaXMubW92ZUVkaXRvckluRE9NKHQpLHQub25jZUFkZGVkKCksbSh0aGlzLEMpLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodCl9fSx7a2V5OiJtb3ZlRWRpdG9ySW5ET00iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1tKHRoaXMsQSkpfHx2b2lkIDA9PT1lfHxlLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX19LHtrZXk6ImFkZE9yUmVidWlsZCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5uZWVkc1RvQmVSZWJ1aWx0KCk/dC5yZWJ1aWxkKCk6dGhpcy5hZGQodCl9fSx7a2V5OiJhZGRBTmV3RWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX19LHtrZXk6ImFkZFVuZG9hYmxlRWRpdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpmdW5jdGlvbigpe2UuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOmZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITF9KX19LHtrZXk6ImdldE5leHRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLEMpLmdldElkKCl9fSx7a2V5OiJkZXNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuYW5ub3RhdGlvblR5cGUpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gby5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKTtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBzLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMsbSh0aGlzLEMpKX1yZXR1cm4gbnVsbH19LHtrZXk6InNldFNlbGVjdGVkIix2YWx1ZTpmdW5jdGlvbih0KXttKHRoaXMsQykuc2V0U2VsZWN0ZWQodCl9fSx7a2V5OiJ0b2dnbGVTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7bSh0aGlzLEMpLnRvZ2dsZVNlbGVjdGVkKHQpfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odGhpcyxDKS5pc1NlbGVjdGVkKHQpfX0se2tleToidW5zZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKHQpe20odGhpcyxDKS51bnNlbGVjdCh0KX19LHtrZXk6InBvaW50ZXJ1cCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc01hYzswIT09dC5idXR0b258fHQuY3RybEtleSYmZXx8dC50YXJnZXQ9PT10aGlzLmRpdiYmbSh0aGlzLFApJiYoZyh0aGlzLFAsITEpLG0odGhpcyxrKT95KHRoaXMsTSxEKS5jYWxsKHRoaXMsdCk6Zyh0aGlzLGssITApKX19LHtrZXk6InBvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1pLkZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzTWFjO2lmKCEoMCE9PXQuYnV0dG9ufHx0LmN0cmxLZXkmJmUpJiZ0LnRhcmdldD09PXRoaXMuZGl2KXtnKHRoaXMsUCwhMCk7dmFyIHI9bSh0aGlzLEMpLmdldEFjdGl2ZSgpO2codGhpcyxrLCFyfHxyLmlzRW1wdHkoKSl9fX0se2tleToiZHJvcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpLHI9bSh0aGlzLEMpLmdldEVkaXRvcihlKTtpZihyKXt0LnByZXZlbnREZWZhdWx0KCksdC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIseSh0aGlzLE8saikuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5jbGllbnRYLW4ueCxhPXQuY2xpZW50WS1uLnk7ci50cmFuc2xhdGUoaS1yLnN0YXJ0WCxhLXIuc3RhcnRZKSx0aGlzLm1vdmVFZGl0b3JJbkRPTShyKSxyLmRpdi5mb2N1cygpfX19LHtrZXk6ImRyYWdvdmVyIix2YWx1ZTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0OyhudWxsPT09KHQ9bSh0aGlzLEMpLmdldEFjdGl2ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wYXJlbnQpPT09dGhpcyYmbSh0aGlzLEMpLnNldEFjdGl2ZUVkaXRvcihudWxsKTt2YXIgZSxyPXUobSh0aGlzLEUpLnZhbHVlcygpKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspe3ZhciBuLGk9ZS52YWx1ZTtudWxsPT09KG49bSh0aGlzLEEpKXx8dm9pZCAwPT09bnx8bi5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoaS5jb250ZW50RGl2KSxpLnNldFBhcmVudChudWxsKSxpLmlzQXR0YWNoZWRUb0RPTT0hMSxpLmRpdi5yZW1vdmUoKX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5kaXY9bnVsbCxtKHRoaXMsRSkuY2xlYXIoKSxtKHRoaXMsQykucmVtb3ZlTGF5ZXIodGhpcyl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld3BvcnQ7dGhpcy52aWV3cG9ydD1lLCgwLGwuc2V0TGF5ZXJEaW1lbnNpb25zKSh0aGlzLmRpdixlKSwoMCxhLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dmFyIHIsbj11KG0odGhpcyxDKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3RoaXMuYWRkKGkpfX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX10aGlzLnVwZGF0ZU1vZGUoKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC52aWV3cG9ydDttKHRoaXMsQykuY29tbWl0T3JSZW1vdmUoKSx0aGlzLnZpZXdwb3J0PWUsKDAsbC5zZXRMYXllckRpbWVuc2lvbnMpKHRoaXMuZGl2LHtyb3RhdGlvbjplLnJvdGF0aW9ufSksdGhpcy51cGRhdGVNb2RlKCl9fSx7a2V5OiJwYWdlRGltZW5zaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52aWV3cG9ydC5yYXdEaW1zO3JldHVyblt0LnBhZ2VXaWR0aCx0LnBhZ2VIZWlnaHRdfX1dLHImJmgoZS5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBqKHQpe3ZhciBlO3QucGFyZW50IT09dGhpcyYmKHRoaXMuYXR0YWNoKHQpLG51bGw9PT0oZT10LnBhcmVudCl8fHZvaWQgMD09PWV8fGUuZGV0YWNoKHQpLHQuc2V0UGFyZW50KHRoaXMpLHQuZGl2JiZ0LmlzQXR0YWNoZWRUb0RPTSYmKHQuZGl2LnJlbW92ZSgpLHRoaXMuZGl2LmFwcGVuZCh0LmRpdikpKX1mdW5jdGlvbiBMKHQpe3N3aXRjaChtKHRoaXMsQykuZ2V0TW9kZSgpKXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBvLkZyZWVUZXh0RWRpdG9yKHQpO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6cmV0dXJuIG5ldyBzLklua0VkaXRvcih0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEKHQpe3ZhciBlPXRoaXMuZ2V0TmV4dElkKCkscj15KHRoaXMsRixMKS5jYWxsKHRoaXMse3BhcmVudDp0aGlzLGlkOmUseDp0Lm9mZnNldFgseTp0Lm9mZnNldFksdWlNYW5hZ2VyOm0odGhpcyxDKX0pO3JldHVybiByJiZ0aGlzLmFkZChyKSxyfWZ1bmN0aW9uIE4oKXtnKHRoaXMsVCwhMCk7dmFyIHQsZT11KG0odGhpcyxFKS52YWx1ZXMoKSk7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3IuaXNFbXB0eSgpJiZyLnJlbW92ZSgpfX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX1nKHRoaXMsVCwhMSl9ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9SSxfPUksKHc9ZCh3PSJfaW5pdGlhbGl6ZWQiKSlpbiBfP09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHcse3ZhbHVlOmZhbHNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6X1t3XT1mYWxzZX0sKHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LG4odCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuRnJlZVRleHRFZGl0b3I9dm9pZCAwO3ZhciBpPXIoMSksYT1yKDEzNiksbz1yKDEzNSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9dSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGksYSxvLHM9W10sbD0hMCx1PSExO3RyeXtpZihhPShyPXIuY2FsbCh0KSkubmV4dCwwPT09ZSl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShuPWEuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT1lKTtsPSEwKTt9Y2F0Y2godCl7dT0hMCxpPXR9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgaX19cmV0dXJuIHN9fSh0LGUpfHx1KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBjKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/Yyh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gYyh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/aChPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2IodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmgoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXyhuLmtleSksbil9fWZ1bmN0aW9uIHAoKXtyZXR1cm4gcD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PW0odCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSx2KHQsZSl9ZnVuY3Rpb24geSh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sbSh0KX1mdW5jdGlvbiBnKHQsZSl7QSh0LGUpLGUuYWRkKHQpfWZ1bmN0aW9uIGIodCxlLHIpe3JldHVybihlPV8oZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gXyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09bih0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBpPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oaSkpcmV0dXJuIGk7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PW4oZSk/ZTpTdHJpbmcoZSl9ZnVuY3Rpb24gdyh0LGUscil7QSh0LGUpLGUuc2V0KHQscil9ZnVuY3Rpb24gQSh0LGUpe2lmKGUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldD9lLmdldC5jYWxsKHQpOmUudmFsdWV9KHQsRSh0LGUsImdldCIpKX1mdW5jdGlvbiBTKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7aWYoZS5zZXQpZS5zZXQuY2FsbCh0LHIpO2Vsc2V7aWYoIWUud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2UudmFsdWU9cn19KHQsRSh0LGUsInNldCIpLHIpLHJ9ZnVuY3Rpb24gRSh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX12YXIgUD1uZXcgV2Vha01hcCxUPW5ldyBXZWFrTWFwLEM9bmV3IFdlYWtNYXAsTz1uZXcgV2Vha01hcCxGPW5ldyBXZWFrTWFwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha1NldCxEPW5ldyBXZWFrU2V0LE49bmV3IFdlYWtTZXQsVT1uZXcgV2Vha1NldCxXPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ2KHQsZSl9KEUsdCk7dmFyIGUscixoLGIsXyxBPShiPUUsXz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgdCxlPW0oYik7aWYoXyl7dmFyIHI9bSh0aGlzKS5jb25zdHJ1Y3Rvcjt0PVJlZmxlY3QuY29uc3RydWN0KGUsYXJndW1lbnRzLHIpfWVsc2UgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihlJiYoIm9iamVjdCI9PT1uKGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkpcmV0dXJuIGU7aWYodm9pZCAwIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiB5KHQpfSh0aGlzLHQpfSk7ZnVuY3Rpb24gRSh0KXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxFKSxnKHkoZT1BLmNhbGwodGhpcyxmKGYoe30sdCkse30se25hbWU6ImZyZWVUZXh0RWRpdG9yIn0pKSksVSksZyh5KGUpLE4pLGcoeShlKSxEKSxnKHkoZSksTCksdyh5KGUpLFAse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Qmx1ci5iaW5kKHkoZSkpfSksdyh5KGUpLFQse3dyaXRhYmxlOiEwLHZhbHVlOmUuZWRpdG9yRGl2Rm9jdXMuYmluZCh5KGUpKX0pLHcoeShlKSxDLHt3cml0YWJsZTohMCx2YWx1ZTplLmVkaXRvckRpdklucHV0LmJpbmQoeShlKSl9KSx3KHkoZSksTyx7d3JpdGFibGU6ITAsdmFsdWU6ZS5lZGl0b3JEaXZLZXlkb3duLmJpbmQoeShlKSl9KSx3KHkoZSksRix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdyh5KGUpLE0se3dyaXRhYmxlOiEwLHZhbHVlOiIifSksdyh5KGUpLFIse3dyaXRhYmxlOiEwLHZhbHVlOiIiLmNvbmNhdChlLmlkLCItZWRpdG9yIil9KSx3KHkoZSksSSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx3KHkoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSkseCh5KGUpLEYsdC5jb2xvcnx8RS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLHgoeShlKSxqLHQuZm9udFNpemV8fEUuX2RlZmF1bHRGb250U2l6ZSksZX1yZXR1cm4gZT1FLGg9W3trZXk6ImluaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO3RoaXMuX2ludGVybmFsUGFkZGluZz1wYXJzZUZsb2F0KGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1mcmVldGV4dC1wYWRkaW5nIikpfX0se2tleToidXBkYXRlRGVmYXVsdFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6RS5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkUuX2RlZmF1bHRDb2xvcj1lfX19LHtrZXk6ImRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLEUuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRS5fZGVmYXVsdENvbG9yfHxvLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4sYT1wKG0oRSksImRlc2VyaWFsaXplIix0aGlzKS5jYWxsKHRoaXMsdCxlLHIpO3JldHVybiB4KGEsaix0LmZvbnRTaXplKSx4KGEsRixpLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGkuVXRpbCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBjKHQpfShuPXQuY29sb3IpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KG4pfHx1KG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSkseChhLE0sdC52YWx1ZSksYX19XSwocj1be2tleToidXBkYXRlUGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpTKHRoaXMsTCxHKS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOlModGhpcyxELEIpLmNhbGwodGhpcyxlKX19fSx7a2V5OiJwcm9wZXJ0aWVzVG9VcGRhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLGsodGhpcyxqKV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isayh0aGlzLEYpXV19fSx7a2V5OiJnZXRJbml0aWFsVHJhbnNsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnRTY2FsZTtyZXR1cm5bLUUuX2ludGVybmFsUGFkZGluZyp0LC0oRS5faW50ZXJuYWxQYWRkaW5nK2sodGhpcyxqKSkqdF19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3AobShFLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5pc0F0dGFjaGVkVG9ET018fHRoaXMucGFyZW50LmFkZCh0aGlzKSl9fSx7a2V5OiJlbmFibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpfHwodGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCExKSx0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQpLHAobShFLnByb3RvdHlwZSksImVuYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QucmVtb3ZlKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwLHRoaXMuZGl2LmRyYWdnYWJsZT0hMSx0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGsodGhpcyxPKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGsodGhpcyxUKSksdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsayh0aGlzLFApKSx0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsayh0aGlzLEMpKSl9fSx7a2V5OiJkaXNhYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0luRWRpdE1vZGUoKSYmKHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCkscChtKEUucHJvdG90eXBlKSwiZGlzYWJsZUVkaXRNb2RlIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJlbmFibGVkIiksdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSExLHRoaXMuZGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixrKHRoaXMsUikpLHRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixrKHRoaXMsTykpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixrKHRoaXMsVCkpLHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGsodGhpcyxQKSksdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGsodGhpcyxDKSksdGhpcy5kaXYuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmlzRWRpdGluZz0hMSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cChtKEUucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHQudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fSx7a2V5OiJvbmNlQWRkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53aWR0aHx8KHRoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpKX19LHtrZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKSx0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIikscChtKEUucHJvdG90eXBlKSwicmVtb3ZlIix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToiY29tbWl0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNJbkVkaXRNb2RlKCkmJihwKG0oRS5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksayh0aGlzLEkpfHwoeCh0aGlzLEksITApLHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpKSx0aGlzLmRpc2FibGVFZGl0TW9kZSgpLHgodGhpcyxNLFModGhpcyxOLHEpLmNhbGwodGhpcykudHJpbUVuZCgpKSxTKHRoaXMsVSxIKS5jYWxsKHRoaXMpKX19LHtrZXk6InNob3VsZEdldEtleWJvYXJkRXZlbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5FZGl0TW9kZSgpfX0se2tleToiZGJsY2xpY2siLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKSx0aGlzLmVkaXRvckRpdi5mb2N1cygpfX0se2tleToia2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT10aGlzLmRpdiYmIkVudGVyIj09PXQua2V5JiYodGhpcy5lbmFibGVFZGl0TW9kZSgpLHRoaXMuZWRpdG9yRGl2LmZvY3VzKCkpfX0se2tleToiZWRpdG9yRGl2S2V5ZG93biIsdmFsdWU6ZnVuY3Rpb24odCl7RS5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcyx0KX19LHtrZXk6ImVkaXRvckRpdkZvY3VzIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmlzRWRpdGluZz0hMH19LHtrZXk6ImVkaXRvckRpdkJsdXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaXNFZGl0aW5nPSExfX0se2tleToiZWRpdG9yRGl2SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHRoaXMuaXNFbXB0eSgpKX19LHtrZXk6ImRpc2FibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsImNvbW1lbnQiKSx0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIil9fSx7a2V5OiJlbmFibGVFZGl0aW5nIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlsaW5lIiwhMCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkscChtKEUucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLHRoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiLHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLGsodGhpcyxSKSksdGhpcy5lbmFibGVFZGl0aW5nKCksRS5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KX0pKSxFLl9sMTBuUHJvbWlzZS5nZXQoImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50IikudGhlbigoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT1yLmVkaXRvckRpdil8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2V0QXR0cmlidXRlKCJkZWZhdWx0LWNvbnRlbnQiLHQpfSkpLHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt2YXIgbj10aGlzLmVkaXRvckRpdi5zdHlsZTtpZihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGsodGhpcyxqKSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpLG4uY29sb3I9ayh0aGlzLEYpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLmVkaXRvckRpdiksdGhpcy5vdmVybGF5RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKCJvdmVybGF5IiwiZW5hYmxlZCIpLHRoaXMuZGl2LmFwcGVuZCh0aGlzLm92ZXJsYXlEaXYpLCgwLGEuYmluZEV2ZW50cykodGhpcyx0aGlzLmRpdixbImRibGNsaWNrIiwia2V5ZG93biJdKSx0aGlzLndpZHRoKXt2YXIgaT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWlbMF0sdT1pWzFdO3RoaXMuc2V0QXQodCpvLGUqdSx0aGlzLndpZHRoKm8sdGhpcy5oZWlnaHQqdSk7dmFyIGMsaD1zKGsodGhpcyxNKS5zcGxpdCgiXG4iKSk7dHJ5e2ZvcihoLnMoKTshKGM9aC5uKCkpLmRvbmU7KXt2YXIgZj1jLnZhbHVlLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmQoZj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKSx0aGlzLmVkaXRvckRpdi5hcHBlbmQoZCl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMCx0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZSB0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwO3JldHVybiB0aGlzLmRpdn19LHtrZXk6ImNvbnRlbnREaXYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRvckRpdn19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD1FLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnRTY2FsZSxlPXRoaXMuZ2V0UmVjdCh0LHQpLHI9by5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTT9nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWRpdG9yRGl2KS5jb2xvcjprKHRoaXMsRikpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhULGNvbG9yOnIsZm9udFNpemU6ayh0aGlzLGopLHZhbHVlOmsodGhpcyxNKSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1dKSYmZChlLnByb3RvdHlwZSxyKSxoJiZkKGUsaCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksRX0oby5Bbm5vdGF0aW9uRWRpdG9yKTtmdW5jdGlvbiBHKHQpe3ZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtlLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdCh0LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIiksZS50cmFuc2xhdGUoMCwtKHQtayhlLGopKSplLnBhcmVudFNjYWxlKSx4KGUsaix0KSxTKGUsVSxIKS5jYWxsKGUpfSxuPWsodGhpcyxqKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyKHQpfSx1bmRvOmZ1bmN0aW9uKCl7cihuKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIEIodCl7dmFyIGU9dGhpcyxyPWsodGhpcyxGKTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXt4KGUsRixlLmVkaXRvckRpdi5zdHlsZS5jb2xvcj10KX0sdW5kbzpmdW5jdGlvbigpe3goZSxGLGUuZWRpdG9yRGl2LnN0eWxlLmNvbG9yPXIpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIHEoKXt2YXIgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7dmFyIGUscj1bXSxuPXModCk7dHJ5e2ZvcihuLnMoKTshKGU9bi5uKCkpLmRvbmU7KXt2YXIgaT1lLnZhbHVlO3IucHVzaChpLmlubmVyVGV4dC5yZXBsYWNlKC9cclxuP3xcbi8sIiIpKX19Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIuam9pbigiXG4iKX1mdW5jdGlvbiBIKCl7dmFyIHQsZT1sKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxyPWVbMF0sbj1lWzFdO2lmKHRoaXMuaXNBdHRhY2hlZFRvRE9NKXQ9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt2YXIgaT10aGlzLmN1cnJlbnRMYXllcixhPXRoaXMuZGl2LG89YS5zdHlsZS5kaXNwbGF5O2Euc3R5bGUuZGlzcGxheT0iaGlkZGVuIixpLmRpdi5hcHBlbmQodGhpcy5kaXYpLHQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhLnJlbW92ZSgpLGEuc3R5bGUuZGlzcGxheT1vfXRoaXMud2lkdGg9dC53aWR0aC9yLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0L259ZS5GcmVlVGV4dEVkaXRvcj1XLGIoVywiX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQiLCIiKSxiKFcsIl9sMTBuUHJvbWlzZSIsdm9pZCAwKSxiKFcsIl9pbnRlcm5hbFBhZGRpbmciLDApLGIoVywiX2RlZmF1bHRDb2xvciIsbnVsbCksYihXLCJfZGVmYXVsdEZvbnRTaXplIiwxMCksYihXLCJfa2V5Ym9hcmRNYW5hZ2VyIixuZXcgYS5LZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrRW50ZXIiLCJtYWMrbWV0YStFbnRlciIsIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxXLnByb3RvdHlwZS5jb21taXRPclJlbW92ZV1dKSksYihXLCJfdHlwZSIsImZyZWV0ZXh0Iil9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLklua0VkaXRvcj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpdEN1cnZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5maXRDdXJ2ZX19KTt2YXIgaT1yKDEpLGE9cigxMzUpLG89cigxNTUpLHM9cigxMzYpO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWgodCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGYodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxoKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8aCh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2YodCxlKTp2b2lkIDB9fWZ1bmN0aW9uIGYodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP2QoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt3KHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpkKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEEobi5rZXkpLG4pfX1mdW5jdGlvbiB5KCl7cmV0dXJuIHk9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJm51bGwhPT0odD1iKHQpKTspO3JldHVybiB0fSh0LGUpO2lmKG4pe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKTtyZXR1cm4gaS5nZXQ/aS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/dDpyKTppLnZhbHVlfX0seS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbSh0LGUpfWZ1bmN0aW9uIGcodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGIodCl9ZnVuY3Rpb24gXyh0LGUpe1ModCxlKSxlLmFkZCh0KX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oZT1BKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIEEodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PW4odCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGkpKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0odCk7cmV0dXJuInN5bWJvbCI9PT1uKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGsodCxlLHIpe1ModCxlKSxlLnNldCh0LHIpfWZ1bmN0aW9uIFModCxlKXtpZihlLmhhcyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlIil9KHQsZSkscn1mdW5jdGlvbiBFKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0KWUuc2V0LmNhbGwodCxyKTtlbHNle2lmKCFlLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtlLnZhbHVlPXJ9fSh0LFQodCxlLCJzZXQiKSxyKSxyfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXQ/ZS5nZXQuY2FsbCh0KTplLnZhbHVlfSh0LFQodCxlLCJnZXQiKSl9ZnVuY3Rpb24gVCh0LGUscil7aWYoIWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK3IrIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBlLmdldCh0KX1mdW5jdGlvbiBDKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfXZhciBPPTE2LEY9MTAwLE09bmV3IFdlYWtNYXAsUj1uZXcgV2Vha01hcCxJPW5ldyBXZWFrTWFwLGo9bmV3IFdlYWtNYXAsTD1uZXcgV2Vha01hcCxEPW5ldyBXZWFrTWFwLE49bmV3IFdlYWtNYXAsVT1uZXcgV2Vha01hcCxXPW5ldyBXZWFrTWFwLEc9bmV3IFdlYWtNYXAsQj1uZXcgV2Vha01hcCxxPW5ldyBXZWFrTWFwLEg9bmV3IFdlYWtNYXAsej1uZXcgV2Vha01hcCxWPW5ldyBXZWFrU2V0LFg9bmV3IFdlYWtTZXQsWT1uZXcgV2Vha1NldCxLPW5ldyBXZWFrU2V0LEo9bmV3IFdlYWtTZXQsUT1uZXcgV2Vha1NldCwkPW5ldyBXZWFrU2V0LFo9bmV3IFdlYWtTZXQsdHQ9bmV3IFdlYWtTZXQsZXQ9bmV3IFdlYWtTZXQscnQ9bmV3IFdlYWtTZXQsbnQ9bmV3IFdlYWtTZXQsaXQ9bmV3IFdlYWtTZXQsYXQ9bmV3IFdlYWtTZXQsb3Q9bmV3IFdlYWtTZXQsc3Q9bmV3IFdlYWtTZXQsbHQ9bmV3IFdlYWtTZXQsdXQ9bmV3IFdlYWtTZXQsY3Q9bmV3IFdlYWtTZXQsaHQ9bmV3IFdlYWtTZXQsZnQ9bmV3IFdlYWtTZXQsZHQ9bmV3IFdlYWtTZXQscHQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJm0odCxlKX0oZCx0KTt2YXIgZSxyLG8scyxoLGY9KHM9ZCxoPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciB0LGU9YihzKTtpZihoKXt2YXIgcj1iKHRoaXMpLmNvbnN0cnVjdG9yO3Q9UmVmbGVjdC5jb25zdHJ1Y3QoZSxhcmd1bWVudHMscil9ZWxzZSB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PW4oZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGcodCl9KHRoaXMsdCl9KTtmdW5jdGlvbiBkKHQpe3ZhciBlO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGQpLF8oZyhlPWYuY2FsbCh0aGlzLHAocCh7fSx0KSx7fSx7bmFtZToiaW5rRWRpdG9yIn0pKSksZHQpLF8oZyhlKSxmdCksXyhnKGUpLGh0KSxfKGcoZSksY3QpLF8oZyhlKSx1dCksXyhnKGUpLGx0KSxfKGcoZSksc3QpLF8oZyhlKSxvdCksXyhnKGUpLGF0KSxfKGcoZSksaXQpLF8oZyhlKSxudCksXyhnKGUpLHJ0KSxfKGcoZSksZXQpLF8oZyhlKSx0dCksXyhnKGUpLFopLF8oZyhlKSwkKSxfKGcoZSksUSksXyhnKGUpLEopLF8oZyhlKSxLKSxfKGcoZSksWSksXyhnKGUpLFgpLF8oZyhlKSxWKSxrKGcoZSksTSx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSxSLHt3cml0YWJsZTohMCx2YWx1ZTowfSksayhnKGUpLEkse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksaix7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVybW92ZS5iaW5kKGcoZSkpfSksayhnKGUpLEwse3dyaXRhYmxlOiEwLHZhbHVlOmUuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQoZyhlKSl9KSxrKGcoZSksRCx7d3JpdGFibGU6ITAsdmFsdWU6ZS5jYW52YXNQb2ludGVydXAuYmluZChnKGUpKX0pLGsoZyhlKSxOLHt3cml0YWJsZTohMCx2YWx1ZTplLmNhbnZhc1BvaW50ZXJkb3duLmJpbmQoZyhlKSl9KSxrKGcoZSksVSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksVyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrKGcoZSksRyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGsoZyhlKSxCLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksayhnKGUpLHEse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxrKGcoZSksSCx7d3JpdGFibGU6ITAsdmFsdWU6MH0pLGsoZyhlKSx6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZS5jb2xvcj10LmNvbG9yfHxudWxsLGUudGhpY2tuZXNzPXQudGhpY2tuZXNzfHxudWxsLGUub3BhY2l0eT10Lm9wYWNpdHl8fG51bGwsZS5wYXRocz1bXSxlLmJlemllclBhdGgyRD1bXSxlLmN1cnJlbnRQYXRoPVtdLGUuc2NhbGVGYWN0b3I9MSxlLnRyYW5zbGF0aW9uWD1lLnRyYW5zbGF0aW9uWT0wLGUueD0wLGUueT0wLGV9cmV0dXJuIGU9ZCxvPVt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9sMTBuUHJvbWlzZT1uZXcgTWFwKFsiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbCIsImVkaXRvcl9pbmsyX2FyaWFfbGFiZWwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHQuZ2V0KGUpXX0pKSl9fSx7a2V5OiJ1cGRhdGVEZWZhdWx0UGFyYW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUzpkLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpkLl9kZWZhdWx0Q29sb3I9ZTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6ZC5fZGVmYXVsdE9wYWNpdHk9ZS8xMDB9fX0se2tleToiZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCpkLl9kZWZhdWx0T3BhY2l0eSldXX19LHtrZXk6ImRlc2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49eShiKGQpLCJkZXNlcmlhbGl6ZSIsdGhpcykuY2FsbCh0aGlzLHQsZSxyKTtuLnRoaWNrbmVzcz10LnRoaWNrbmVzcyxuLmNvbG9yPWkuVXRpbC5tYWtlSGV4Q29sb3IuYXBwbHkoaS5VdGlsLHUodC5jb2xvcikpLG4ub3BhY2l0eT10Lm9wYWNpdHk7dmFyIGE9YyhuLnBhZ2VEaW1lbnNpb25zLDIpLG89YVswXSxzPWFbMV0saD1uLndpZHRoKm8sZj1uLmhlaWdodCpzLHA9bi5wYXJlbnRTY2FsZSx2PXQudGhpY2tuZXNzLzI7RShuLE0saC9mKSxFKG4sVSwhMCksRShuLHEsTWF0aC5yb3VuZChoKSksRShuLEgsTWF0aC5yb3VuZChmKSk7dmFyIG0sZz1sKHQucGF0aHMpO3RyeXtmb3IoZy5zKCk7IShtPWcubigpKS5kb25lOyl7dmFyIF89bS52YWx1ZS5iZXppZXIsdz1bXTtuLnBhdGhzLnB1c2godyk7Zm9yKHZhciBBPXAqKF9bMF0tdiksaz1wKihmLV9bMV0tdiksUz0yLFA9Xy5sZW5ndGg7UzxQO1MrPTYpe3ZhciBUPXAqKF9bU10tdiksRj1wKihmLV9bUysxXS12KSxqPXAqKF9bUysyXS12KSxMPXAqKGYtX1tTKzNdLXYpLEQ9cCooX1tTKzRdLXYpLE49cCooZi1fW1MrNV0tdik7dy5wdXNoKFtbQSxrXSxbVCxGXSxbaixMXSxbRCxOXV0pLEE9RCxrPU59dmFyIFc9eCh0aGlzLGQsT3QpLmNhbGwodGhpcyx3KTtuLmJlemllclBhdGgyRC5wdXNoKFcpfX1jYXRjaCh0KXtnLmUodCl9ZmluYWxseXtnLmYoKX12YXIgRz1DKG4sY3QsSXQpLmNhbGwobik7cmV0dXJuIEUobixJLE1hdGgubWF4KE8sR1syXS1HWzBdKSksRShuLFIsTWF0aC5tYXgoTyxHWzNdLUdbMV0pKSxDKG4sYXQsVHQpLmNhbGwobixoLGYpLG59fV0sKHI9W3trZXk6InVwZGF0ZVBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6Qyh0aGlzLFYsdnQpLmNhbGwodGhpcyxlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOkModGhpcyxYLHl0KS5jYWxsKHRoaXMsZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZOkModGhpcyxZLG10KS5jYWxsKHRoaXMsZSl9fX0se2tleToicHJvcGVydGllc1RvVXBkYXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm5bW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyx0aGlzLnRoaWNrbmVzc3x8ZC5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLHRoaXMuY29sb3J8fGQuX2RlZmF1bHRDb2xvcnx8YS5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoobnVsbCE9PSh0PXRoaXMub3BhY2l0eSkmJnZvaWQgMCE9PXQ/dDpkLl9kZWZhdWx0T3BhY2l0eSkpXV19fSx7a2V5OiJyZWJ1aWxkIix2YWx1ZTpmdW5jdGlvbigpe3koYihkLnByb3RvdHlwZSksInJlYnVpbGQiLHRoaXMpLmNhbGwodGhpcyksbnVsbCE9PXRoaXMuZGl2JiYodGhpcy5jYW52YXN8fChDKHRoaXMscnQseHQpLmNhbGwodGhpcyksQyh0aGlzLG50LEV0KS5jYWxsKHRoaXMpKSx0aGlzLmlzQXR0YWNoZWRUb0RPTXx8KHRoaXMucGFyZW50LmFkZCh0aGlzKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcykpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuY2FudmFzJiYodGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PTAsdGhpcy5jYW52YXMucmVtb3ZlKCksdGhpcy5jYW52YXM9bnVsbCxQKHRoaXMsQikuZGlzY29ubmVjdCgpLEUodGhpcyxCLG51bGwpLHkoYihkLnByb3RvdHlwZSksInJlbW92ZSIsdGhpcykuY2FsbCh0aGlzKSl9fSx7a2V5OiJzZXRQYXJlbnQiLHZhbHVlOmZ1bmN0aW9uKHQpeyF0aGlzLnBhcmVudCYmdD90aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKTp0aGlzLnBhcmVudCYmbnVsbD09PXQmJnRoaXMuX3VpTWFuYWdlci5hZGRTaG91bGRSZXNjYWxlKHRoaXMpLHkoYihkLnByb3RvdHlwZSksInNldFBhcmVudCIsdGhpcykuY2FsbCh0aGlzLHQpfX0se2tleToib25TY2FsZUNoYW5naW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV0sbj10aGlzLndpZHRoKmUsaT10aGlzLmhlaWdodCpyO3RoaXMuc2V0RGltZW5zaW9ucyhuLGkpfX0se2tleToiZW5hYmxlRWRpdE1vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7UCh0aGlzLFUpfHxudWxsPT09dGhpcy5jYW52YXN8fCh5KGIoZC5wcm90b3R5cGUpLCJlbmFibGVFZGl0TW9kZSIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLmRpdi5kcmFnZ2FibGU9ITEsdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6ImRpc2FibGVFZGl0TW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMmJih5KGIoZC5wcm90b3R5cGUpLCJkaXNhYmxlRWRpdE1vZGUiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5kaXYuZHJhZ2dhYmxlPSF0aGlzLmlzRW1wdHkoKSx0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0aW5nIiksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFAodGhpcyxOKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQKHRoaXMsRCkpKX19LHtrZXk6Im9uY2VBZGRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpdi5kcmFnZ2FibGU9IXRoaXMuaXNFbXB0eSgpfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMucGF0aHMubGVuZ3RofHwxPT09dGhpcy5wYXRocy5sZW5ndGgmJjA9PT10aGlzLnBhdGhzWzBdLmxlbmd0aH19LHtrZXk6ImNvbW1pdCIsdmFsdWU6ZnVuY3Rpb24oKXtQKHRoaXMsVSl8fCh5KGIoZC5wcm90b3R5cGUpLCJjb21taXQiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5pc0VkaXRpbmc9ITEsdGhpcy5kaXNhYmxlRWRpdE1vZGUoKSx0aGlzLnNldEluRm9yZWdyb3VuZCgpLEUodGhpcyxVLCEwKSx0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJkaXNhYmxlZCIpLEModGhpcyxmdCxMdCkuY2FsbCh0aGlzLCEwKSx0aGlzLnBhcmVudC5hZGRJbmtFZGl0b3JJZk5lZWRlZCghMCksdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpLHRoaXMuZGl2LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfX0se2tleToiZm9jdXNpbiIsdmFsdWU6ZnVuY3Rpb24odCl7eShiKGQucHJvdG90eXBlKSwiZm9jdXNpbiIsdGhpcykuY2FsbCh0aGlzLHQpLHRoaXMuZW5hYmxlRWRpdE1vZGUoKX19LHtrZXk6ImNhbnZhc1BvaW50ZXJkb3duIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiFQKHRoaXMsVSkmJih0aGlzLnNldEluRm9yZWdyb3VuZCgpLCJtb3VzZSIhPT10LnR5cGUmJnRoaXMuZGl2LmZvY3VzKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksQyh0aGlzLFEsX3QpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybW92ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxDKHRoaXMsJCx3dCkuY2FsbCh0aGlzLHQub2Zmc2V0WCx0Lm9mZnNldFkpfX0se2tleToiY2FudmFzUG9pbnRlcnVwIix2YWx1ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJjAhPT10aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCYmKHQuc3RvcFByb3BhZ2F0aW9uKCksQyh0aGlzLGV0LFN0KS5jYWxsKHRoaXMsdCksdGhpcy5zZXRJbkJhY2tncm91bmQoKSl9fSx7a2V5OiJjYW52YXNQb2ludGVybGVhdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe0ModGhpcyxldCxTdCkuY2FsbCh0aGlzLHQpLHRoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyPXRoaXM7aWYodGhpcy5kaXYpcmV0dXJuIHRoaXMuZGl2O3RoaXMud2lkdGgmJih0PXRoaXMueCxlPXRoaXMueSkseShiKGQucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpLGQuX2wxMG5Qcm9taXNlLmdldCgiZWRpdG9yX2luazJfYXJpYV9sYWJlbCIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9ci5kaXYpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCl9KSk7dmFyIG49YyhDKHRoaXMsSyxndCkuY2FsbCh0aGlzKSw0KSxpPW5bMF0sYT1uWzFdLG89blsyXSxzPW5bM107aWYodGhpcy5zZXRBdChpLGEsMCwwKSx0aGlzLnNldERpbXMobyxzKSxDKHRoaXMscnQseHQpLmNhbGwodGhpcyksdGhpcy53aWR0aCl7dmFyIGw9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMiksdT1sWzBdLGg9bFsxXTt0aGlzLnNldEF0KHQqdSxlKmgsdGhpcy53aWR0aCp1LHRoaXMuaGVpZ2h0KmgpLEUodGhpcyxXLCEwKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksdGhpcy5zZXREaW1zKHRoaXMud2lkdGgqdSx0aGlzLmhlaWdodCpoKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksQyh0aGlzLGR0LER0KS5jYWxsKHRoaXMpLHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZSB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIiksdGhpcy5lbmFibGVFZGl0TW9kZSgpO3JldHVybiBDKHRoaXMsbnQsRXQpLmNhbGwodGhpcyksdGhpcy5kaXZ9fSx7a2V5OiJzZXREaW1lbnNpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucm91bmQodCksbj1NYXRoLnJvdW5kKGUpO2lmKFAodGhpcyxxKSE9PXJ8fFAodGhpcyxIKSE9PW4pe0UodGhpcyxxLHIpLEUodGhpcyxILG4pLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsUCh0aGlzLE0pJiZNYXRoLmFicyhQKHRoaXMsTSktdC9lKT4uMDEmJihlPU1hdGguY2VpbCh0L1AodGhpcyxNKSksdGhpcy5zZXREaW1zKHQsZSkpO3ZhciBpPWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGE9aVswXSxvPWlbMV07dGhpcy53aWR0aD10L2EsdGhpcy5oZWlnaHQ9ZS9vLFAodGhpcyxVKSYmQyh0aGlzLGF0LFR0KS5jYWxsKHRoaXMsdCxlKSxDKHRoaXMsaXQsUHQpLmNhbGwodGhpcyksQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpLHRoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmdldFJlY3QoMCwwKSxlPXRoaXMucm90YXRpb24lMTgwPT0wP3RbM10tdFsxXTp0WzJdLXRbMF0scj1hLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuY3R4LnN0cm9rZVN0eWxlKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssY29sb3I6cix0aGlja25lc3M6dGhpcy50aGlja25lc3Msb3BhY2l0eTp0aGlzLm9wYWNpdHkscGF0aHM6Qyh0aGlzLHN0LEZ0KS5jYWxsKHRoaXMsdGhpcy5zY2FsZUZhY3Rvci90aGlzLnBhcmVudFNjYWxlLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxyZWN0OnQscm90YXRpb246dGhpcy5yb3RhdGlvbn19fV0pJiZ2KGUucHJvdG90eXBlLHIpLG8mJnYoZSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxkfShhLkFubm90YXRpb25FZGl0b3IpO2Z1bmN0aW9uIHZ0KHQpe3ZhciBlPXRoaXMscj10aGlzLnRoaWNrbmVzczt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLnRoaWNrbmVzcz10LEMoZSxmdCxMdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UudGhpY2tuZXNzPXIsQyhlLGZ0LEx0KS5jYWxsKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24geXQodCl7dmFyIGU9dGhpcyxyPXRoaXMuY29sb3I7dGhpcy5hZGRDb21tYW5kcyh7Y21kOmZ1bmN0aW9uKCl7ZS5jb2xvcj10LEMoZSx0dCxrdCkuY2FsbChlKX0sdW5kbzpmdW5jdGlvbigpe2UuY29sb3I9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1Isb3ZlcndyaXRlSWZTYW1lVHlwZTohMCxrZWVwVW5kbzohMH0pfWZ1bmN0aW9uIG10KHQpe3ZhciBlPXRoaXM7dC89MTAwO3ZhciByPXRoaXMub3BhY2l0eTt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtlLm9wYWNpdHk9dCxDKGUsdHQsa3QpLmNhbGwoZSl9LHVuZG86ZnVuY3Rpb24oKXtlLm9wYWNpdHk9cixDKGUsdHQsa3QpLmNhbGwoZSl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9ZnVuY3Rpb24gZ3QoKXt2YXIgdD10aGlzLnBhcmVudFJvdGF0aW9uLGU9Yyh0aGlzLnBhcmVudERpbWVuc2lvbnMsMikscj1lWzBdLG49ZVsxXTtzd2l0Y2godCl7Y2FzZSA5MDpyZXR1cm5bMCxuLG4scl07Y2FzZSAxODA6cmV0dXJuW3IsbixyLG5dO2Nhc2UgMjcwOnJldHVybltyLDAsbixyXTtkZWZhdWx0OnJldHVyblswLDAscixuXX19ZnVuY3Rpb24gYnQoKXt2YXIgdD10aGlzLmN0eCxlPXRoaXMuY29sb3Iscj10aGlzLm9wYWNpdHksbj10aGlzLnRoaWNrbmVzcyxpPXRoaXMucGFyZW50U2NhbGUsYT10aGlzLnNjYWxlRmFjdG9yO3QubGluZVdpZHRoPW4qaS9hLHQubGluZUNhcD0icm91bmQiLHQubGluZUpvaW49InJvdW5kIix0Lm1pdGVyTGltaXQ9MTAsdC5zdHJva2VTdHlsZT0iIi5jb25jYXQoZSkuY29uY2F0KCgwLHMub3BhY2l0eVRvSGV4KShyKSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcixuPXRoaXM7dGhpcy5pc0VkaXRpbmc9ITAsUCh0aGlzLFcpfHwoRSh0aGlzLFcsITApLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSx0aGlzLnRoaWNrbmVzc3x8KHRoaXMudGhpY2tuZXNzPXB0Ll9kZWZhdWx0VGhpY2tuZXNzKSx0aGlzLmNvbG9yfHwodGhpcy5jb2xvcj1wdC5fZGVmYXVsdENvbG9yfHxhLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpLG51bGwhPT0ocj10aGlzLm9wYWNpdHkpJiZ2b2lkIDAhPT1yfHwodGhpcy5vcGFjaXR5PXB0Ll9kZWZhdWx0T3BhY2l0eSkpLHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsbnVsbCksQyh0aGlzLEosYnQpLmNhbGwodGhpcyksdGhpcy5jdHguYmVnaW5QYXRoKCksdGhpcy5jdHgubW92ZVRvKHQsZSksRSh0aGlzLHosKGZ1bmN0aW9uKCl7dmFyIHQ7UChuLHopJiYoUChuLEcpJiYobi5pc0VtcHR5KCk/KG4uY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jdHguY2xlYXJSZWN0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpKTpDKG4sdHQsa3QpLmNhbGwobiksKHQ9bi5jdHgpLmxpbmVUby5hcHBseSh0LHUoUChuLEcpKSksRShuLEcsbnVsbCksbi5jdHguc3Ryb2tlKCkpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUChuLHopKSl9KSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShQKHRoaXMseikpfWZ1bmN0aW9uIHd0KHQsZSl7dmFyIHI9Yyh0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKSwyKSxuPXJbMF0saT1yWzFdO3Q9PT1uJiZlPT09aXx8KHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksRSh0aGlzLEcsW3QsZV0pKX1mdW5jdGlvbiBBdCh0LGUpe3ZhciByPXRoaXM7dGhpcy5jdHguY2xvc2VQYXRoKCksRSh0aGlzLHosbnVsbCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKSxlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTt2YXIgbixpPWModGhpcy5jdXJyZW50UGF0aC5hdCgtMSksMiksYT1pWzBdLHM9aVsxXTtpZih0PT09YSYmZT09PXN8fHRoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSksMSE9PXRoaXMuY3VycmVudFBhdGgubGVuZ3RoKW49KDAsby5maXRDdXJ2ZSkodGhpcy5jdXJyZW50UGF0aCwzMCxudWxsKTtlbHNle3ZhciBsPVt0LGVdO249W1tsLGwuc2xpY2UoKSxsLnNsaWNlKCksbF1dfXZhciB1PXgocHQscHQsT3QpLmNhbGwocHQsbik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MCx0aGlzLmFkZENvbW1hbmRzKHtjbWQ6ZnVuY3Rpb24oKXtyLnBhdGhzLnB1c2gobiksci5iZXppZXJQYXRoMkQucHVzaCh1KSxyLnJlYnVpbGQoKX0sdW5kbzpmdW5jdGlvbigpe3IucGF0aHMucG9wKCksci5iZXppZXJQYXRoMkQucG9wKCksMD09PXIucGF0aHMubGVuZ3RoP3IucmVtb3ZlKCk6KHIuY2FudmFzfHwoQyhyLHJ0LHh0KS5jYWxsKHIpLEMocixudCxFdCkuY2FsbChyKSksQyhyLGZ0LEx0KS5jYWxsKHIpKX0sbXVzdEV4ZWM6ITB9KX1mdW5jdGlvbiBrdCgpe2lmKHRoaXMuaXNFbXB0eSgpKUModGhpcyxvdCxDdCkuY2FsbCh0aGlzKTtlbHNle0ModGhpcyxKLGJ0KS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuY2FudmFzLGU9dGhpcy5jdHg7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyk7dmFyIHIsbj1sKHRoaXMuYmV6aWVyUGF0aDJEKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7ZS5zdHJva2UoaSl9fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfX19ZnVuY3Rpb24gU3QodCl7Qyh0aGlzLFosQXQpLmNhbGwodGhpcyx0Lm9mZnNldFgsdC5vZmZzZXRZKSx0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLFAodGhpcyxMKSksdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFAodGhpcyxqKSksdGhpcy5hZGRUb0Fubm90YXRpb25TdG9yYWdlKCl9ZnVuY3Rpb24geHQoKXt2YXIgdD10aGlzO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD0wLHRoaXMuY2FudmFzLmNsYXNzTmFtZT0iaW5rRWRpdG9yQ2FudmFzIixwdC5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsIikudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI7cmV0dXJuIG51bGw9PT0ocj10LmNhbnZhcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX0pKSx0aGlzLmRpdi5hcHBlbmQodGhpcy5jYW52YXMpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIil9ZnVuY3Rpb24gRXQoKXt2YXIgdD10aGlzLGU9bnVsbDtFKHRoaXMsQixuZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uY29udGVudFJlY3Q7bi53aWR0aCYmbi5oZWlnaHQmJihudWxsIT09ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZpeERpbXMoKSxlPW51bGx9KSxGKSx0LnNldERpbWVuc2lvbnMobi53aWR0aCxuLmhlaWdodCkpfSkpKSxQKHRoaXMsQikub2JzZXJ2ZSh0aGlzLmRpdil9ZnVuY3Rpb24gUHQoKXtpZihQKHRoaXMsVykpe3ZhciB0PWModGhpcy5wYXJlbnREaW1lbnNpb25zLDIpLGU9dFswXSxyPXRbMV07dGhpcy5jYW52YXMud2lkdGg9TWF0aC5jZWlsKHRoaXMud2lkdGgqZSksdGhpcy5jYW52YXMuaGVpZ2h0PU1hdGguY2VpbCh0aGlzLmhlaWdodCpyKSxDKHRoaXMsb3QsQ3QpLmNhbGwodGhpcyl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpLG49KHQtcikvUCh0aGlzLEkpLGk9KGUtcikvUCh0aGlzLFIpO3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4obixpKX1mdW5jdGlvbiBDdCgpe3ZhciB0PUModGhpcyxodCxqdCkuY2FsbCh0aGlzKS8yO3RoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLDAsMCx0aGlzLnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YKnRoaXMuc2NhbGVGYWN0b3IrdCx0aGlzLnRyYW5zbGF0aW9uWSp0aGlzLnNjYWxlRmFjdG9yK3QpfWZ1bmN0aW9uIE90KHQpe2Zvcih2YXIgZT1uZXcgUGF0aDJELHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe3ZhciBpPWModFtyXSw0KSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxsPWlbM107MD09PXImJmUubW92ZVRvLmFwcGx5KGUsdShhKSksZS5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBGdCh0LGUscixuKXt2YXIgaSxhLG8scz1bXSx1PXRoaXMudGhpY2tuZXNzLzIsaD1sKHRoaXMucGF0aHMpO3RyeXtmb3IoaC5zKCk7IShvPWgubigpKS5kb25lOyl7dmFyIGY9by52YWx1ZTtpPVtdLGE9W107Zm9yKHZhciBkPTAscD1mLmxlbmd0aDtkPHA7ZCsrKXt2YXIgdj1jKGZbZF0sNCkseT12WzBdLG09dlsxXSxnPXZbMl0sYj12WzNdLF89dCooeVswXStlKSt1LHc9bi10Kih5WzFdK3IpLXUsQT10KihtWzBdK2UpK3Usaz1uLXQqKG1bMV0rciktdSxTPXQqKGdbMF0rZSkrdSx4PW4tdCooZ1sxXStyKS11LEU9dCooYlswXStlKSt1LFA9bi10KihiWzFdK3IpLXU7MD09PWQmJihpLnB1c2goXyx3KSxhLnB1c2goXyx3KSksaS5wdXNoKEEsayxTLHgsRSxQKSxDKHRoaXMsbHQsTXQpLmNhbGwodGhpcyxfLHcsQSxrLFMseCxFLFAsNCxhKX1zLnB1c2goe2JlemllcjppLHBvaW50czphfSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfXJldHVybiBzfWZ1bmN0aW9uIE10KHQsZSxyLG4saSxhLG8scyxsLHUpe2lmKEModGhpcyx1dCxSdCkuY2FsbCh0aGlzLHQsZSxyLG4saSxhLG8scykpdS5wdXNoKG8scyk7ZWxzZXtmb3IodmFyIGM9MTtjPGwtMTtjKyspe3ZhciBoPWMvbCxmPTEtaCxkPWgqdCtmKnIscD1oKmUrZipuLHY9aCpyK2YqaSx5PWgqbitmKmE7ZD1oKihkPWgqZCtmKnYpK2YqKHY9aCp2K2YqKGgqaStmKm8pKSxwPWgqKHA9aCpwK2YqeSkrZiooeT1oKnkrZiooaCphK2YqcykpLHUucHVzaChkLHApfXUucHVzaChvLHMpfX1mdW5jdGlvbiBSdCh0LGUscixuLGksYSxvLHMpe3ZhciBsPU1hdGgucG93KDMqci0yKnQtbywyKSx1PU1hdGgucG93KDMqbi0yKmUtcywyKSxjPU1hdGgucG93KDMqaS10LTIqbywyKSxoPU1hdGgucG93KDMqYS1lLTIqcywyKTtyZXR1cm4gTWF0aC5tYXgobCxjKStNYXRoLm1heCh1LGgpPD0xMH1mdW5jdGlvbiBJdCgpe3ZhciB0LGU9MS8wLHI9LTEvMCxuPTEvMCxhPS0xLzAsbz1sKHRoaXMucGF0aHMpO3RyeXtmb3Ioby5zKCk7ISh0PW8ubigpKS5kb25lOyl7dmFyIHMsaD1sKHQudmFsdWUpO3RyeXtmb3IoaC5zKCk7IShzPWgubigpKS5kb25lOyl7dmFyIGY9YyhzLnZhbHVlLDQpLGQ9ZlswXSxwPWZbMV0sdj1mWzJdLHk9ZlszXSxtPWkuVXRpbC5iZXppZXJCb3VuZGluZ0JveC5hcHBseShpLlV0aWwsdShkKS5jb25jYXQodShwKSx1KHYpLHUoeSkpKTtlPU1hdGgubWluKGUsbVswXSksbj1NYXRoLm1pbihuLG1bMV0pLHI9TWF0aC5tYXgocixtWzJdKSxhPU1hdGgubWF4KGEsbVszXSl9fWNhdGNoKHQpe2guZSh0KX1maW5hbGx5e2guZigpfX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9cmV0dXJuW2UsbixyLGFdfWZ1bmN0aW9uIGp0KCl7cmV0dXJuIFAodGhpcyxVKT9NYXRoLmNlaWwodGhpcy50aGlja25lc3MqdGhpcy5wYXJlbnRTY2FsZSk6MH1mdW5jdGlvbiBMdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuaXNFbXB0eSgpKWlmKFAodGhpcyxVKSl7dmFyIGU9Qyh0aGlzLGN0LEl0KS5jYWxsKHRoaXMpLHI9Qyh0aGlzLGh0LGp0KS5jYWxsKHRoaXMpO0UodGhpcyxJLE1hdGgubWF4KE8sZVsyXS1lWzBdKSksRSh0aGlzLFIsTWF0aC5tYXgoTyxlWzNdLWVbMV0pKTt2YXIgbj1NYXRoLmNlaWwocitQKHRoaXMsSSkqdGhpcy5zY2FsZUZhY3RvciksaT1NYXRoLmNlaWwocitQKHRoaXMsUikqdGhpcy5zY2FsZUZhY3RvciksYT1jKHRoaXMucGFyZW50RGltZW5zaW9ucywyKSxvPWFbMF0scz1hWzFdO3RoaXMud2lkdGg9bi9vLHRoaXMuaGVpZ2h0PWkvcyxFKHRoaXMsTSxuL2kpLEModGhpcyxkdCxEdCkuY2FsbCh0aGlzKTt2YXIgbD10aGlzLnRyYW5zbGF0aW9uWCx1PXRoaXMudHJhbnNsYXRpb25ZO3RoaXMudHJhbnNsYXRpb25YPS1lWzBdLHRoaXMudHJhbnNsYXRpb25ZPS1lWzFdLEModGhpcyxpdCxQdCkuY2FsbCh0aGlzKSxDKHRoaXMsdHQsa3QpLmNhbGwodGhpcyksRSh0aGlzLHEsbiksRSh0aGlzLEgsaSksdGhpcy5zZXREaW1zKG4saSk7dmFyIGg9dD9yL3RoaXMuc2NhbGVGYWN0b3IvMjowO3RoaXMudHJhbnNsYXRlKGwtdGhpcy50cmFuc2xhdGlvblgtaCx1LXRoaXMudHJhbnNsYXRpb25ZLWgpfWVsc2UgQyh0aGlzLHR0LGt0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIER0KCl7dmFyIHQ9dGhpcy5kaXYuc3R5bGU7UCh0aGlzLE0pPj0xPyh0Lm1pbkhlaWdodD0iIi5jb25jYXQoTywicHgiKSx0Lm1pbldpZHRoPSIiLmNvbmNhdChNYXRoLnJvdW5kKFAodGhpcyxNKSpPKSwicHgiKSk6KHQubWluV2lkdGg9IiIuY29uY2F0KE8sInB4IiksdC5taW5IZWlnaHQ9IiIuY29uY2F0KE1hdGgucm91bmQoTy9QKHRoaXMsTSkpLCJweCIpKX1lLklua0VkaXRvcj1wdCx3KHB0LCJfZGVmYXVsdENvbG9yIixudWxsKSx3KHB0LCJfZGVmYXVsdE9wYWNpdHkiLDEpLHcocHQsIl9kZWZhdWx0VGhpY2tuZXNzIiwxKSx3KHB0LCJfbDEwblByb21pc2UiLHZvaWQgMCksdyhwdCwiX3R5cGUiLCJpbmsiKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmZpdEN1cnZlPXZvaWQgMDt2YXIgbj1yKDE1Nik7ZS5maXRDdXJ2ZT1ufSx0PT57ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZSh0KX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQscil7aWYoIm9iamVjdCIhPT1lKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZShpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PWUoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlJiZuKHQucHJvdG90eXBlLGUpLHImJm4odCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8byh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3ModCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIG8scyxoLGYsZCxwLHksbSxnLGIsXyx3LEE7aWYoMj09PXQubGVuZ3RoKXJldHVybiB3PXYudmVjdG9yTGVuKHYuc3VidHJhY3QodFswXSx0WzFdKSkvMyxbbz1bdFswXSx2LmFkZEFycmF5cyh0WzBdLHYubXVsSXRlbXMoZSx3KSksdi5hZGRBcnJheXModFsxXSx2Lm11bEl0ZW1zKHIsdykpLHRbMV1dXTtzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZT1hP3Irdi52ZWN0b3JMZW4odi5zdWJ0cmFjdCh0LG4pKTowLGkucHVzaChlKSxyPWUsbj10fSkpLGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L3J9KSl9KHQpO3ZhciBrPWEodSh0LHMscyxlLHIsaSksMyk7aWYobz1rWzBdLGY9a1sxXSxwPWtbMl0sMD09PWZ8fGY8bilyZXR1cm5bb107aWYoZjxuKm4pZm9yKGg9cyxkPWYseT1wLEE9MDtBPDIwO0ErKyl7dmFyIFM9YSh1KHQscyxoPWMobyx0LGgpLGUscixpKSwzKTtpZihvPVNbMF0sZj1TWzFdLHA9U1syXSxmPG4pcmV0dXJuW29dO2lmKHA9PT15KXt2YXIgeD1mL2Q7aWYoeD4uOTk5OSYmeDwxLjAwMDEpYnJlYWt9ZD1mLHk9cH1pZihfPVtdLChtPXYuc3VidHJhY3QodFtwLTFdLHRbcCsxXSkpLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR9KSkpe3ZhciBFPVstKG09di5zdWJ0cmFjdCh0W3AtMV0sdFtwXSkpWzFdLG1bMF1dO21bMF09RVswXSxtWzFdPUVbMV19cmV0dXJuIGc9di5ub3JtYWxpemUobSksYj12Lm11bEl0ZW1zKGcsLTEpLChfPV8uY29uY2F0KGwodC5zbGljZSgwLHArMSksZSxnLG4saSkpKS5jb25jYXQobCh0LnNsaWNlKHApLGIscixuLGkpKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxvKXt2YXIgcyxsLHU7cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sZyxiLF8sdyxBLGs9dFswXSxTPXRbdC5sZW5ndGgtMV07Zm9yKGk9W2ssbnVsbCxudWxsLFNdLGE9di56ZXJvc19YeDJ4MihlLmxlbmd0aCksZz0wLGI9ZS5sZW5ndGg7ZzxiO2crKylBPTEtKHc9ZVtnXSksKG89YVtnXSlbMF09di5tdWxJdGVtcyhyLDMqdyooQSpBKSksb1sxXT12Lm11bEl0ZW1zKG4sMypBKih3KncpKTtmb3Iocz1bWzAsMF0sWzAsMF1dLGw9WzAsMF0sZz0wLGI9dC5sZW5ndGg7ZzxiO2crKyl3PWVbZ10sbz1hW2ddLHNbMF1bMF0rPXYuZG90KG9bMF0sb1swXSksc1swXVsxXSs9di5kb3Qob1swXSxvWzFdKSxzWzFdWzBdKz12LmRvdChvWzBdLG9bMV0pLHNbMV1bMV0rPXYuZG90KG9bMV0sb1sxXSksXz12LnN1YnRyYWN0KHRbZ10seS5xKFtrLGssUyxTXSx3KSksbFswXSs9di5kb3Qob1swXSxfKSxsWzFdKz12LmRvdChvWzFdLF8pO3JldHVybiB1PXNbMF1bMF0qc1sxXVsxXS1zWzFdWzBdKnNbMF1bMV0sYz1zWzBdWzBdKmxbMV0tc1sxXVswXSpsWzBdLGg9bFswXSpzWzFdWzFdLWxbMV0qc1swXVsxXSxkPTA9PT11PzA6Yy91LChmPTA9PT11PzA6aC91KTwocD0xZS02KihtPXYudmVjdG9yTGVuKHYuc3VidHJhY3QoayxTKSkpKXx8ZDxwPyhpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLG0vMykpLGlbMl09di5hZGRBcnJheXMoUyx2Lm11bEl0ZW1zKG4sbS8zKSkpOihpWzFdPXYuYWRkQXJyYXlzKGssdi5tdWxJdGVtcyhyLGYpKSxpWzJdPXYuYWRkQXJyYXlzKFMsdi5tdWxJdGVtcyhuLGQpKSksaX0odCxyLG4saSk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCx1LGM7aT0wLGE9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKTt2YXIgaD1mKGUsMTApO2ZvcihzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXU9dFtzXSxjPWQoMCxyW3NdLGgsMTApLChuPShvPXYuc3VidHJhY3QoeS5xKGUsYyksdSkpWzBdKm9bMF0rb1sxXSpvWzFdKT5pJiYoaT1uLGE9cyk7cmV0dXJuW2ksYV19KHQscyxlKSxoPWEoYywyKTtyZXR1cm4gbD1oWzBdLHU9aFsxXSxvJiZvKHtiZXo6cyxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6bCxtYXhQb2ludDp1fSksW3MsbCx1XX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGgodCxlW25dLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXYuc3VidHJhY3QoeS5xKHQsciksZSksaT15LnFwcmltZSh0LHIpLGE9di5tdWxNYXRyaXgobixpKSxvPXYuc3VtKHYuc3F1YXJlSXRlbXMoaSkpKzIqdi5tdWxNYXRyaXgobix5LnFwcmltZXByaW1lKHQscikpO3JldHVybiAwPT09bz9yOnItYS9vfXZhciBmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49WzBdLGk9dFswXSxhPTAsbz0xO288PWU7bysrKXI9eS5xKHQsby9lKSxhKz12LnZlY3Rvckxlbih2LnN1YnRyYWN0KHIsaSkpLG4ucHVzaChhKSxpPXI7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9hfSkpfTtmdW5jdGlvbiBkKHQsZSxyLG4pe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBpLGEsbyxzLGw9MTtsPD1uO2wrKylpZihlPD1yW2xdKXtvPShsLTEpL24sYT1sL24scz0oZS0oaT1yW2wtMV0pKS8ocltsXS1pKSooYS1vKStvO2JyZWFrfXJldHVybiBzfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdi5ub3JtYWxpemUodi5zdWJ0cmFjdCh0LGUpKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OiJ6ZXJvc19YeDJ4MiIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QtLTspZS5wdXNoKFswLDBdKTtyZXR1cm4gZX19LHtrZXk6Im11bEl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pKX19LHtrZXk6Im11bE1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdCtyKmVbbl19KSwwKX19LHtrZXk6InN1YnRyYWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC1lW3JdfSkpfX0se2tleToiYWRkQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlW3JdfSkpfX0se2tleToiYWRkSXRlbXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpfX0se2tleToic3VtIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKX19LHtrZXk6ImRvdCIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5tdWxNYXRyaXgoZSxyKX19LHtrZXk6InZlY3RvckxlbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguaHlwb3QuYXBwbHkoTWF0aCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBzKHQpfShlPXQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KGUpfHxvKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKTt2YXIgZX19LHtrZXk6ImRpdkl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQvZX0pKX19LHtrZXk6InNxdWFyZUl0ZW1zIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KnR9KSl9fSx7a2V5OiJub3JtYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdkl0ZW1zKHQsdGhpcy52ZWN0b3JMZW4odCkpfX1dKSx0fSgpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleToicSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHRbMF0scipyKnIpLGk9di5tdWxJdGVtcyh0WzFdLDMqcipyKmUpLGE9di5tdWxJdGVtcyh0WzJdLDMqciplKmUpLG89di5tdWxJdGVtcyh0WzNdLGUqZSplKTtyZXR1cm4gdi5hZGRBcnJheXModi5hZGRBcnJheXMobixpKSx2LmFkZEFycmF5cyhhLG8pKX19LHtrZXk6InFwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj0xLWUsbj12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsxXSx0WzBdKSwzKnIqciksaT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFsyXSx0WzFdKSw2KnIqZSksYT12Lm11bEl0ZW1zKHYuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIHYuYWRkQXJyYXlzKHYuYWRkQXJyYXlzKG4saSksYSl9fSx7a2V5OiJxcHJpbWVwcmltZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hZGRBcnJheXModi5tdWxJdGVtcyh2LmFkZEFycmF5cyh2LnN1YnRyYWN0KHRbMl0sdi5tdWxJdGVtcyh0WzFdLDIpKSx0WzBdKSw2KigxLWUpKSx2Lm11bEl0ZW1zKHYuYWRkQXJyYXlzKHYuc3VidHJhY3QodFszXSx2Lm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX1dKSx0fSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7aWYodC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKXx8ZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl8fGUubGVuZ3RoIT09dFswXS5sZW5ndGgpdGhyb3cgRXJyb3IoIkVhY2ggcG9pbnQgc2hvdWxkIGJlIGFuIGFycmF5IG9mIG51bWJlcnMuIEVhY2ggcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYW1vdW50IG9mIG51bWJlcnMuIil9KSksKHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIDA9PT1yfHwhZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbci0xXVtuXX0pKX0pKSkubGVuZ3RoPDIpcmV0dXJuW107dmFyIG49dC5sZW5ndGgsaT1wKHRbMV0sdFswXSksYT1wKHRbbi0yXSx0W24tMV0pO3JldHVybiBsKHQsaSxhLGUscil9LHQuZXhwb3J0cy5maXRDdWJpYz1sLHQuZXhwb3J0cy5jcmVhdGVUYW5nZW50PXB9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5Bbm5vdGF0aW9uTGF5ZXI9dm9pZCAwO3ZhciBuPXIoMSksaT1yKDEzNyksYT1yKDEzNCksbz1yKDE1OCkscz1yKDE1OSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBzdGF0aWMgYWNjZXNzIG9mIHdyb25nIHByb3ZlbmFuY2UiKX0odCxlKSxyfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdT0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmbnVsbCE9PSh0PXYodCkpOyk7cmV0dXJuIHR9KHQsZSk7aWYobil7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpO3JldHVybiBpLmdldD9pLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz90OnIpOmkudmFsdWV9fSx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBjKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB3KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Xyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGUmJmYodCxlKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX3Byb3RvX189ZSx0fSxmKHQsZSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj12KHQpO2lmKGUpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxpKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoZSYmKCJvYmplY3QiPT09QShlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gcCh0KX0odGhpcyxyKX19ZnVuY3Rpb24gcCh0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0sdih0KX1mdW5jdGlvbiB5KHQsZSl7IWZ1bmN0aW9uKHQsZSl7aWYoZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0odCxlKSxlLmFkZCh0KX1mdW5jdGlvbiBtKHQsZSxyKXtpZighZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPV8odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8Xyh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gXyh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3codCxlKTp2b2lkIDB9fWZ1bmN0aW9uIHcodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe3JldHVybiBBPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxBKHQpfWZ1bmN0aW9uIGsodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBTKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxFKG4ua2V5KSxuKX19ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIGUmJlModC5wcm90b3R5cGUsZSksciYmUyh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gRSh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09QSh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PUEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfSh0KTtyZXR1cm4ic3ltYm9sIj09PUEoZSk/ZTpTdHJpbmcoZSl9dmFyIFA9MWUzLFQ9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gQyh0KXtyZXR1cm57d2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19fXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2sodGhpcyx0KX1yZXR1cm4geCh0LG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBJKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5URVhUOnJldHVybiBuZXcgVyh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuV0lER0VUOnN3aXRjaCh0LmRhdGEuZmllbGRUeXBlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IEIodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IEgodCk6dC5kYXRhLmNoZWNrQm94P25ldyBxKHQpOm5ldyB6KHQpO2Nhc2UiQ2giOnJldHVybiBuZXcgVih0KX1yZXR1cm4gbmV3IEcodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlBPUFVQOnJldHVybiBuZXcgWCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6cmV0dXJuIG5ldyBLKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgSih0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgUSh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgJCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBaKHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpyZXR1cm4gbmV3IGV0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBydCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpyZXR1cm4gbmV3IHR0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6cmV0dXJuIG5ldyBudCh0KTtjYXNlIG4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgaXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOnJldHVybiBuZXcgYXQodCk7Y2FzZSBuLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpyZXR1cm4gbmV3IG90KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IHN0KHQpO2Nhc2Ugbi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IGx0KHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyBGKHQpfX19XSksdH0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLmlzUmVuZGVyYWJsZSxpPXZvaWQgMCE9PW4mJm4sYT1yLmlnbm9yZUJvcmRlcixvPXZvaWQgMCE9PWEmJmEscz1yLmNyZWF0ZVF1YWRyaWxhdGVyYWxzLGw9dm9pZCAwIT09cyYmcztrKHRoaXMsdCksdGhpcy5pc1JlbmRlcmFibGU9aSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMubGF5ZXI9ZS5sYXllcix0aGlzLnBhZ2U9ZS5wYWdlLHRoaXMudmlld3BvcnQ9ZS52aWV3cG9ydCx0aGlzLmxpbmtTZXJ2aWNlPWUubGlua1NlcnZpY2UsdGhpcy5kb3dubG9hZE1hbmFnZXI9ZS5kb3dubG9hZE1hbmFnZXIsdGhpcy5pbWFnZVJlc291cmNlc1BhdGg9ZS5pbWFnZVJlc291cmNlc1BhdGgsdGhpcy5yZW5kZXJGb3Jtcz1lLnJlbmRlckZvcm1zLHRoaXMuc3ZnRmFjdG9yeT1lLnN2Z0ZhY3RvcnksdGhpcy5hbm5vdGF0aW9uU3RvcmFnZT1lLmFubm90YXRpb25TdG9yYWdlLHRoaXMuZW5hYmxlU2NyaXB0aW5nPWUuZW5hYmxlU2NyaXB0aW5nLHRoaXMuaGFzSlNBY3Rpb25zPWUuaGFzSlNBY3Rpb25zLHRoaXMuX2ZpZWxkT2JqZWN0cz1lLmZpZWxkT2JqZWN0cyxpJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG8pKSxsJiYodGhpcy5xdWFkcmlsYXRlcmFscz10aGlzLl9jcmVhdGVRdWFkcmlsYXRlcmFscyhvKSl9cmV0dXJuIHgodCxbe2tleToiX2NyZWF0ZUNvbnRhaW5lciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGU9dGhpcy5kYXRhLHI9dGhpcy5wYWdlLGk9dGhpcy52aWV3cG9ydCxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIixlLmlkKTt2YXIgbz1pLnJhd0RpbXMscz1vLnBhZ2VXaWR0aCxsPW8ucGFnZUhlaWdodCx1PW8ucGFnZVgsYz1vLnBhZ2VZLGg9QyhlLnJlY3QpLGY9aC53aWR0aCxkPWguaGVpZ2h0LHA9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoW2UucmVjdFswXSxyLnZpZXdbM10tZS5yZWN0WzFdK3Iudmlld1sxXSxlLnJlY3RbMl0sci52aWV3WzNdLWUucmVjdFszXStyLnZpZXdbMV1dKTtpZighdCYmZS5ib3JkZXJTdHlsZS53aWR0aD4wKXthLnN0eWxlLmJvcmRlcldpZHRoPSIiLmNvbmNhdChlLmJvcmRlclN0eWxlLndpZHRoLCJweCIpO3ZhciB2PWUuYm9yZGVyU3R5bGUuaG9yaXpvbnRhbENvcm5lclJhZGl1cyx5PWUuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7aWYodj4wfHx5PjApe3ZhciBtPSJjYWxjKCIuY29uY2F0KHYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkgLyBjYWxjKCIpLmNvbmNhdCh5LCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIik7YS5zdHlsZS5ib3JkZXJSYWRpdXM9bX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBIKXt2YXIgZz0iY2FsYygiLmNvbmNhdChmLCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygiKS5jb25jYXQoZCwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpO2Euc3R5bGUuYm9yZGVyUmFkaXVzPWd9c3dpdGNoKGUuYm9yZGVyU3R5bGUuc3R5bGUpe2Nhc2Ugbi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOmEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6YS5zdHlsZS5ib3JkZXJTdHlsZT0iZGFzaGVkIjticmVhaztjYXNlIG4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEOigwLG4ud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkIik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ6KDAsbi53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOmEuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGU9InNvbGlkIn12YXIgYj1lLmJvcmRlckNvbG9yfHxudWxsO2I/YS5zdHlsZS5ib3JkZXJDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8YlswXSwwfGJbMV0sMHxiWzJdKTphLnN0eWxlLmJvcmRlcldpZHRoPTB9YS5zdHlsZS5sZWZ0PSIiLmNvbmNhdCgxMDAqKHBbMF0tdSkvcywiJSIpLGEuc3R5bGUudG9wPSIiLmNvbmNhdCgxMDAqKHBbMV0tYykvbCwiJSIpO3ZhciBfPWUucm90YXRpb247cmV0dXJuIGUuaGFzT3duQ2FudmFzfHwwPT09Xz8oYS5zdHlsZS53aWR0aD0iIi5jb25jYXQoMTAwKmYvcywiJSIpLGEuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdCgxMDAqZC9sLCIlIikpOnRoaXMuc2V0Um90YXRpb24oXyxhKSxhfX0se2tleToic2V0Um90YXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jb250YWluZXIsaT10aGlzLnZpZXdwb3J0LnJhd0RpbXMsYT1pLnBhZ2VXaWR0aCxvPWkucGFnZUhlaWdodCxzPUModGhpcy5kYXRhLnJlY3QpLGw9cy53aWR0aCx1PXMuaGVpZ2h0O3QlMTgwPT0wPyhlPTEwMCpsL2Escj0xMDAqdS9vKTooZT0xMDAqdS9hLHI9MTAwKmwvbyksbi5zdHlsZS53aWR0aD0iIi5jb25jYXQoZSwiJSIpLG4uc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChyLCIlIiksbi5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfX0se2tleToiX2NvbW1vbkFjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5kZXRhaWxbdF07ci50YXJnZXQuc3R5bGVbZV09by5Db2xvckNvbnZlcnRlcnNbIiIuY29uY2F0KG5bMF0sIl9IVE1MIildKG4uc2xpY2UoMSkpfTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2NvbW1vbkFjdGlvbnMiLHtkaXNwbGF5OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLmRpc3BsYXklMj09MTt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXI/ImhpZGRlbiI6InZpc2libGUiLHQuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodC5kYXRhLmlkLHtoaWRkZW46cixwcmludDowPT09ZS5kZXRhaWwuZGlzcGxheXx8Mz09PWUuZGV0YWlsLmRpc3BsYXl9KX0scHJpbnQ6ZnVuY3Rpb24oZSl7dC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3ByaW50OmUuZGV0YWlsLnByaW50fSl9LGhpZGRlbjpmdW5jdGlvbihlKXt0LmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PWUuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIsdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse2hpZGRlbjplLmRldGFpbC5oaWRkZW59KX0sZm9jdXM6ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC50YXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITF9KX0pLDApfSx1c2VyTmFtZTpmdW5jdGlvbih0KXt0LnRhcmdldC50aXRsZT10LmRldGFpbC51c2VyTmFtZX0scmVhZG9ubHk6ZnVuY3Rpb24odCl7dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6ZnVuY3Rpb24oZSl7dC5fc2V0UmVxdWlyZWQoZS50YXJnZXQsZS5kZXRhaWwucmVxdWlyZWQpfSxiZ0NvbG9yOmZ1bmN0aW9uKHQpe2UoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6ZnVuY3Rpb24odCl7ZSgiZmlsbENvbG9yIiwiYmFja2dyb3VuZENvbG9yIix0KX0sZmdDb2xvcjpmdW5jdGlvbih0KXtlKCJmZ0NvbG9yIiwiY29sb3IiLHQpfSx0ZXh0Q29sb3I6ZnVuY3Rpb24odCl7ZSgidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjpmdW5jdGlvbih0KXtlKCJib3JkZXJDb2xvciIsImJvcmRlckNvbG9yIix0KX0sc3Ryb2tlQ29sb3I6ZnVuY3Rpb24odCl7ZSgic3Ryb2tlQ29sb3IiLCJib3JkZXJDb2xvciIsdCl9LHJvdGF0aW9uOmZ1bmN0aW9uKGUpe3ZhciByPWUuZGV0YWlsLnJvdGF0aW9uO3Quc2V0Um90YXRpb24ociksdC5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmRhdGEuaWQse3JvdGF0aW9uOnJ9KX19KX19LHtrZXk6Il9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbW1vbkFjdGlvbnMsbj0wLGk9T2JqZWN0LmtleXMoZS5kZXRhaWwpO248aS5sZW5ndGg7bisrKXt2YXIgYT1pW25dLG89dFthXXx8clthXTtudWxsPT1vfHxvKGUpfX19LHtrZXk6Il9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5lbmFibGVTY3JpcHRpbmcpe3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZihlKWZvcih2YXIgcj10aGlzLl9jb21tb25BY3Rpb25zLG49MCxpPU9iamVjdC5lbnRyaWVzKGUpO248aS5sZW5ndGg7bisrKXt2YXIgYT1iKGlbbl0sMiksbz1hWzBdLHM9YVsxXSxsPXJbb107bCYmKGwoe2RldGFpbDp7W29dOnN9LHRhcmdldDp0fSksZGVsZXRlIGVbb10pfX19fSx7a2V5OiJfY3JlYXRlUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5kYXRhLnF1YWRQb2ludHMpcmV0dXJuIG51bGw7dmFyIGUscj1bXSxuPXRoaXMuZGF0YS5yZWN0LGk9Zyh0aGlzLmRhdGEucXVhZFBvaW50cyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgYT1lLnZhbHVlO3RoaXMuZGF0YS5yZWN0PVthWzJdLngsYVsyXS55LGFbMV0ueCxhWzFdLnldLHIucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdGhpcy5kYXRhLnJlY3Q9bixyfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY29udGFpbmVyO3RoaXMucXVhZHJpbGF0ZXJhbHMmJih0PXR8fHRoaXMucXVhZHJpbGF0ZXJhbHMscj10aGlzLnF1YWRyaWxhdGVyYWxzWzBdKSx0fHwoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSIsci5hcHBlbmQodCkpO3ZhciBuPW5ldyBZKHtjb250YWluZXI6cix0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO24uc3R5bGUubGVmdD0iMTAwJSIsci5hcHBlbmQobil9fSx7a2V5OiJfcmVuZGVyUXVhZHJpbGF0ZXJhbHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLHI9Zyh0aGlzLnF1YWRyaWxhdGVyYWxzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5jbGFzc05hbWU9dH1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc319LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfX0se2tleToiX2dldEVsZW1lbnRzQnlOYW1lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPVtdO2lmKHRoaXMuX2ZpZWxkT2JqZWN0cyl7dmFyIGk9dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKGkpe3ZhciBhLG89ZyhpKTt0cnl7Zm9yKG8ucygpOyEoYT1vLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsbD1zLnBhZ2UsdT1zLmlkLGM9cy5leHBvcnRWYWx1ZXM7aWYoLTEhPT1sJiZ1IT09ZSl7dmFyIGg9InN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbCxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KHUsJyJdJykpOyFmfHxULmhhcyhmKT9yLnB1c2goe2lkOnUsZXhwb3J0VmFsdWU6aCxkb21FbGVtZW50OmZ9KTooMCxuLndhcm4pKCJfZ2V0RWxlbWVudHNCeU5hbWUgLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdCh1KSl9fX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX19cmV0dXJuIHJ9dmFyIGQscD1nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LmV4cG9ydFZhbHVlLG09di5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO20hPT1lJiZULmhhcyh2KSYmci5wdXNoKHtpZDptLGV4cG9ydFZhbHVlOnksZG9tRWxlbWVudDp2fSl9fWNhdGNoKHQpe3AuZSh0KX1maW5hbGx5e3AuZigpfXJldHVybiByfX1dKSx0fSgpLE09bmV3IFdlYWtTZXQsUj1uZXcgV2Vha1NldCxJPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4gayh0aGlzLHIpLHkocChuPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6IShudWxsPT1pfHwhaS5pZ25vcmVCb3JkZXIpLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSkpLFIpLHkocChuKSxNKSxuLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHksbn1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dGhpcy5saW5rU2VydmljZSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIix0LmlkKTt2YXIgbj0hMTtyZXR1cm4gdC51cmw/KGUuYWRkTGlua0F0dHJpYnV0ZXMocix0LnVybCx0Lm5ld1dpbmRvdyksbj0hMCk6dC5hY3Rpb24/KHRoaXMuX2JpbmROYW1lZEFjdGlvbihyLHQuYWN0aW9uKSxuPSEwKTp0LmF0dGFjaG1lbnQ/KHRoaXMuX2JpbmRBdHRhY2htZW50KHIsdC5hdHRhY2htZW50KSxuPSEwKTp0LnNldE9DR1N0YXRlPyhtKHRoaXMsUixMKS5jYWxsKHRoaXMscix0LnNldE9DR1N0YXRlKSxuPSEwKTp0LmRlc3Q/KHRoaXMuX2JpbmRMaW5rKHIsdC5kZXN0KSxuPSEwKToodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKHRoaXMuX2JpbmRKU0FjdGlvbihyLHQpLG49ITApLHQucmVzZXRGb3JtPyh0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKHIsdC5yZXNldEZvcm0pLG49ITApOnRoaXMuaXNUb29sdGlwT25seSYmIW4mJih0aGlzLl9iaW5kTGluayhyLCIiKSxuPSEwKSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygibGlua0Fubm90YXRpb24iKS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49MD09PWU/cjpyLmNsb25lTm9kZSgpO3JldHVybiB0LmFwcGVuZChuKSx0fSkpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmtBbm5vdGF0aW9uIixuJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXIpfX0se2tleToiX2JpbmRMaW5rIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiBlJiZyLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihlKSwhMX0sKGV8fCIiPT09ZSkmJm0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZE5hbWVkQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEF0dGFjaG1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5kb3dubG9hZE1hbmFnZXIpfHx2b2lkIDA9PT10fHx0Lm9wZW5PckRvd25sb2FkRGF0YShyLmNvbnRhaW5lcixlLmNvbnRlbnQsZS5maWxlbmFtZSksITF9LG0odGhpcyxNLGopLmNhbGwodGhpcyl9fSx7a2V5OiJfYmluZEpTQWN0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTtmb3IodmFyIG49bmV3IE1hcChbWyJBY3Rpb24iLCJvbmNsaWNrIl0sWyJNb3VzZSBVcCIsIm9ubW91c2V1cCJdLFsiTW91c2UgRG93biIsIm9ubW91c2Vkb3duIl1dKSxpPWZ1bmN0aW9uKCl7dmFyIGk9b1thXSxzPW4uZ2V0KGkpO2lmKCFzKXJldHVybiJjb250aW51ZSI7dFtzXT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBudWxsPT09KHQ9ci5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PXR8fHQuZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6cixkZXRhaWw6e2lkOmUuaWQsbmFtZTppfX0pLCExfX0sYT0wLG89T2JqZWN0LmtleXMoZS5hY3Rpb25zKTthPG8ubGVuZ3RoO2ErKylpKCk7dC5vbmNsaWNrfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxtKHRoaXMsTSxqKS5jYWxsKHRoaXMpfX0se2tleToiX2JpbmRSZXNldEZvcm1BY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXQub25jbGljaztpZihpfHwodC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKSksbSh0aGlzLE0saikuY2FsbCh0aGlzKSwhdGhpcy5fZmllbGRPYmplY3RzKXJldHVybigwLG4ud2FybikoJ19iaW5kUmVzZXRGb3JtQWN0aW9uIC0gInJlc2V0Rm9ybSIgYWN0aW9uIG5vdCBzdXBwb3J0ZWQsIGVuc3VyZSB0aGF0IHRoZSBgZmllbGRPYmplY3RzYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuJyksdm9pZChpfHwodC5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7dC5vbmNsaWNrPWZ1bmN0aW9uKCl7bnVsbD09aXx8aSgpO3ZhciB0PWUuZmllbGRzLGE9ZS5yZWZzLG89ZS5pbmNsdWRlLHM9W107aWYoMCE9PXQubGVuZ3RofHwwIT09YS5sZW5ndGgpe3ZhciBsLHU9bmV3IFNldChhKSxoPWcodCk7dHJ5e2ZvcihoLnMoKTshKGw9aC5uKCkpLmRvbmU7KXt2YXIgZixkPWwudmFsdWUscD1nKHIuX2ZpZWxkT2JqZWN0c1tkXXx8W10pO3RyeXtmb3IocC5zKCk7IShmPXAubigpKS5kb25lOyl7dmFyIHY9Zi52YWx1ZS5pZDt1LmFkZCh2KX19Y2F0Y2godCl7cC5lKHQpfWZpbmFsbHl7cC5mKCl9fX1jYXRjaCh0KXtoLmUodCl9ZmluYWxseXtoLmYoKX1mb3IodmFyIHk9MCxtPU9iamVjdC52YWx1ZXMoci5fZmllbGRPYmplY3RzKTt5PG0ubGVuZ3RoO3krKyl7dmFyIGIsXz1nKG1beV0pO3RyeXtmb3IoXy5zKCk7IShiPV8ubigpKS5kb25lOyl7dmFyIHc9Yi52YWx1ZTt1Lmhhcyh3LmlkKT09PW8mJnMucHVzaCh3KX19Y2F0Y2godCl7Xy5lKHQpfWZpbmFsbHl7Xy5mKCl9fX1lbHNlIGZvcih2YXIgQT0wLGs9T2JqZWN0LnZhbHVlcyhyLl9maWVsZE9iamVjdHMpO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1rW0FdO3MucHVzaC5hcHBseShzLGMoUykpfWZvcih2YXIgeCxFPXIuYW5ub3RhdGlvblN0b3JhZ2UsUD1bXSxDPTAsTz1zO0M8Ty5sZW5ndGg7QysrKXt2YXIgRj1PW0NdLE09Ri5pZDtzd2l0Y2goUC5wdXNoKE0pLEYudHlwZSl7Y2FzZSJ0ZXh0Ijp2YXIgUj1GLmRlZmF1bHRWYWx1ZXx8IiI7RS5zZXRWYWx1ZShNLHt2YWx1ZTpSfSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpb2J1dHRvbiI6dmFyIEk9Ri5kZWZhdWx0VmFsdWU9PT1GLmV4cG9ydFZhbHVlcztFLnNldFZhbHVlKE0se3ZhbHVlOkl9KTticmVhaztjYXNlImNvbWJvYm94IjpjYXNlImxpc3Rib3giOnZhciBqPUYuZGVmYXVsdFZhbHVlfHwiIjtFLnNldFZhbHVlKE0se3ZhbHVlOmp9KTticmVhaztkZWZhdWx0OmNvbnRpbnVlfXZhciBMPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVsZW1lbnQtaWQ9IicuY29uY2F0KE0sJyJdJykpO0wmJihULmhhcyhMKT9MLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsbi53YXJuKSgiX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAiLmNvbmNhdChNKSkpfXJldHVybiByLmVuYWJsZVNjcmlwdGluZyYmKG51bGw9PT0oeD1yLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09eHx8eC5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTpyLGRldGFpbDp7aWQ6ImFwcCIsaWRzOlAsbmFtZToiUmVzZXRGb3JtIn19KSksITF9fX1dKSxyfShGKTtmdW5jdGlvbiBqKCl7dGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWludGVybmFsLWxpbmsiLCIiKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dGhpczt0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpLHQub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKSwhMX0sbSh0aGlzLE0saikuY2FsbCh0aGlzKX12YXIgRCxOLFUsVz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm99KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIHQuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsdC5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsdC5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLHQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksRz1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGsodGhpcyxyKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9nZXRLZXlNb2RpZmllciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bi5GZWF0dXJlVGVzdC5wbGF0Zm9ybSxyPWUuaXNXaW4saT1lLmlzTWFjO3JldHVybiByJiZ0LmN0cmxLZXl8fGkmJnQubWV0YUtleX19LHtrZXk6Il9zZXRFdmVudExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6aS5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1pLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09ZXx8ZS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTppLGRldGFpbDp7aWQ6aS5kYXRhLmlkLG5hbWU6cix2YWx1ZTpuKHQpfX0pfSkpfX0se2tleToiX3NldEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saT1nKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIGEsbz1iKG4udmFsdWUsMikscz1vWzBdLGw9b1sxXTsoIkFjdGlvbiI9PT1sfHxudWxsIT09KGE9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT1hJiZhW2xdKSYmdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcih0LHMsbCxyKX19Y2F0Y2godCl7aS5lKHQpfWZpbmFsbHl7aS5mKCl9fX0se2tleToiX3NldEJhY2tncm91bmRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcnx8bnVsbDt0LnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsPT09ZT8idHJhbnNwYXJlbnQiOm4uVXRpbC5tYWtlSGV4Q29sb3IoZVswXSxlWzFdLGVbMl0pfX0se2tleToiX3NldFRleHRTdHlsZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRDb2xvcixpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fDksYT10LnN0eWxlLG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMTAqdCkvMTB9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3ZhciBzPU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGw9cy8oTWF0aC5yb3VuZChzLyhuLkxJTkVfRkFDVE9SKmkpKXx8MSk7ZT1NYXRoLm1pbihpLG8obC9uLkxJTkVfRkFDVE9SKSl9ZWxzZXt2YXIgdT1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTtlPU1hdGgubWluKGksbyh1L24uTElORV9GQUNUT1IpKX1hLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KGUsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKSxhLmNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IoclswXSxyWzFdLHJbMl0pLG51bGwhPT10aGlzLmRhdGEudGV4dEFsaWdubWVudCYmKGEudGV4dEFsaWduPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il1bdGhpcy5kYXRhLnRleHRBbGlnbm1lbnRdKX19LHtrZXk6Il9zZXRSZXF1aXJlZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtlP3Quc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsITApOnQucmVtb3ZlQXR0cmlidXRlKCJyZXF1aXJlZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIixlKX19XSkscn0oRiksQj1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe2sodGhpcyxyKTt2YXIgbj10LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpufSl9cmV0dXJuIHgocixbe2tleToic2V0UHJvcGVydHlPblNpYmxpbmdzIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Usbz1nKHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlO3MuZG9tRWxlbWVudCYmKHMuZG9tRWxlbWVudFtlXT1yKSxhLnNldFZhbHVlKHMuaWQse1tuXTpyfSl9fWNhdGNoKHQpe28uZSh0KX1maW5hbGx5e28uZigpfX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZDt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InRleHRXaWRnZXRBbm5vdGF0aW9uIjt2YXIgbj1udWxsO2lmKHRoaXMucmVuZGVyRm9ybXMpe3ZhciBpPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxhPWkuZm9ybWF0dGVkVmFsdWV8fGkudmFsdWV8fCIiLG89ZS5nZXRWYWx1ZShyLHtjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbn0pLmNoYXJMaW1pdDtvJiZhLmxlbmd0aD5vJiYoYT1hLnNsaWNlKDAsbykpO3ZhciBzPXt1c2VyVmFsdWU6YSxmb3JtYXR0ZWRWYWx1ZTpudWxsLGxhc3RDb21taXR0ZWRWYWx1ZTpudWxsLGNvbW1pdEtleToxfTt0aGlzLmRhdGEubXVsdGlMaW5lPygobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpKS50ZXh0Q29udGVudD1hLHRoaXMuZGF0YS5kb05vdFNjcm9sbCYmKG4uc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSk6KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9InRleHQiLG4uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYSksdGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYobi5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIpKSxULmFkZChuKSxuLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixyKSxuLmRpc2FibGVkPXRoaXMuZGF0YS5yZWFkT25seSxuLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxuLnRhYkluZGV4PVAsdGhpcy5fc2V0UmVxdWlyZWQobix0aGlzLmRhdGEucmVxdWlyZWQpLG8mJihuLm1heExlbmd0aD1vKSxuLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24oaSl7ZS5zZXRWYWx1ZShyLHt2YWx1ZTppLnRhcmdldC52YWx1ZX0pLHQuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sInZhbHVlIixpLnRhcmdldC52YWx1ZSwidmFsdWUiKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLGk9bnVsbCE9PShyPXQuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSkmJnZvaWQgMCE9PXI/cjoiIjtuLnZhbHVlPXMudXNlclZhbHVlPWkscy5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXMuZm9ybWF0dGVkVmFsdWU7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpLHQudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXt2YXIgdTtuLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7cy51c2VyVmFsdWUmJihlLnZhbHVlPXMudXNlclZhbHVlKSxzLmxhc3RDb21taXR0ZWRWYWx1ZT1lLnZhbHVlLHMuY29tbWl0S2V5PTF9KSksbi5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBpPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtzLnVzZXJWYWx1ZT1udWxsIT09KG49dC5kZXRhaWwudmFsdWUpJiZ2b2lkIDAhPT1uP246IiIsZS5zZXRWYWx1ZShyLHt2YWx1ZTpzLnVzZXJWYWx1ZS50b1N0cmluZygpfSksdC50YXJnZXQudmFsdWU9cy51c2VyVmFsdWV9LGZvcm1hdHRlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGV0YWlsLmZvcm1hdHRlZFZhbHVlO3MuZm9ybWF0dGVkVmFsdWU9bixudWxsIT1uJiZ0LnRhcmdldCE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJih0LnRhcmdldC52YWx1ZT1uKSxlLnNldFZhbHVlKHIse2Zvcm1hdHRlZFZhbHVlOm59KX0sc2VsUmFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU7KGU9dC50YXJnZXQpLnNldFNlbGVjdGlvblJhbmdlLmFwcGx5KGUsYyh0LmRldGFpbC5zZWxSYW5nZSkpfSxjaGFyTGltaXQ6ZnVuY3Rpb24obil7dmFyIGksYT1uLmRldGFpbC5jaGFyTGltaXQsbz1uLnRhcmdldDtpZigwIT09YSl7by5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsYSk7dmFyIGw9cy51c2VyVmFsdWU7IWx8fGwubGVuZ3RoPD1hfHwobD1sLnNsaWNlKDAsYSksby52YWx1ZT1zLnVzZXJWYWx1ZT1sLGUuc2V0VmFsdWUocix7dmFsdWU6bH0pLG51bGw9PT0oaT10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09aXx8aS5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmwsd2lsbENvbW1pdDohMCxjb21taXRLZXk6MSxzZWxTdGFydDpvLnNlbGVjdGlvblN0YXJ0LHNlbEVuZDpvLnNlbGVjdGlvbkVuZH19KSl9ZWxzZSBvLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIil9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSxuKX0pKSxuLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihlKXt2YXIgbjtzLmNvbW1pdEtleT0xO3ZhciBpPS0xO2lmKCJFc2NhcGUiPT09ZS5rZXk/aT0wOiJFbnRlciIhPT1lLmtleXx8dC5kYXRhLm11bHRpTGluZT8iVGFiIj09PWUua2V5JiYocy5jb21taXRLZXk9Myk6aT0yLC0xIT09aSl7dmFyIGE9ZS50YXJnZXQudmFsdWU7cy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1hJiYocy5sYXN0Q29tbWl0dGVkVmFsdWU9YSxzLnVzZXJWYWx1ZT1hLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOmEsd2lsbENvbW1pdDohMCxjb21taXRLZXk6aSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKX19KSk7dmFyIGg9bDtsPW51bGwsbi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoZnVuY3Rpb24oZSl7aWYoZS5yZWxhdGVkVGFyZ2V0KXt2YXIgbixpPWUudGFyZ2V0LnZhbHVlO3MudXNlclZhbHVlPWkscy5sYXN0Q29tbWl0dGVkVmFsdWUhPT1pJiYobnVsbD09PShuPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1ufHxuLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6aSx3aWxsQ29tbWl0OiEwLGNvbW1pdEtleTpzLmNvbW1pdEtleSxzZWxTdGFydDplLnRhcmdldC5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6ZS50YXJnZXQuc2VsZWN0aW9uRW5kfX0pKSxoKGUpfX0pKSxudWxsIT09KHU9dGhpcy5kYXRhLmFjdGlvbnMpJiZ2b2lkIDAhPT11JiZ1LktleXN0cm9rZSYmbi5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsKGZ1bmN0aW9uKGUpe3ZhciBuO3MubGFzdENvbW1pdHRlZFZhbHVlPW51bGw7dmFyIGk9ZS5kYXRhLGE9ZS50YXJnZXQsbz1hLnZhbHVlLGw9YS5zZWxlY3Rpb25TdGFydCx1PWEuc2VsZWN0aW9uRW5kLGM9bCxoPXU7c3dpdGNoKGUuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6dmFyIGY9by5zdWJzdHJpbmcoMCxsKS5tYXRjaCgvXHcqW15cd10qJC8pO2YmJihjLT1mWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6dmFyIGQ9by5zdWJzdHJpbmcobCkubWF0Y2goL15bXlx3XSpcdyovKTtkJiYoaCs9ZFswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpsPT09dSYmKGMtPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmw9PT11JiYoaCs9MSl9ZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PT0obj10LmxpbmtTZXJ2aWNlLmV2ZW50QnVzKXx8dm9pZCAwPT09bnx8bi5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0LGRldGFpbDp7aWQ6cixuYW1lOiJLZXlzdHJva2UiLHZhbHVlOm8sY2hhbmdlOml8fCIiLHdpbGxDb21taXQ6ITEsc2VsU3RhcnQ6YyxzZWxFbmQ6aH19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhuLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC52YWx1ZX0pKX1pZihsJiZuLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGwpLHRoaXMuZGF0YS5jb21iKXt2YXIgZj0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL287bi5jbGFzc0xpc3QuYWRkKCJjb21iIiksbi5zdHlsZS5sZXR0ZXJTcGFjaW5nPSJjYWxjKCIuY29uY2F0KGYsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSAtIDFjaCkiKX19ZWxzZShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS50ZXh0Q29udGVudD10aGlzLmRhdGEuZmllbGRWYWx1ZSxuLnN0eWxlLnZlcnRpY2FsQWxpZ249Im1pZGRsZSIsbi5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIjtyZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlKG4pLHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHE9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmFubm90YXRpb25TdG9yYWdlLHI9dGhpcy5kYXRhLG49ci5pZCxpPWUuZ2V0VmFsdWUobix7dmFsdWU6ci5leHBvcnRWYWx1ZT09PXIuZmllbGRWYWx1ZX0pLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9Ik9mZiIhPT1pLGUuc2V0VmFsdWUobix7dmFsdWU6aX0pKSx0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIFQuYWRkKGEpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLG4pLGEuZGlzYWJsZWQ9ci5yZWFkT25seSx0aGlzLl9zZXRSZXF1aXJlZChhLHRoaXMuZGF0YS5yZXF1aXJlZCksYS50eXBlPSJjaGVja2JveCIsYS5uYW1lPXIuZmllbGROYW1lLGkmJmEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksYS5zZXRBdHRyaWJ1dGUoImV4cG9ydFZhbHVlIixyLmV4cG9ydFZhbHVlKSxhLnRhYkluZGV4PVAsYS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbihpKXt2YXIgYSxvPWkudGFyZ2V0LHM9by5uYW1lLGw9by5jaGVja2VkLHU9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShzLG4pKTt0cnl7Zm9yKHUucygpOyEoYT11Lm4oKSkuZG9uZTspe3ZhciBjPWEudmFsdWUsaD1sJiZjLmV4cG9ydFZhbHVlPT09ci5leHBvcnRWYWx1ZTtjLmRvbUVsZW1lbnQmJihjLmRvbUVsZW1lbnQuY2hlY2tlZD1oKSxlLnNldFZhbHVlKGMuaWQse3ZhbHVlOmh9KX19Y2F0Y2godCl7dS5lKHQpfWZpbmFsbHl7dS5mKCl9ZS5zZXRWYWx1ZShuLHt2YWx1ZTpsfSl9KSksYS5hZGRFdmVudExpc3RlbmVyKCJyZXNldGZvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHRGaWVsZFZhbHVlfHwiT2ZmIjt0LnRhcmdldC5jaGVja2VkPWU9PT1yLmV4cG9ydFZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmKGEuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChmdW5jdGlvbihyKXt2YXIgaT17dmFsdWU6ZnVuY3Rpb24odCl7dC50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PXQuZGV0YWlsLnZhbHVlLGUuc2V0VmFsdWUobix7dmFsdWU6dC50YXJnZXQuY2hlY2tlZH0pfX07dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscil9KSksdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoYSxbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSksdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGEpLHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRyksSD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3JldHVybiBrKHRoaXMsciksZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcmFkaW9CdXR0b24iO3ZhciBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uscj10aGlzLmRhdGEsbj1yLmlkLGk9ZS5nZXRWYWx1ZShuLHt2YWx1ZTpyLmZpZWxkVmFsdWU9PT1yLmJ1dHRvblZhbHVlfSkudmFsdWU7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1pIT09ci5idXR0b25WYWx1ZSxlLnNldFZhbHVlKG4se3ZhbHVlOml9KSk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihULmFkZChhKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIixuKSxhLmRpc2FibGVkPXIucmVhZE9ubHksdGhpcy5fc2V0UmVxdWlyZWQoYSx0aGlzLmRhdGEucmVxdWlyZWQpLGEudHlwZT0icmFkaW8iLGEubmFtZT1yLmZpZWxkTmFtZSxpJiZhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLGEudGFiSW5kZXg9UCxhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHIpe3ZhciBpLGE9ci50YXJnZXQsbz1hLm5hbWUscz1hLmNoZWNrZWQsbD1nKHQuX2dldEVsZW1lbnRzQnlOYW1lKG8sbikpO3RyeXtmb3IobC5zKCk7IShpPWwubigpKS5kb25lOyl7dmFyIHU9aS52YWx1ZTtlLnNldFZhbHVlKHUuaWQse3ZhbHVlOiExfSl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfWUuc2V0VmFsdWUobix7dmFsdWU6c30pfSkpLGEuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPWUmJmU9PT1yLmJ1dHRvblZhbHVlfSkpLHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dmFyIG89ci5idXR0b25WYWx1ZTthLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24ocil7dmFyIGk9e3ZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBpLGE9bz09PXIuZGV0YWlsLnZhbHVlLHM9Zyh0Ll9nZXRFbGVtZW50c0J5TmFtZShyLnRhcmdldC5uYW1lKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgbD1pLnZhbHVlLHU9YSYmbC5pZD09PW47bC5kb21FbGVtZW50JiYobC5kb21FbGVtZW50LmNoZWNrZWQ9dSksZS5zZXRWYWx1ZShsLmlkLHt2YWx1ZTp1fSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfX19O3QuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChpLHIpfSkpLHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGEsW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0LmNoZWNrZWR9KSl9cmV0dXJuIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihhKSx0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEcpLHo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXtyZXR1cm4gayh0aGlzLHIpLGUuY2FsbCh0aGlzLHQse2lnbm9yZUJvcmRlcjp0LmRhdGEuaGFzQXBwZWFyYW5jZX0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dSh2KHIucHJvdG90eXBlKSwicmVuZGVyIix0aGlzKS5jYWxsKHRoaXMpO2UuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b24iLHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJihlLnRpdGxlPXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpO3ZhciBuPWUubGFzdENoaWxkO3JldHVybiB0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMmJm4mJih0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKSxuLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwoZnVuY3Rpb24oZSl7dC5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LGUpfSkpKSxlfX1dKSxyfShJKSxWPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGsodGhpcyxyKSxlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxyPXRoaXMuZGF0YS5pZCxuPWUuZ2V0VmFsdWUocix7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO1QuYWRkKGkpLGkuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHIpLGkuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKSxpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZSxpLnRhYkluZGV4PVA7dmFyIGE9dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDt0aGlzLmRhdGEuY29tYm98fChpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHRoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApKSxpLmFkZEV2ZW50TGlzdGVuZXIoInJlc2V0Zm9ybSIsKGZ1bmN0aW9uKGUpe3ZhciByLG49dC5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGE9ZyhpLm9wdGlvbnMpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvLnNlbGVjdGVkPW8udmFsdWU9PT1ufX1jYXRjaCh0KXthLmUodCl9ZmluYWxseXthLmYoKX19KSk7dmFyIG8scz1nKHRoaXMuZGF0YS5vcHRpb25zKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBsPW8udmFsdWUsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTt1LnRleHRDb250ZW50PWwuZGlzcGxheVZhbHVlLHUudmFsdWU9bC5leHBvcnRWYWx1ZSxuLnZhbHVlLmluY2x1ZGVzKGwuZXhwb3J0VmFsdWUpJiYodS5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIiwhMCksYT0hMSksaS5hcHBlbmQodSl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfXZhciBjPW51bGw7aWYoYSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7aC52YWx1ZT0iICIsaC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLGguc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApLGkucHJlcGVuZChoKSxjPWZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixjKSxjPW51bGx9LGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGMpfXZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlPXQ/InZhbHVlIjoidGV4dENvbnRlbnQiLHI9aS5vcHRpb25zO3JldHVybiBpLm11bHRpcGxlP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RlZH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2VdfSkpOi0xPT09ci5zZWxlY3RlZEluZGV4P251bGw6cltyLnNlbGVjdGVkSW5kZXhdW2VdfSxkPWYoITEpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQub3B0aW9ucztyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfX0pKX07cmV0dXJuIHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucz8oaS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKGZ1bmN0aW9uKG4pe3ZhciBhPXt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbjtudWxsPT09KG49Yyl8fHZvaWQgMD09PW58fG4oKTt2YXIgYSxvPXQuZGV0YWlsLnZhbHVlLHM9bmV3IFNldChBcnJheS5pc0FycmF5KG8pP286W29dKSxsPWcoaS5vcHRpb25zKTt0cnl7Zm9yKGwucygpOyEoYT1sLm4oKSkuZG9uZTspe3ZhciB1PWEudmFsdWU7dS5zZWxlY3RlZD1zLmhhcyh1LnZhbHVlKX19Y2F0Y2godCl7bC5lKHQpfWZpbmFsbHl7bC5mKCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKX0pLGQ9ZighMSl9LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKHQpe2kubXVsdGlwbGU9ITB9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1pLm9wdGlvbnMsYT10LmRldGFpbC5yZW1vdmU7aWYoblthXS5zZWxlY3RlZD0hMSxpLnJlbW92ZShhKSxuLmxlbmd0aD4wKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KSk7LTE9PT1vJiYoblswXS5zZWxlY3RlZD0hMCl9ZS5zZXRWYWx1ZShyLHt2YWx1ZTpmKCEwKSxpdGVtczpwKHQpfSksZD1mKCExKX0sY2xlYXI6ZnVuY3Rpb24odCl7Zm9yKDswIT09aS5sZW5ndGg7KWkucmVtb3ZlKDApO2Uuc2V0VmFsdWUocix7dmFsdWU6bnVsbCxpdGVtczpbXX0pLGQ9ZighMSl9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgbj10LmRldGFpbC5pbnNlcnQsYT1uLmluZGV4LG89bi5kaXNwbGF5VmFsdWUscz1uLmV4cG9ydFZhbHVlLGw9aS5jaGlsZHJlblthXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3UudGV4dENvbnRlbnQ9byx1LnZhbHVlPXMsbD9sLmJlZm9yZSh1KTppLmFwcGVuZCh1KSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpdGVtczpmdW5jdGlvbih0KXtmb3IodmFyIG49dC5kZXRhaWwuaXRlbXM7MCE9PWkubGVuZ3RoOylpLnJlbW92ZSgwKTt2YXIgYSxvPWcobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlLGw9cy5kaXNwbGF5VmFsdWUsdT1zLmV4cG9ydFZhbHVlLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7Yy50ZXh0Q29udGVudD1sLGMudmFsdWU9dSxpLmFwcGVuZChjKX19Y2F0Y2godCl7by5lKHQpfWZpbmFsbHl7by5mKCl9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKSxlLnNldFZhbHVlKHIse3ZhbHVlOmYoITApLGl0ZW1zOnAodCl9KSxkPWYoITEpfSxpbmRpY2VzOmZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFNldCh0LmRldGFpbC5pbmRpY2VzKSxhPWcodC50YXJnZXQub3B0aW9ucyk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28uc2VsZWN0ZWQ9aS5oYXMoby5pbmRleCl9fWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfWUuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KSxkPWYoITEpfSxlZGl0YWJsZTpmdW5jdGlvbih0KXt0LnRhcmdldC5kaXNhYmxlZD0hdC5kZXRhaWwuZWRpdGFibGV9fTt0Ll9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYSxuKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24obil7dmFyIGksYT1mKCEwKTtlLnNldFZhbHVlKHIse3ZhbHVlOmF9KSxuLnByZXZlbnREZWZhdWx0KCksbnVsbD09PShpPXQubGlua1NlcnZpY2UuZXZlbnRCdXMpfHx2b2lkIDA9PT1pfHxpLmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnQsZGV0YWlsOntpZDpyLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6ZCxjaGFuZ2VFeDphLHdpbGxDb21taXQ6ITEsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKSx0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY2hlY2tlZH0pKSk6aS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe2Uuc2V0VmFsdWUocix7dmFsdWU6ZighMCl9KX0pKSx0aGlzLmRhdGEuY29tYm8mJnRoaXMuX3NldFRleHRTdHlsZShpKSx0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoaSksdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShHKSxYPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhO2sodGhpcyxyKTt2YXIgbz10LmRhdGEscz0hci5JR05PUkVfVFlQRVMuaGFzKG8ucGFyZW50VHlwZSkmJiEhKG51bGwhPT0obj1vLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT1vLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT1vLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybiBlLmNhbGwodGhpcyx0LHtpc1JlbmRlcmFibGU6c30pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdCh0aGlzLmRhdGEucGFyZW50SWQsJyJdJykpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIGU9bmV3IFkoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxyPXRoaXMucGFnZSxpPW4uVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxyLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rci52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHIudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStyLnZpZXdbMV1dKSxhPWlbMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sbz1pWzFdLHM9dGhpcy52aWV3cG9ydC5yYXdEaW1zLGw9cy5wYWdlV2lkdGgsdT1zLnBhZ2VIZWlnaHQsYz1zLnBhZ2VYLGg9cy5wYWdlWTtyZXR1cm4gdGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0iIi5jb25jYXQoMTAwKihhLWMpL2wsIiUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9IiIuY29uY2F0KDEwMCooby1oKS91LCIlIiksdGhpcy5jb250YWluZXIuYXBwZW5kKGUucmVuZGVyKCkpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKTtEPVgsTj0iSUdOT1JFX1RZUEVTIixVPW5ldyBTZXQoWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0pLChOPUUoTikpaW4gRD9PYmplY3QuZGVmaW5lUHJvcGVydHkoRCxOLHt2YWx1ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6RFtOXT1VO3ZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtrKHRoaXMsdCksdGhpcy5jb250YWluZXI9ZS5jb250YWluZXIsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy50aXRsZU9iaj1lLnRpdGxlT2JqLHRoaXMubW9kaWZpY2F0aW9uRGF0ZT1lLm1vZGlmaWNhdGlvbkRhdGUsdGhpcy5jb250ZW50c09iaj1lLmNvbnRlbnRzT2JqLHRoaXMucmljaFRleHQ9ZS5yaWNoVGV4dCx0aGlzLmhpZGVXcmFwcGVyPWUuaGlkZVdyYXBwZXJ8fCExLHRoaXMucGlubmVkPSExfXJldHVybiB4KHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5jbGFzc05hbWU9InBvcHVwV3JhcHBlciIsdGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3I6dGhpcy5jb250YWluZXIsdGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9InBvcHVwIjt2YXIgbz10aGlzLmNvbG9yO2lmKG8pe3ZhciBsPS43KigyNTUtb1swXSkrb1swXSx1PS43KigyNTUtb1sxXSkrb1sxXSxjPS43KigyNTUtb1syXSkrb1syXTthLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLlV0aWwubWFrZUhleENvbG9yKDB8bCwwfHUsMHxjKX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO2guZGlyPXRoaXMudGl0bGVPYmouZGlyLGgudGV4dENvbnRlbnQ9dGhpcy50aXRsZU9iai5zdHIsYS5hcHBlbmQoaCk7dmFyIGY9aS5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO2lmKGYpe3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtkLmNsYXNzTmFtZT0icG9wdXBEYXRlIixkLnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iLGQuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciLGQuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6Zi50b0xvY2FsZVRpbWVTdHJpbmcoKX0pLGEuYXBwZW5kKGQpfWlmKG51bGw9PT0odD10aGlzLnJpY2hUZXh0KXx8dm9pZCAwPT09dHx8IXQuc3RyfHxudWxsIT09KGU9dGhpcy5jb250ZW50c09iaikmJnZvaWQgMCE9PWUmJmUuc3RyJiZ0aGlzLmNvbnRlbnRzT2JqLnN0ciE9PXRoaXMucmljaFRleHQuc3RyKXt2YXIgcD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTthLmFwcGVuZChwKX1lbHNlIHMuWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6YX0pLGEubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50IjtBcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO3ZhciB2LHk9Zyh0aGlzLnRyaWdnZXIpO3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIG09di52YWx1ZTttLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl90b2dnbGUuYmluZCh0aGlzKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3cuYmluZCh0aGlzLCExKSksbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKX19Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hpZGUuYmluZCh0aGlzLCEwKSksci5hcHBlbmQoYSkscn19LHtrZXk6Il9mb3JtYXRDb250ZW50cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdHIscj10LmRpcixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtuLmNsYXNzTmFtZT0icG9wdXBDb250ZW50IixuLmRpcj1yO2Zvcih2YXIgaT1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxhPTAsbz1pLmxlbmd0aDthPG87KythKXt2YXIgcz1pW2FdO24uYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKSxhPG8tMSYmbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIG59fSx7a2V5OiJfdG9nZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfX0se2tleToiX3Nob3ciLHZhbHVlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiYmKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlMyl9fSx7a2V5OiJfaGlkZSIsdmFsdWU6ZnVuY3Rpb24oKXsoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkmJih0aGlzLnBpbm5lZD0hMSksdGhpcy5oaWRlRWxlbWVudC5oaWRkZW58fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITAsdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzKX19XSksdH0oKSxLPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLnRleHRDb250ZW50PXQuZGF0YS50ZXh0Q29udGVudCxvfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZyZWVUZXh0QW5ub3RhdGlvbiIsdGhpcy50ZXh0Q29udGVudCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFubm90YXRpb25UZXh0Q29udGVudCIsdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dmFyIGUscj1nKHRoaXMudGV4dENvbnRlbnQpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtpLnRleHRDb250ZW50PW4sdC5hcHBlbmQoaSl9fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuY29udGFpbmVyLmFwcGVuZCh0KX1yZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLEo9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjt2YXIgdD10aGlzLmRhdGEsZT1DKHQucmVjdCkscj1lLndpZHRoLG49ZS5oZWlnaHQsaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHIsbiwhMCksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLHQucmVjdFsyXS10LmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIix0LnJlY3RbM10tdC5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHQuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxpLmFwcGVuZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSksdGhpcy5fY3JlYXRlUG9wdXAoYSx0KSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksUT1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIHQ9dGhpcy5kYXRhLGU9Qyh0LnJlY3QpLHI9ZS53aWR0aCxuPWUuaGVpZ2h0LGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShyLG4sITApLGE9dC5ib3JkZXJTdHlsZS53aWR0aCxvPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgieCIsYS8yKSxvLnNldEF0dHJpYnV0ZSgieSIsYS8yKSxvLnNldEF0dHJpYnV0ZSgid2lkdGgiLHItYSksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbi1hKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixhfHwxKSxvLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKSxvLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50IiksaS5hcHBlbmQobyksdGhpcy5jb250YWluZXIuYXBwZW5kKGkpLHRoaXMuX2NyZWF0ZVBvcHVwKG8sdCksdGhpcy5jb250YWluZXJ9fV0pLHJ9KEYpLCQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO3ZhciB0PXRoaXMuZGF0YSxlPUModC5yZWN0KSxyPWUud2lkdGgsbj1lLmhlaWdodCxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUocixuLCEwKSxhPXQuYm9yZGVyU3R5bGUud2lkdGgsbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImN4IixyLzIpLG8uc2V0QXR0cmlidXRlKCJjeSIsbi8yKSxvLnNldEF0dHJpYnV0ZSgicngiLHIvMi1hLzIpLG8uc2V0QXR0cmlidXRlKCJyeSIsbi8yLWEvMiksby5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsYXx8MSksby5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iiksby5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpLGkuYXBwZW5kKG8pLHRoaXMuY29udGFpbmVyLmFwcGVuZChpKSx0aGlzLl9jcmVhdGVQb3B1cChvLHQpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxaPWZ1bmN0aW9uKHQpe2gocix0KTt2YXIgZT1kKHIpO2Z1bmN0aW9uIHIodCl7dmFyIG4saSxhLG87ayh0aGlzLHIpO3ZhciBzPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuKG89ZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOnMsaWdub3JlQm9yZGVyOiEwfSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIixvLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUiLG99cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTt2YXIgdCxlPXRoaXMuZGF0YSxyPUMoZS5yZWN0KSxuPXIud2lkdGgsaT1yLmhlaWdodCxhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUobixpLCEwKSxvPVtdLHM9ZyhlLnZlcnRpY2VzKTt0cnl7Zm9yKHMucygpOyEodD1zLm4oKSkuZG9uZTspe3ZhciBsPXQudmFsdWUsdT1sLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWwueTtvLnB1c2godSsiLCIrYyl9fWNhdGNoKHQpe3MuZSh0KX1maW5hbGx5e3MuZigpfW89by5qb2luKCIgIik7dmFyIGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGguc2V0QXR0cmlidXRlKCJwb2ludHMiLG8pLGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLGguc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGguc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSxhLmFwcGVuZChoKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQoYSksdGhpcy5fY3JlYXRlUG9wdXAoaCxlKSx0aGlzLmNvbnRhaW5lcn19XSkscn0oRiksdHQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbjtyZXR1cm4gayh0aGlzLHIpLChuPWUuY2FsbCh0aGlzLHQpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlnb25Bbm5vdGF0aW9uIixuLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWdvbiIsbn1yZXR1cm4geChyKX0oWiksZXQ9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJjYXJldEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxydD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYSxvO2sodGhpcyxyKTt2YXIgcz0hISh0LmRhdGEuaGFzUG9wdXB8fG51bGwhPT0obj10LmRhdGEudGl0bGVPYmopJiZ2b2lkIDAhPT1uJiZuLnN0cnx8bnVsbCE9PShpPXQuZGF0YS5jb250ZW50c09iaikmJnZvaWQgMCE9PWkmJmkuc3RyfHxudWxsIT09KGE9dC5kYXRhLnJpY2hUZXh0KSYmdm9pZCAwIT09YSYmYS5zdHIpO3JldHVybihvPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpzLGlnbm9yZUJvcmRlcjohMH0pKS5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iLG8uc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSIsb31yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO3ZhciB0LGU9dGhpcy5kYXRhLHI9QyhlLnJlY3QpLG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShuLGksITApLG89ZyhlLmlua0xpc3RzKTt0cnl7Zm9yKG8ucygpOyEodD1vLm4oKSkuZG9uZTspe3ZhciBzLGw9dC52YWx1ZSx1PVtdLGM9ZyhsKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciBoPXMudmFsdWUsZj1oLngtZS5yZWN0WzBdLGQ9ZS5yZWN0WzNdLWgueTt1LnB1c2goIiIuY29uY2F0KGYsIiwiKS5jb25jYXQoZCkpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX11PXUuam9pbigiICIpO3ZhciBwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO3Auc2V0QXR0cmlidXRlKCJwb2ludHMiLHUpLHAuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGh8fDEpLHAuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLHAuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKSx0aGlzLl9jcmVhdGVQb3B1cChwLGUpLGEuYXBwZW5kKHApfX1jYXRjaCh0KXtvLmUodCl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdGhpcy5jb250YWluZXIuYXBwZW5kKGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxudD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJoaWdobGlnaHRBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxpdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik6KHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idW5kZXJsaW5lQW5ub3RhdGlvbiIsdGhpcy5jb250YWluZXIpfX1dKSxyfShGKSxhdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGksYTtrKHRoaXMscik7dmFyIG89ISEodC5kYXRhLmhhc1BvcHVwfHxudWxsIT09KG49dC5kYXRhLnRpdGxlT2JqKSYmdm9pZCAwIT09biYmbi5zdHJ8fG51bGwhPT0oaT10LmRhdGEuY29udGVudHNPYmopJiZ2b2lkIDAhPT1pJiZpLnN0cnx8bnVsbCE9PShhPXQuZGF0YS5yaWNoVGV4dCkmJnZvaWQgMCE9PWEmJmEuc3RyKTtyZXR1cm4gZS5jYWxsKHRoaXMsdCx7aXNSZW5kZXJhYmxlOm8saWdub3JlQm9yZGVyOiEwLGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiEwfSl9cmV0dXJuIHgocixbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKSx0aGlzLnF1YWRyaWxhdGVyYWxzP3RoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJzcXVpZ2dseUFubm90YXRpb24iKToodGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksb3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSksdGhpcy5xdWFkcmlsYXRlcmFscz90aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpOih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0cmlrZW91dEFubm90YXRpb24iLHRoaXMuY29udGFpbmVyKX19XSkscn0oRiksc3Q9ZnVuY3Rpb24odCl7aChyLHQpO3ZhciBlPWQocik7ZnVuY3Rpb24gcih0KXt2YXIgbixpLGE7ayh0aGlzLHIpO3ZhciBvPSEhKHQuZGF0YS5oYXNQb3B1cHx8bnVsbCE9PShuPXQuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PW4mJm4uc3RyfHxudWxsIT09KGk9dC5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09aSYmaS5zdHJ8fG51bGwhPT0oYT10LmRhdGEucmljaFRleHQpJiZ2b2lkIDAhPT1hJiZhLnN0cik7cmV0dXJuIGUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTpvLGlnbm9yZUJvcmRlcjohMH0pfXJldHVybiB4KHIsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSxyfShGKSxsdD1mdW5jdGlvbih0KXtoKHIsdCk7dmFyIGU9ZChyKTtmdW5jdGlvbiByKHQpe3ZhciBuLGE7ayh0aGlzLHIpO3ZhciBvPShhPWUuY2FsbCh0aGlzLHQse2lzUmVuZGVyYWJsZTohMH0pKS5kYXRhLmZpbGUscz1vLmZpbGVuYW1lLGw9by5jb250ZW50O3JldHVybiBhLmZpbGVuYW1lPSgwLGkuZ2V0RmlsZW5hbWVGcm9tVXJsKShzLCEwKSxhLmNvbnRlbnQ9bCxudWxsPT09KG49YS5saW5rU2VydmljZS5ldmVudEJ1cyl8fHZvaWQgMD09PW58fG4uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIse3NvdXJjZTpwKGEpLGZpbGVuYW1lOnMsY29udGVudDpsfSksYX1yZXR1cm4geChyLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxyO3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/cj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKToocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkuc3JjPSIiLmNvbmNhdCh0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCwiYW5ub3RhdGlvbi0iKS5jb25jYXQoL3BhcGVyY2xpcC9pLnRlc3QodGhpcy5kYXRhLm5hbWUpPyJwYXBlcmNsaXAiOiJwdXNocGluIiwiLnN2ZyIpLHIuY2xhc3NOYW1lPSJwb3B1cFRyaWdnZXJBcmVhIixyLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSwhdGhpcy5kYXRhLmhhc1BvcHVwJiYobnVsbCE9PSh0PXRoaXMuZGF0YS50aXRsZU9iaikmJnZvaWQgMCE9PXQmJnQuc3RyfHxudWxsIT09KGU9dGhpcy5kYXRhLmNvbnRlbnRzT2JqKSYmdm9pZCAwIT09ZSYmZS5zdHJ8fHRoaXMuZGF0YS5yaWNoVGV4dCkmJnRoaXMuX2NyZWF0ZVBvcHVwKHIsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmQociksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfZG93bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZG93bmxvYWRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5vcGVuT3JEb3dubG9hZERhdGEodGhpcy5jb250YWluZXIsdGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUpfX1dKSxyfShGKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtrKHRoaXMsdCl9cmV0dXJuIHgodCxudWxsLFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbnMsbz1lLmRpdixzPWUudmlld3BvcnQsdT1lLmFjY2Vzc2liaWxpdHlNYW5hZ2VyOygwLGkuc2V0TGF5ZXJEaW1lbnNpb25zKShvLHMpO3ZhciBjLGg9e2RhdGE6bnVsbCxsYXllcjpvLHBhZ2U6ZS5wYWdlLHZpZXdwb3J0OnMsbGlua1NlcnZpY2U6ZS5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6ZS5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOmUuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PWUucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgaS5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyBhLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzohMD09PWUuZW5hYmxlU2NyaXB0aW5nLGhhc0pTQWN0aW9uczplLmhhc0pTQWN0aW9ucyxmaWVsZE9iamVjdHM6ZS5maWVsZE9iamVjdHN9LGY9MCxkPWcocik7dHJ5e2ZvcihkLnMoKTshKGM9ZC5uKCkpLmRvbmU7KXt2YXIgcD1jLnZhbHVlO2lmKHAuYW5ub3RhdGlvblR5cGUhPT1uLkFubm90YXRpb25UeXBlLlBPUFVQKXt2YXIgdj1DKHAucmVjdCkseT12LndpZHRoLG09di5oZWlnaHQ7aWYoeTw9MHx8bTw9MCljb250aW51ZX1oLmRhdGE9cDt2YXIgYj1PLmNyZWF0ZShoKTtpZihiLmlzUmVuZGVyYWJsZSl7dmFyIF89Yi5yZW5kZXIoKTtpZihwLmhpZGRlbiYmKF8uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQXJyYXkuaXNBcnJheShfKSl7dmFyIHcsQT1nKF8pO3RyeXtmb3IoQS5zKCk7ISh3PUEubigpKS5kb25lOyl7dmFyIGs9dy52YWx1ZTtrLnN0eWxlLnpJbmRleD1mKyssbCh0LHQsY3QpLmNhbGwodCxrLHAuaWQsbyx1KX19Y2F0Y2godCl7QS5lKHQpfWZpbmFsbHl7QS5mKCl9fWVsc2UgXy5zdHlsZS56SW5kZXg9ZisrLGIgaW5zdGFuY2VvZiBYP28ucHJlcGVuZChfKTpsKHQsdCxjdCkuY2FsbCh0LF8scC5pZCxvLHUpfX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9bCh0aGlzLHQsaHQpLmNhbGwodGhpcyxvLGUuYW5ub3RhdGlvbkNhbnZhc01hcCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciByPWUuYW5ub3RhdGlvbkNhbnZhc01hcCxuPWUuZGl2LGE9ZS52aWV3cG9ydDsoMCxpLnNldExheWVyRGltZW5zaW9ucykobix7cm90YXRpb246YS5yb3RhdGlvbn0pLGwodGhpcyx0LGh0KS5jYWxsKHRoaXMsbixyKSxuLmhpZGRlbj0hMX19XSksdH0oKTtmdW5jdGlvbiBjdCh0LGUscixuKXt2YXIgYT10LmZpcnN0Q2hpbGR8fHQ7YS5pZD0iIi5jb25jYXQoaS5Bbm5vdGF0aW9uUHJlZml4KS5jb25jYXQoZSksci5hcHBlbmQodCksbnVsbD09bnx8bi5tb3ZlRWxlbWVudEluRE9NKHIsdCxhLCExKX1mdW5jdGlvbiBodCh0LGUpe2lmKGUpe3ZhciByLG49ZyhlKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPWIoci52YWx1ZSwyKSxhPWlbMF0sbz1pWzFdLHM9dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInLmNvbmNhdChhLCciXScpKTtpZihzKXt2YXIgbD1zLmZpcnN0Q2hpbGQ7bD8iQ0FOVkFTIj09PWwubm9kZU5hbWU/bC5yZXBsYWNlV2l0aChvKTpsLmJlZm9yZShvKTpzLmFwcGVuZChvKX19fWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfWUuY2xlYXIoKX19ZS5Bbm5vdGF0aW9uTGF5ZXI9dXR9LCh0LGUpPT57ZnVuY3Rpb24gcih0KXtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0scih0KX1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGZ1bmN0aW9uKHQsZSl7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBpKHQsZSk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmdC5jb25zdHJ1Y3RvciYmKHI9dC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKHQpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aSh0LGUpOnZvaWQgMH19KHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1yKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgbj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bil7dmFyIGk9bi5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PXIoYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuQ29sb3JDb252ZXJ0ZXJzPXZvaWQgMDt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KX12YXIgZSxyO3JldHVybiBlPXQscj1be2tleToiQ01ZS19HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsNCkscj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVyblsiRyIsMS1NYXRoLm1pbigxLC4zKnIrLjU5KmErLjExKmkrbyldfX0se2tleToiR19DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm5bIkNNWUsiLDAsMCwwLDEtbih0LDEpWzBdXX19LHtrZXk6IkdfUkdCIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMSlbMF07cmV0dXJuWyJSR0IiLGUsZSxlXX19LHtrZXk6IkdfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9byhuKHQsMSlbMF0pO3JldHVybiIjIi5jb25jYXQoZSkuY29uY2F0KGUpLmNvbmNhdChlKX19LHtrZXk6IlJHQl9HIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMyk7cmV0dXJuWyJHIiwuMyplWzBdKy41OSplWzFdKy4xMSplWzJdXX19LHtrZXk6IlJHQl9IVE1MIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1vKHIpLGw9byhpKSx1PW8oYSk7cmV0dXJuIiMiLmNvbmNhdChzKS5jb25jYXQobCkuY29uY2F0KHUpfX0se2tleToiVF9IVE1MIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIjMDAwMDAwMDAifX0se2tleToiQ01ZS19SR0IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW4odCw0KSxyPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSxyK28pLDEtTWF0aC5taW4oMSxhK28pLDEtTWF0aC5taW4oMSxpK28pXX19LHtrZXk6IkNNWUtfSFRNTCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX19LHtrZXk6IlJHQl9DTVlLIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uKHQsMykscj0xLWVbMF0saT0xLWVbMV0sYT0xLWVbMl07cmV0dXJuWyJDTVlLIixyLGksYSxNYXRoLm1pbihyLGksYSldfX1dLG51bGwmJmEoZS5wcm90b3R5cGUsbnVsbCksciYmYShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9KCk7ZS5Db2xvckNvbnZlcnRlcnM9c30sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlhmYUxheWVyPXZvaWQgMDt2YXIgbj1yKDE0OSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fHModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPXModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLGw9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2w9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBhfX19fWZ1bmN0aW9uIHModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGwodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBsKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1pKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBlLHI7cmV0dXJuIGU9dCxyPVt7a2V5OiJzZXR1cFN0b3JhZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi5nZXRWYWx1ZShlLHt2YWx1ZTpudWxsfSk7c3dpdGNoKHIubmFtZSl7Y2FzZSJ0ZXh0YXJlYSI6aWYobnVsbCE9PWEudmFsdWUmJih0LnRleHRDb250ZW50PWEudmFsdWUpLCJwcmludCI9PT1pKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChmdW5jdGlvbih0KXtuLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXIuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09ci5hdHRyaWJ1dGVzLnR5cGUpe2lmKGEudmFsdWU9PT1yLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTphLnZhbHVlPT09ci5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSwicHJpbnQiPT09aSlicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQuY2hlY2tlZD90LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIik6dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKX0pfSkpfWVsc2V7aWYobnVsbCE9PWEudmFsdWUmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsYS52YWx1ZSksInByaW50Ij09PWkpYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGZ1bmN0aW9uKHQpe24uc2V0VmFsdWUoZSx7dmFsdWU6dC50YXJnZXQudmFsdWV9KX0pKX1icmVhaztjYXNlInNlbGVjdCI6aWYobnVsbCE9PWEudmFsdWUpe3ZhciBzLGw9byhyLmNoaWxkcmVuKTt0cnl7Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7dS5hdHRyaWJ1dGVzLnZhbHVlPT09YS52YWx1ZSYmKHUuYXR0cmlidXRlcy5zZWxlY3RlZD0hMCl9fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX10LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24odCl7dmFyIHI9dC50YXJnZXQub3B0aW9ucyxpPS0xPT09ci5zZWxlY3RlZEluZGV4PyIiOnJbci5zZWxlY3RlZEluZGV4XS52YWx1ZTtuLnNldFZhbHVlKGUse3ZhbHVlOml9KX0pKX19fSx7a2V5OiJzZXRBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10Lmh0bWwscj10LmVsZW1lbnQsbj10LnN0b3JhZ2UsaT12b2lkIDA9PT1uP251bGw6bixvPXQuaW50ZW50LHM9dC5saW5rU2VydmljZSxsPXIuYXR0cmlidXRlcyx1PWUgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudDsicmFkaW8iPT09bC50eXBlJiYobC5uYW1lPSIiLmNvbmNhdChsLm5hbWUsIi0iKS5jb25jYXQobykpO2Zvcih2YXIgYz0wLGg9T2JqZWN0LmVudHJpZXMobCk7YzxoLmxlbmd0aDtjKyspe3ZhciBmPWEoaFtjXSwyKSxkPWZbMF0scD1mWzFdO2lmKG51bGwhPXApc3dpdGNoKGQpe2Nhc2UiY2xhc3MiOnAubGVuZ3RoJiZlLnNldEF0dHJpYnV0ZShkLHAuam9pbigiICIpKTticmVhaztjYXNlImRhdGFJZCI6YnJlYWs7Y2FzZSJpZCI6ZS5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscCk7YnJlYWs7Y2FzZSJzdHlsZSI6T2JqZWN0LmFzc2lnbihlLnN0eWxlLHApO2JyZWFrO2Nhc2UidGV4dENvbnRlbnQiOmUudGV4dENvbnRlbnQ9cDticmVhaztkZWZhdWx0OighdXx8ImhyZWYiIT09ZCYmIm5ld1dpbmRvdyIhPT1kKSYmZS5zZXRBdHRyaWJ1dGUoZCxwKX19dSYmcy5hZGRMaW5rQXR0cmlidXRlcyhlLGwuaHJlZixsLm5ld1dpbmRvdyksaSYmbC5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKGUsbC5kYXRhSWQscixpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxyPXQubGlua1NlcnZpY2UsaT10LnhmYUh0bWwscz10LmludGVudHx8ImRpc3BsYXkiLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2kuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmwsZWxlbWVudDppLGludGVudDpzLGxpbmtTZXJ2aWNlOnJ9KTt2YXIgdT1bW2ksLTEsbF1dLGM9dC5kaXY7aWYoYy5hcHBlbmQobCksdC52aWV3cG9ydCl7dmFyIGg9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTtjLnN0eWxlLnRyYW5zZm9ybT1ofSJyaWNoVGV4dCIhPT1zJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ4ZmFMYXllciB4ZmFGb250Iik7Zm9yKHZhciBmPVtdO3UubGVuZ3RoPjA7KXt2YXIgZCxwLHY9YSh1LmF0KC0xKSwzKSx5PXZbMF0sbT12WzFdLGc9dlsyXTtpZihtKzEhPT15LmNoaWxkcmVuLmxlbmd0aCl7dmFyIGI9eS5jaGlsZHJlblsrK3UuYXQoLTEpWzFdXTtpZihudWxsIT09Yil7dmFyIF89Yi5uYW1lO2lmKCIjdGV4dCIhPT1fKXt2YXIgdz12b2lkIDA7aWYodz1udWxsIT09KGQ9YikmJnZvaWQgMCE9PWQmJm51bGwhPT0ocD1kLmF0dHJpYnV0ZXMpJiZ2b2lkIDAhPT1wJiZwLnhtbG5zP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhiLmF0dHJpYnV0ZXMueG1sbnMsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfKSxnLmFwcGVuZCh3KSxiLmF0dHJpYnV0ZXMmJnRoaXMuc2V0QXR0cmlidXRlcyh7aHRtbDp3LGVsZW1lbnQ6YixzdG9yYWdlOmUsaW50ZW50OnMsbGlua1NlcnZpY2U6cn0pLGIuY2hpbGRyZW4mJmIuY2hpbGRyZW4ubGVuZ3RoPjApdS5wdXNoKFtiLC0xLHddKTtlbHNlIGlmKGIudmFsdWUpe3ZhciBBPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIudmFsdWUpO24uWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoXykmJmYucHVzaChBKSx3LmFwcGVuZChBKX19ZWxzZXt2YXIgaz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLnZhbHVlKTtmLnB1c2goayksZy5hcHBlbmQoayl9fX1lbHNlIHUucG9wKCl9dmFyIFMseD1vKGMucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSk7dHJ5e2Zvcih4LnMoKTshKFM9eC5uKCkpLmRvbmU7KVMudmFsdWUuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsITApfWNhdGNoKHQpe3guZSh0KX1maW5hbGx5e3guZigpfXJldHVybnt0ZXh0RGl2czpmfX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9Im1hdHJpeCgiLmNvbmNhdCh0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIiksIikiKTt0LmRpdi5zdHlsZS50cmFuc2Zvcm09ZSx0LmRpdi5oaWRkZW49ITF9fV0sbnVsbCYmdShlLnByb3RvdHlwZSxudWxsKSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH0oKTtlLlhmYUxheWVyPWN9LCh0LGUscik9PntmdW5jdGlvbiBuKHQpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxuKHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1yKDEzNyksYT1yKDEpLG89cigzKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBoKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8Yyh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4saSxhLG8scz1bXSxsPSEwLHU9ITE7dHJ5e2lmKGE9KHI9ci5jYWxsKHQpKS5uZXh0LDA9PT1lKXtpZihPYmplY3QocikhPT1yKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KG49YS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PWUpO2w9ITApO31jYXRjaCh0KXt1PSEwLGk9dH1maW5hbGx5e3RyeXtpZighbCYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBpfX1yZXR1cm4gc319KHQsZSl8fGModCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPWModCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtyJiYodD1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PXIubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGModCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGgodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBoKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxhPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1uKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGk9ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KGkua2V5KSwic3ltYm9sIj09PW4oYSk/YTpTdHJpbmcoYSkpLGkpfXZhciBhfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiBlJiZmKHQucHJvdG90eXBlLGUpLHImJmYodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgdj1kKChmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLCgwLGEudW5yZWFjaGFibGUpKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9KSk7ZS5TVkdHcmFwaGljcz12O3ZhciB5PWZ1bmN0aW9uKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTt2YXIgZT10LnRvRml4ZWQoMTApLHI9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3JdKXJldHVybiBlO2Rve3ItLX13aGlsZSgiMCI9PT1lW3JdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3JdP3I6cisxKX0sbT1mdW5jdGlvbih0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiLmNvbmNhdCh5KHRbMF0pLCIgIikuY29uY2F0KHkodFszXSksIikiKTtpZih0WzBdPT09dFszXSYmdFsxXT09PS10WzJdKXt2YXIgZT0xODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEk7cmV0dXJuInJvdGF0ZSgiLmNvbmNhdCh5KGUpLCIpIil9fWVsc2UgaWYoMT09PXRbMF0mJjA9PT10WzFdJiYwPT09dFsyXSYmMT09PXRbM10pcmV0dXJuInRyYW5zbGF0ZSgiLmNvbmNhdCh5KHRbNF0pLCIgIikuY29uY2F0KHkodFs1XSksIikiKTtyZXR1cm4ibWF0cml4KCIuY29uY2F0KHkodFswXSksIiAiKS5jb25jYXQoeSh0WzFdKSwiICIpLmNvbmNhdCh5KHRbMl0pLCIgIikuY29uY2F0KHkodFszXSksIiAiKS5jb25jYXQoeSh0WzRdKSwiICIpKyIiLmNvbmNhdCh5KHRbNV0pLCIpIil9LGc9Im5vcm1hbCIsYj0ibm9ybWFsIixfPSIjMDAwMDAwIix3PVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sQT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIiLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihVUkwuY3JlYXRlT2JqZWN0VVJMJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiFyKXJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTplfSkpO2Zvcih2YXIgbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGk9ImRhdGE6Ii5jb25jYXQoZSwiO2Jhc2U2NCwiKSxhPTAsbz10Lmxlbmd0aDthPG87YSs9Myl7dmFyIHM9MjU1JnRbYV0sbD0yNTUmdFthKzFdLHU9MjU1JnRbYSsyXTtpKz1uW3M+PjJdK25bKDMmcyk8PDR8bD4+NF0rblthKzE8bz8oMTUmbCk8PDJ8dT4+Njo2NF0rblthKzI8bz82MyZ1OjY0XX1yZXR1cm4gaX0sUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksZT1uZXcgSW50MzJBcnJheSgyNTYpLHI9MDtyPDI1NjtyKyspe2Zvcih2YXIgbj1yLGk9MDtpPDg7aSsrKW49MSZuPzM5ODgyOTIzODRebj4+MSYyMTQ3NDgzNjQ3Om4+PjEmMjE0NzQ4MzY0NztlW3JdPW59ZnVuY3Rpb24gcyh0LHIsbixpKXt2YXIgYT1pLG89ci5sZW5ndGg7blthXT1vPj4yNCYyNTUsblthKzFdPW8+PjE2JjI1NSxuW2ErMl09bz4+OCYyNTUsblthKzNdPTI1NSZvLG5bYSs9NF09MjU1JnQuY2hhckNvZGVBdCgwKSxuW2ErMV09MjU1JnQuY2hhckNvZGVBdCgxKSxuW2ErMl09MjU1JnQuY2hhckNvZGVBdCgyKSxuW2ErM109MjU1JnQuY2hhckNvZGVBdCgzKSxhKz00LG4uc2V0KHIsYSk7dmFyIHM9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxhPXI7YTxuO2ErKyl7dmFyIG89MjU1JihpXnRbYV0pO2k9aT4+PjheZVtvXX1yZXR1cm4tMV5pfShuLGkrNCxhKz1yLmxlbmd0aCk7blthXT1zPj4yNCYyNTUsblthKzFdPXM+PjE2JjI1NSxuW2ErMl09cz4+OCYyNTUsblthKzNdPTI1NSZzfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgscj02NTUzNSxuPU1hdGguY2VpbChlL3IpLGk9bmV3IFVpbnQ4QXJyYXkoMitlKzUqbis0KSxhPTA7aVthKytdPTEyMCxpW2ErK109MTU2O2Zvcih2YXIgbz0wO2U+cjspaVthKytdPTAsaVthKytdPTI1NSxpW2ErK109MjU1LGlbYSsrXT0wLGlbYSsrXT0wLGkuc2V0KHQuc3ViYXJyYXkobyxvK3IpLGEpLGErPXIsbys9cixlLT1yO2lbYSsrXT0xLGlbYSsrXT0yNTUmZSxpW2ErK109ZT4+OCYyNTUsaVthKytdPTI1NSZ+ZSxpW2ErK109KDY1NTM1Jn5lKT4+OCYyNTUsaS5zZXQodC5zdWJhcnJheShvKSxhKSxhKz10Lmxlbmd0aC1vO3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MSxpPTAsYT0wO2E8cjsrK2EpaT0oaSsobj0obisoMjU1JnRbYV0pKSU2NTUyMSkpJTY1NTIxO3JldHVybiBpPDwxNnxufSh0LDAsdC5sZW5ndGgpO3JldHVybiBpW2ErK109cz4+MjQmMjU1LGlbYSsrXT1zPj4xNiYyNTUsaVthKytdPXM+PjgmMjU1LGlbYSsrXT0yNTUmcyxpfXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZhciB1LGMsaCxmPWUud2lkdGgsZD1lLmhlaWdodCxwPWUuZGF0YTtzd2l0Y2gocil7Y2FzZSBhLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpjPTAsdT0xLGg9Zis3Pj4zO2JyZWFrO2Nhc2UgYS5JbWFnZUtpbmQuUkdCXzI0QlBQOmM9Mix1PTgsaD0zKmY7YnJlYWs7Y2FzZSBhLkltYWdlS2luZC5SR0JBXzMyQlBQOmM9Nix1PTgsaD00KmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9Zm9yKHZhciB2PW5ldyBVaW50OEFycmF5KCgxK2gpKmQpLHk9MCxtPTAsZz0wO2c8ZDsrK2cpdlt5KytdPTAsdi5zZXQocC5zdWJhcnJheShtLG0raCkseSksbSs9aCx5Kz1oO2lmKHI9PT1hLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmaSl7eT0wO2Zvcih2YXIgYj0wO2I8ZDtiKyspe3krKztmb3IodmFyIF89MDtfPGg7XysrKXZbeSsrXV49MjU1fX12YXIgdz1uZXcgVWludDhBcnJheShbZj4+MjQmMjU1LGY+PjE2JjI1NSxmPj44JjI1NSwyNTUmZixkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHUsYywwLDAsMF0pLEE9ZnVuY3Rpb24odCl7aWYoIW8uaXNOb2RlSlMpcmV0dXJuIGwodCk7dHJ5e3ZhciBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO3ZhciByPXJlcXVpcmUoInpsaWIiKS5kZWZsYXRlU3luYyhlLHtsZXZlbDo5fSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBVaW50OEFycmF5P3I6bmV3IFVpbnQ4QXJyYXkocil9Y2F0Y2godCl7KDAsYS53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrdCl9cmV0dXJuIGwodCl9KHYpLFM9dC5sZW5ndGgrMzYrdy5sZW5ndGgrQS5sZW5ndGgseD1uZXcgVWludDhBcnJheShTKSxFPTA7cmV0dXJuIHguc2V0KHQsRSkscygiSUhEUiIsdyx4LEUrPXQubGVuZ3RoKSxzKCJJREFUQSIsQSx4LEUrPTEyK3cubGVuZ3RoKSxFKz0xMitBLmxlbmd0aCxzKCJJRU5EIixuZXcgVWludDhBcnJheSgwKSx4LEUpLGsoeCwiaW1hZ2UvcG5nIixuKX0oZSx2b2lkIDA9PT1lLmtpbmQ/YS5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHIsbil9fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cCh0aGlzLHQpLHRoaXMuZm9udFNpemVTY2FsZT0xLHRoaXMuZm9udFdlaWdodD1iLHRoaXMuZm9udFNpemU9MCx0aGlzLnRleHRNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPV8sdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGQodCxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSx7a2V5OiJzZXRDdXJyZW50UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9fV0pLHR9KCksRT0wLFA9MCxUPTA7ZS5TVkdHcmFwaGljcz12PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Zm9yKHZhciBvIGluIHAodGhpcyx0KSwoMCxpLmRlcHJlY2F0ZWQpKCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIiksdGhpcy5zdmdGYWN0b3J5PW5ldyBpLkRPTVNWR0ZhY3RvcnksdGhpcy5jdXJyZW50PW5ldyB4LHRoaXMudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHRoaXMudHJhbnNmb3JtU3RhY2s9W10sdGhpcy5leHRyYVN0YWNrPVtdLHRoaXMuY29tbW9uT2Jqcz1lLHRoaXMub2Jqcz1yLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5lbWJlZEZvbnRzPSExLHRoaXMuZW1iZWRkZWRGb250cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY3NzU3R5bGU9bnVsbCx0aGlzLmZvcmNlRGF0YVNjaGVtYT0hIW4sdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmc9W10sYS5PUFMpdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbYS5PUFNbb11dPW99cmV0dXJuIGQodCxbe2tleToiZ2V0T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqcy5nZXQodCk6dGhpcy5vYmpzLmdldCh0KTplfX0se2tleToic2F2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO3ZhciB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KSx0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfX0se2tleToicmVzdG9yZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHRoaXMudGdycD1udWxsfX0se2tleToiZ3JvdXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZSh0KSx0aGlzLnJlc3RvcmUoKX19LHtrZXk6ImxvYWREZXBlbmRlbmNpZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9dC5mbkFycmF5LG49dC5hcmdzQXJyYXksaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldPT09YS5PUFMuZGVwZW5kZW5jeSl7dmFyIHMsbD11KG5baV0pO3RyeXt2YXIgYz1mdW5jdGlvbigpe3ZhciB0PXMudmFsdWUscj10LnN0YXJ0c1dpdGgoImdfIik/ZS5jb21tb25PYmpzOmUub2JqcyxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyLmdldCh0LGUpfSkpO2UuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChuKX07Zm9yKGwucygpOyEocz1sLm4oKSkuZG9uZTspYygpfWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfX1yZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyl9fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcz1bdCxlLHIsbixpLG9dO3RoaXMudHJhbnNmb3JtTWF0cml4PWEuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgscyksdGhpcy50Z3JwPW51bGx9fSx7a2V5OiJnZXRTVkciLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLnZpZXdwb3J0PWU7dmFyIG49dGhpcy5faW5pdGlhbGl6ZShlKTtyZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJhbnNmb3JtTWF0cml4PWEuSURFTlRJVFlfTUFUUklYLHIuZXhlY3V0ZU9wVHJlZShyLmNvbnZlcnRPcExpc3QodCkpLG59KSl9fSx7a2V5OiJjb252ZXJ0T3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcscj10LmFyZ3NBcnJheSxuPXQuZm5BcnJheSxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspe3ZhciBzPW5bYV07aS5wdXNoKHtmbklkOnMsZm46ZVtzXSxhcmdzOnJbYV19KX1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPVtdLGk9dSh0KTt0cnl7Zm9yKGkucygpOyEoZT1pLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWU7InNhdmUiIT09YS5mbj8icmVzdG9yZSI9PT1hLmZuP3I9bi5wb3AoKTpyLnB1c2goYSk6KHIucHVzaCh7Zm5JZDo5MixmbjoiZ3JvdXAiLGl0ZW1zOltdfSksbi5wdXNoKHIpLHI9ci5hdCgtMSkuaXRlbXMpfX1jYXRjaCh0KXtpLmUodCl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oaSl9fSx7a2V5OiJleGVjdXRlT3BUcmVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1lLnZhbHVlLGk9bi5mbixvPW4uZm5JZCxzPW4uYXJncztzd2l0Y2goMHxvKXtjYXNlIGEuT1BTLmJlZ2luVGV4dDp0aGlzLmJlZ2luVGV4dCgpO2JyZWFrO2Nhc2UgYS5PUFMuZGVwZW5kZW5jeTpicmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6dGhpcy5zZXRMZWFkaW5nKHMpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OnRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGb250OnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmNhc2UgYS5PUFMuc2hvd1NwYWNlZFRleHQ6dGhpcy5zaG93VGV4dChzWzBdKTticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6dGhpcy5lbmRUZXh0KCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDp0aGlzLm1vdmVUZXh0KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRDaGFyU3BhY2luZzp0aGlzLnNldENoYXJTcGFjaW5nKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6dGhpcy5zZXRXb3JkU3BhY2luZyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEhTY2FsZTp0aGlzLnNldEhTY2FsZShzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRNYXRyaXg6dGhpcy5zZXRUZXh0TWF0cml4KHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLnNldFRleHRSaXNlOnRoaXMuc2V0VGV4dFJpc2Uoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTp0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZVdpZHRoOnRoaXMuc2V0TGluZVdpZHRoKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TGluZUpvaW46dGhpcy5zZXRMaW5lSm9pbihzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldExpbmVDYXA6dGhpcy5zZXRMaW5lQ2FwKHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0TWl0ZXJMaW1pdDp0aGlzLnNldE1pdGVyTGltaXQoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsUkdCQ29sb3I6dGhpcy5zZXRGaWxsUkdCQ29sb3Ioc1swXSxzWzFdLHNbMl0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6dGhpcy5zZXRTdHJva2VSR0JDb2xvcihzWzBdLHNbMV0sc1syXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvck46dGhpcy5zZXRTdHJva2VDb2xvck4ocyk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOnRoaXMuc2V0RmlsbENvbG9yTihzKTticmVhaztjYXNlIGEuT1BTLnNoYWRpbmdGaWxsOnRoaXMuc2hhZGluZ0ZpbGwoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5zZXREYXNoOnRoaXMuc2V0RGFzaChzWzBdLHNbMV0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OnRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHNbMF0pO2JyZWFrO2Nhc2UgYS5PUFMuc2V0RmxhdG5lc3M6dGhpcy5zZXRGbGF0bmVzcyhzWzBdKTticmVhaztjYXNlIGEuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShzWzBdKTticmVhaztjYXNlIGEuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBhLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIGEuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIGEuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIGEuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2UgYS5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChzWzBdKTticmVhaztjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3Qoc1swXSk7YnJlYWs7Y2FzZSBhLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oc1swXSxzWzFdKTticmVhaztjYXNlIGEuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBhLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIGEuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIGEuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBhLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChuLml0ZW1zKTticmVhaztkZWZhdWx0OigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIi5jb25jYXQoaSkpfX19Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9fX0se2tleToic2V0V29yZFNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC53b3JkU3BhY2luZz10fX0se2tleToic2V0Q2hhclNwYWNpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz10fX0se2tleToibmV4dExpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX19LHtrZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmN1cnJlbnQ7by50ZXh0TWF0cml4PW8ubGluZU1hdHJpeD1bdCxlLHIsbixpLGFdLG8udGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKSxvLng9by5saW5lWD0wLG8ueT1vLmxpbmVZPTAsby54Y29vcmRzPVtdLG8ueWNvb3Jkcz1bXSxvLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSxvLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixvLmZvbnRGYW1pbHkpLG8udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIiwiIi5jb25jYXQoeShvLmZvbnRTaXplKSwicHgiKSksby50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1vLnkpKSxvLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iiksby50eHRFbGVtZW50LmFwcGVuZChvLnRzcGFuKX19LHtrZXk6ImJlZ2luVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC54PXQubGluZVg9MCx0Lnk9dC5saW5lWT0wLHQudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWCx0LmxpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVgsdC50ZXh0TWF0cml4U2NhbGU9MSx0LnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKSx0LnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0IiksdC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdC54Y29vcmRzPVtdLHQueWNvb3Jkcz1bXX19LHtrZXk6Im1vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3VycmVudDtyLng9ci5saW5lWCs9dCxyLnk9ci5saW5lWSs9ZSxyLnhjb29yZHM9W10sci55Y29vcmRzPVtdLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHIuZm9udEZhbWlseSksci50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLCIiLmNvbmNhdCh5KHIuZm9udFNpemUpLCJweCIpKSxyLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLXIueSkpfX0se2tleToic2hvd1RleHQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPWUuZm9udCxuPWUuZm9udFNpemU7aWYoMCE9PW4pe3ZhciBpLG89ZS5mb250U2l6ZVNjYWxlLHM9ZS5jaGFyU3BhY2luZyxsPWUud29yZFNwYWNpbmcsYz1lLmZvbnREaXJlY3Rpb24saD1lLnRleHRIU2NhbGUqYyxmPXIudmVydGljYWwsZD1mPzE6LTEscD1yLmRlZmF1bHRWTWV0cmljcyx2PW4qZS5mb250TWF0cml4WzBdLHc9MCxBPXUodCk7dHJ5e2ZvcihBLnMoKTshKGk9QS5uKCkpLmRvbmU7KXt2YXIgaz1pLnZhbHVlO2lmKG51bGwhPT1rKWlmKCJudW1iZXIiIT10eXBlb2Ygayl7dmFyIFM9KGsuaXNTcGFjZT9sOjApK3MseD1rLmZvbnRDaGFyLEU9dm9pZCAwLFA9dm9pZCAwLFQ9ay53aWR0aDtpZihmKXt2YXIgQz12b2lkIDAsTz1rLnZtZXRyaWN8fHA7Qz0tKEM9ay52bWV0cmljP09bMV06LjUqVCkqdjt2YXIgRj1PWzJdKnY7VD1PPy1PWzBdOlQsRT1DL28sUD0odytGKS9vfWVsc2UgRT13L28sUD0wOyhrLmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKGUueGNvb3Jkcy5wdXNoKGUueCtFKSxmJiZlLnljb29yZHMucHVzaCgtZS55K1ApLGUudHNwYW4udGV4dENvbnRlbnQrPXgpLHcrPWY/VCp2LVMqYzpUKnYrUypjfWVsc2Ugdys9ZCprKm4vMWUzO2Vsc2Ugdys9YypsfX1jYXRjaCh0KXtBLmUodCl9ZmluYWxseXtBLmYoKX1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAoeSkuam9pbigiICIpKSxmP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZS55Y29vcmRzLm1hcCh5KS5qb2luKCIgIikpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIseSgtZS55KSksZj9lLnktPXc6ZS54Kz13KmgsZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsIiIuY29uY2F0KHkoZS5mb250U2l6ZSksInB4IikpLGUuZm9udFN0eWxlIT09ZyYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXN0eWxlIixlLmZvbnRTdHlsZSksZS5mb250V2VpZ2h0IT09YiYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KTt2YXIgTT1lLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8oZS5maWxsQ29sb3IhPT1fJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSxlLmZpbGxBbHBoYTwxJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpKTplLnRleHRSZW5kZXJpbmdNb2RlPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSD9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJ0cmFuc3BhcmVudCIpOmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxNPT09YS5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0V8fE09PT1hLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKXt2YXIgUj0xLyhlLnRleHRNYXRyaXhTY2FsZXx8MSk7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLFIpfXZhciBJPWUudGV4dE1hdHJpeDswIT09ZS50ZXh0UmlzZSYmKChJPUkuc2xpY2UoKSlbNV0rPWUudGV4dFJpc2UpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCIiLmNvbmNhdChtKEkpLCIgc2NhbGUoIikuY29uY2F0KHkoaCksIiwgLTEpIikpLGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pLGUudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9fX0se2tleToic2V0TGVhZGluZ01vdmVUZXh0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0TGVhZGluZygtZSksdGhpcy5tb3ZlVGV4dCh0LGUpfX0se2tleToiYWRkRm9udFN0eWxlIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdC5kYXRhKXRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgImZvbnRFeHRyYVByb3BlcnRpZXMiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO3RoaXMuY3NzU3R5bGV8fCh0aGlzLmNzc1N0eWxlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6c3R5bGUiKSx0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInR5cGUiLCJ0ZXh0L2NzcyIpLHRoaXMuZGVmcy5hcHBlbmQodGhpcy5jc3NTdHlsZSkpO3ZhciBlPWsodC5kYXRhLHQubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInLmNvbmNhdCh0LmxvYWRlZE5hbWUsJyI7JykrIiBzcmM6IHVybCgiLmNvbmNhdChlLCIpOyB9XG4iKX19LHtrZXk6InNldEZvbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudCxyPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksbj10WzFdO2UuZm9udD1yLCF0aGlzLmVtYmVkRm9udHN8fHIubWlzc2luZ0ZpbGV8fHRoaXMuZW1iZWRkZWRGb250c1tyLmxvYWRlZE5hbWVdfHwodGhpcy5hZGRGb250U3R5bGUociksdGhpcy5lbWJlZGRlZEZvbnRzW3IubG9hZGVkTmFtZV09ciksZS5mb250TWF0cml4PXIuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWDt2YXIgaT0ibm9ybWFsIjtyLmJsYWNrP2k9IjkwMCI6ci5ib2xkJiYoaT0iYm9sZCIpO3ZhciBvPXIuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO248MD8obj0tbixlLmZvbnREaXJlY3Rpb249LTEpOmUuZm9udERpcmVjdGlvbj0xLGUuZm9udFNpemU9bixlLmZvbnRGYW1pbHk9ci5sb2FkZWROYW1lLGUuZm9udFdlaWdodD1pLGUuZm9udFN0eWxlPW8sZS50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5Iix5KC1lLnkpKSxlLnhjb29yZHM9W10sZS55Y29vcmRzPVtdfX0se2tleToiZW5kVGV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuY3VycmVudDtlLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyYmbnVsbCE9PSh0PWUudHh0RWxlbWVudCkmJnZvaWQgMCE9PXQmJnQuaGFzQ2hpbGROb2RlcygpJiYoZS5lbGVtZW50PWUudHh0RWxlbWVudCx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKSl9fSx7a2V5OiJzZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9fSx7a2V5OiJzZXRMaW5lQ2FwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQubGluZUNhcD13W3RdfX0se2tleToic2V0TGluZUpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1BW3RdfX0se2tleToic2V0TWl0ZXJMaW1pdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH19LHtrZXk6InNldFN0cm9rZUFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH19LHtrZXk6InNldFN0cm9rZVJHQkNvbG9yIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpfX0se2tleToic2V0RmlsbEFscGhhIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9fSx7a2V5OiJzZXRGaWxsUkdCQ29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPWEuVXRpbC5tYWtlSGV4Q29sb3IodCxlLHIpLHRoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W10sdGhpcy5jdXJyZW50Lnljb29yZHM9W119fSx7a2V5OiJzZXRTdHJva2VDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9fSx7a2V5OiJzZXRGaWxsQ29sb3JOIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX19LHtrZXk6InNoYWRpbmdGaWxsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZpZXdwb3J0LndpZHRoLHI9dGhpcy52aWV3cG9ydC5oZWlnaHQsbj1hLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCksaT1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbiksbz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAscl0sbikscz1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2UsMF0sbiksbD1hLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Uscl0sbiksdT1NYXRoLm1pbihpWzBdLG9bMF0sc1swXSxsWzBdKSxjPU1hdGgubWluKGlbMV0sb1sxXSxzWzFdLGxbMV0pLGg9TWF0aC5tYXgoaVswXSxvWzBdLHNbMF0sbFswXSksZj1NYXRoLm1heChpWzFdLG9bMV0sc1sxXSxsWzFdKSxkPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixjKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixoLXUpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixmLWMpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpKSx0aGlzLmN1cnJlbnQuZmlsbEFscGhhPDEmJmQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0aGlzLmN1cnJlbnQuZmlsbEFscGhhKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChkKX19LHtrZXk6Il9tYWtlQ29sb3JOX1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiJUaWxpbmdQYXR0ZXJuIj09PXRbMF0/dGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCk6dGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKHQpfX0se2tleToiX21ha2VUaWxpbmdQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10WzFdLHI9dFsyXSxuPXRbM118fGEuSURFTlRJVFlfTUFUUklYLGk9bCh0WzRdLDQpLG89aVswXSx1PWlbMV0sYz1pWzJdLGg9aVszXSxmPXRbNV0sZD10WzZdLHA9dFs3XSx2PSJzaGFkaW5nIi5jb25jYXQoVCsrKSx5PWwoYS5VdGlsLm5vcm1hbGl6ZVJlY3QoW10uY29uY2F0KHMoYS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLHVdLG4pKSxzKGEuVXRpbC5hcHBseVRyYW5zZm9ybShbYyxoXSxuKSkpKSw0KSxtPXlbMF0sZz15WzFdLGI9eVsyXSxfPXlbM10sdz1sKGEuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShuKSwyKSxBPWYqd1swXSxrPWQqd1sxXSxTPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0dGVybiIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLHYpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwicGF0dGVyblVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixBKSxTLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsayksUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiIi5jb25jYXQobSkpLFMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIiIuY29uY2F0KGcpKTt2YXIgeD10aGlzLnN2ZyxFPXRoaXMudHJhbnNmb3JtTWF0cml4LFA9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixDPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcixPPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoYi1tLF8tZyk7aWYodGhpcy5zdmc9Tyx0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLDI9PT1wKXt2YXIgRj1hLlV0aWwubWFrZUhleENvbG9yLmFwcGx5KGEuVXRpbCxzKGUpKTt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPUYsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUZ9cmV0dXJuIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QocikpLHRoaXMuc3ZnPXgsdGhpcy50cmFuc2Zvcm1NYXRyaXg9RSx0aGlzLmN1cnJlbnQuZmlsbENvbG9yPVAsdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPUMsUy5hcHBlbmQoTy5jaGlsZE5vZGVzWzBdKSx0aGlzLmRlZnMuYXBwZW5kKFMpLCJ1cmwoIyIuY29uY2F0KHYsIikiKX19LHtrZXk6Il9tYWtlU2hhZGluZ1BhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKHQpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpLHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnZhciBlLHI9InNoYWRpbmciLmNvbmNhdChUKyspLG49dFszXTtzd2l0Y2godFsxXSl7Y2FzZSJheGlhbCI6dmFyIGk9dFs0XSxvPXRbNV07KGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpKS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsciksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngxIixpWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkxIixpWzFdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIngyIixvWzBdKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsInkyIixvWzFdKTticmVhaztjYXNlInJhZGlhbCI6dmFyIHM9dFs0XSxsPXRbNV0sYz10WzZdLGg9dFs3XTsoZT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJhZGlhbEdyYWRpZW50IikpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxlLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGxbMF0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGxbMV0pLGUuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsaCksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsc1swXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsc1sxXSksZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogIi5jb25jYXQodFsxXSkpfXZhciBmLGQ9dShuKTt0cnl7Zm9yKGQucygpOyEoZj1kLm4oKSkuZG9uZTspe3ZhciBwPWYudmFsdWUsdj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnN0b3AiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9mZnNldCIscFswXSksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdG9wLWNvbG9yIixwWzFdKSxlLmFwcGVuZCh2KX19Y2F0Y2godCl7ZC5lKHQpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHRoaXMuZGVmcy5hcHBlbmQoZSksInVybCgjIi5jb25jYXQociwiKSIpO2Nhc2UiTWVzaCI6cmV0dXJuKDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2giKSxudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBJUiB0eXBlOiAiLmNvbmNhdCh0WzBdKSl9fX0se2tleToic2V0RGFzaCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQsdGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfX0se2tleToiY29uc3RydWN0UGF0aCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuY3VycmVudCxpPW4ueCxvPW4ueSxzPVtdLGw9MCxjPXUodCk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXN3aXRjaCgwfHIudmFsdWUpe2Nhc2UgYS5PUFMucmVjdGFuZ2xlOmk9ZVtsKytdLG89ZVtsKytdO3ZhciBoPWVbbCsrXSxmPWVbbCsrXSxkPWkraCxwPW8rZjtzLnB1c2goIk0iLHkoaSkseShvKSwiTCIseShkKSx5KG8pLCJMIix5KGQpLHkocCksIkwiLHkoaSkseShwKSwiWiIpO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmk9ZVtsKytdLG89ZVtsKytdLHMucHVzaCgiTSIseShpKSx5KG8pKTticmVhaztjYXNlIGEuT1BTLmxpbmVUbzppPWVbbCsrXSxvPWVbbCsrXSxzLnB1c2goIkwiLHkoaSkseShvKSk7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvOmk9ZVtsKzRdLG89ZVtsKzVdLHMucHVzaCgiQyIseShlW2xdKSx5KGVbbCsxXSkseShlW2wrMl0pLHkoZVtsKzNdKSx5KGkpLHkobykpLGwrPTY7YnJlYWs7Y2FzZSBhLk9QUy5jdXJ2ZVRvMjpzLnB1c2goIkMiLHkoaSkseShvKSx5KGVbbF0pLHkoZVtsKzFdKSx5KGVbbCsyXSkseShlW2wrM10pKSxpPWVbbCsyXSxvPWVbbCszXSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY3VydmVUbzM6aT1lW2wrMl0sbz1lW2wrM10scy5wdXNoKCJDIix5KGVbbF0pLHkoZVtsKzFdKSx5KGkpLHkobykseShpKSx5KG8pKSxsKz00O2JyZWFrO2Nhc2UgYS5PUFMuY2xvc2VQYXRoOnMucHVzaCgiWiIpfX1jYXRjaCh0KXtjLmUodCl9ZmluYWxseXtjLmYoKX1zPXMuam9pbigiICIpLG4ucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PWEuT1BTLnJlY3RhbmdsZSYmdFswXSE9PWEuT1BTLm1vdmVUbz9zPW4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrczoobi5wYXRoPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cGF0aCIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCkpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixzKSxuLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGksbyl9fSx7a2V5OiJlbmRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudDtpZih0LnBhdGg9bnVsbCx0aGlzLnBlbmRpbmdDbGlwKWlmKHQuZWxlbWVudCl7dmFyIGU9ImNsaXBwYXRoIi5jb25jYXQoRSsrKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBuPXQuZWxlbWVudC5jbG9uZU5vZGUoITApO2lmKCJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLHIuYXBwZW5kKG4pLHRoaXMuZGVmcy5hcHBlbmQociksdC5hY3RpdmVDbGlwVXJsKXt0LmNsaXBHcm91cD1udWxsO3ZhciBpLGE9dSh0aGlzLmV4dHJhU3RhY2spO3RyeXtmb3IoYS5zKCk7IShpPWEubigpKS5kb25lOylpLnZhbHVlLmNsaXBHcm91cD1udWxsfWNhdGNoKHQpe2EuZSh0KX1maW5hbGx5e2EuZigpfXIuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0LmFjdGl2ZUNsaXBVcmwpfXQuYWN0aXZlQ2xpcFVybD0idXJsKCMiLmNvbmNhdChlLCIpIiksdGhpcy50Z3JwPW51bGx9ZWxzZSB0aGlzLnBlbmRpbmdDbGlwPW51bGx9fSx7a2V5OiJjbGlwIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmdDbGlwPXR9fSx7a2V5OiJjbG9zZVBhdGgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7dmFyIGU9IiIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiksIloiKTt0LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsZSl9fX0se2tleToic2V0TGVhZGluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9fSx7a2V5OiJzZXRUZXh0UmlzZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSaXNlPXR9fSx7a2V5OiJzZXRUZXh0UmVuZGVyaW5nTW9kZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPXR9fSx7a2V5OiJzZXRIU2NhbGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfX0se2tleToic2V0UmVuZGVyaW5nSW50ZW50Iix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJzZXRGbGF0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxyPXUodCk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXt2YXIgbj1sKGUudmFsdWUsMiksaT1uWzBdLG89blsxXTtzd2l0Y2goaSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgobyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKG8pO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4obyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KG8pO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKG9bMF0sb1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhvKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChvKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKG8pO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKG8pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIuY29uY2F0KGkpKX19fWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfX19LHtrZXk6ImZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50O3QuZWxlbWVudCYmKHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0LmZpbGxDb2xvciksdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsdC5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6InN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dC5lbGVtZW50JiYodGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpLHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuZW5kUGF0aCgpKX19LHtrZXk6Il9zZXRTdHJva2VBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPXRoaXMuY3VycmVudCxuPXIuZGFzaEFycmF5OzEhPT1lJiZuLmxlbmd0aD4wJiYobj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUqdH0pKSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLHIuc3Ryb2tlQ29sb3IpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW9wYWNpdHkiLHIuc3Ryb2tlQWxwaGEpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLW1pdGVybGltaXQiLHkoci5taXRlckxpbWl0KSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIsci5saW5lQ2FwKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIsci5saW5lSm9pbiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHkoZSpyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixuLm1hcCh5KS5qb2luKCIgIikpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hvZmZzZXQiLHkoZSpyLmRhc2hQaGFzZSkrInB4Iil9fSx7a2V5OiJlb0ZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsKCl9fSx7a2V5OiJmaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9fSx7a2V5OiJlb0ZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY3VycmVudC5lbGVtZW50KXx8dm9pZCAwPT09dHx8dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9fSx7a2V5OiJjbG9zZVN0cm9rZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuc3Ryb2tlKCl9fSx7a2V5OiJjbG9zZUZpbGxTdHJva2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLmZpbGxTdHJva2UoKX19LHtrZXk6ImNsb3NlRU9GaWxsU3Ryb2tlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX19LHtrZXk6InBhaW50U29saWRDb2xvckltYWdlTWFzayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvciksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9fSx7a2V5OiJwYWludEltYWdlWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodCk7ZT90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpOigwLGEud2FybikoIkRlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAiLmNvbmNhdCh0LCIgaXMgbm90IHJlYWR5IHlldCIpKX19LHtrZXk6InBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPVModCx0aGlzLmZvcmNlRGF0YVNjaGVtYSwhIWUpLGE9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIseShuKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9YSx0aGlzLmNsaXAoIm5vbnplcm8iKTt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmltYWdlIik7by5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGkpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHkoLW4pKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIix5KHIpKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKyJweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwic2NhbGUoIi5jb25jYXQoeSgxL3IpLCIgIikuY29uY2F0KHkoLTEvbiksIikiKSksZT9lLmFwcGVuZChvKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChvKX19LHtrZXk6InBhaW50SW1hZ2VNYXNrWE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRPYmplY3QodC5kYXRhLHQpO2lmKGUuYml0bWFwKSgwLGEud2FybikoInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuIik7ZWxzZXt2YXIgcj10aGlzLmN1cnJlbnQsbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1yLmZpbGxDb2xvcjtyLm1hc2tJZD0ibWFzayIuY29uY2F0KFArKyk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsci5tYXNrSWQpO3ZhciBsPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIseShuKSksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHkoaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJtYXNrIiwidXJsKCMiLmNvbmNhdChyLm1hc2tJZCwiKSIpKSx0aGlzLmRlZnMuYXBwZW5kKHMpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGwpLHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSxzKX19fSx7a2V5OiJwYWludEZvcm1YT2JqZWN0QmVnaW4iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSksZSl7dmFyIHI9ZVsyXS1lWzBdLG49ZVszXS1lWzFdLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlWzBdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGVbMV0pLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHkocikpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KG4pKSx0aGlzLmN1cnJlbnQuZWxlbWVudD1pLHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpfX19LHtrZXk6InBhaW50Rm9ybVhPYmplY3RFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToiX2luaXRpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChyKSx0aGlzLmRlZnM9cjt2YXIgbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLG0odC50cmFuc2Zvcm0pKSxlLmFwcGVuZChuKSx0aGlzLnN2Zz1uLGV9fSx7a2V5OiJfZW5zdXJlQ2xpcEdyb3VwIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXt2YXIgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpLHRoaXMuc3ZnLmFwcGVuZCh0KSx0aGlzLmN1cnJlbnQuY2xpcEdyb3VwPXR9cmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXB9fSx7a2V5OiJfZW5zdXJlVHJhbnNmb3JtR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGdycHx8KHRoaXMudGdycD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmciKSx0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixtKHRoaXMudHJhbnNmb3JtTWF0cml4KSksdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmw/dGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kKHRoaXMudGdycCk6dGhpcy5zdmcuYXBwZW5kKHRoaXMudGdycCkpLHRoaXMudGdycH19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERk5vZGVTdHJlYW09dm9pZCAwO3ZhciBuPXIoMSksaT1yKDE2Mik7ZnVuY3Rpb24gYSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZvKHQsZSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0sbyh0LGUpfWZ1bmN0aW9uIHModCl7dmFyIGU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49bCh0KTtpZihlKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsaSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbih0LGUpe2lmKGUmJigib2JqZWN0Ij09PWYoZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSlyZXR1cm4gZTtpZih2b2lkIDAhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gdH0odCl9KHRoaXMscil9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9LGwodCl9ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIHQ9e30sZT1PYmplY3QucHJvdG90eXBlLHI9ZS5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24odCxlLHIpe3RbZV09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxhPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtsKHt9LCIiKX1jYXRjaCh0KXtsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yfX1mdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgcD9lOnAsbz1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxzPW5ldyBQKGl8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayh0LHIscyl9KSxvfWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9Yzt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe312YXIgbT17fTtsKG0sYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1nJiZnKGcoVChbXSkpKTtiJiZiIT09ZSYmci5jYWxsKGIsYSkmJihtPWIpO3ZhciBfPXkucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdyh0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2wodCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Z1bmN0aW9uIGkobixhLG8scyl7dmFyIGw9aCh0W25dLHQsYSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIHU9bC5hcmcsYz11LnZhbHVlO3JldHVybiBjJiYib2JqZWN0Ij09ZihjKSYmci5jYWxsKGMsIl9fYXdhaXQiKT9lLnJlc29sdmUoYy5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtpKCJuZXh0Iix0LG8scyl9KSwoZnVuY3Rpb24odCl7aSgidGhyb3ciLHQsbyxzKX0pKTplLnJlc29sdmUoYykudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LG8odSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGkoInRocm93Iix0LG8scyl9KSl9cyhsLmFyZyl9dmFyIGE7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG4pe2kodCxyLGUsbil9KSl9cmV0dXJuIGE9YT9hLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWksci5hcmc9YTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPWgodCxlLHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUubWV0aG9kLG49dC5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiBlLmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJnQuaXRlcmF0b3IucmV0dXJuJiYoZS5tZXRob2Q9InJldHVybiIsZS5hcmc9dm9pZCAwLFModCxlKSwidGhyb3ciPT09ZS5tZXRob2QpfHwicmV0dXJuIiE9PXImJihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgaT1oKG4sdC5pdGVyYXRvcixlLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gZS5tZXRob2Q9InRocm93IixlLmFyZz1pLmFyZyxlLmRlbGVnYXRlPW51bGwsZDt2YXIgYT1pLmFyZztyZXR1cm4gYT9hLmRvbmU/KGVbdC5yZXN1bHROYW1lXT1hLnZhbHVlLGUubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1lLm1ldGhvZCYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLGUuZGVsZWdhdGU9bnVsbCxkKTphOihlLm1ldGhvZD0idGhyb3ciLGUuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksZS5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIHgodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gRSh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gUCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gVCh0KXtpZih0KXt2YXIgZT10W2FdO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBuPS0xLGk9ZnVuY3Rpb24gZSgpe2Zvcig7KytuPHQubGVuZ3RoOylpZihyLmNhbGwodCxuKSlyZXR1cm4gZS52YWx1ZT10W25dLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXZvaWQgMCxlLmRvbmU9ITAsZX07cmV0dXJuIGkubmV4dD1pfX1yZXR1cm57bmV4dDpDfX1mdW5jdGlvbiBDKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gdi5wcm90b3R5cGU9eSxuKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSxuKHksImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSx2LmRpc3BsYXlOYW1lPWwoeSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09dnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQseSk6KHQuX19wcm90b19fPXksbCh0LHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sdyhBLnByb3RvdHlwZSksbChBLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1BLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT1Qcm9taXNlKTt2YXIgbz1uZXcgQShjKGUscixuLGkpLGEpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KSl9LHcoXyksbChfLHMsIkdlbmVyYXRvciIpLGwoXyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwoXywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSx0LnZhbHVlcz1ULFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIXQpZm9yKHZhciBlIGluIHRoaXMpInQiPT09ZS5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIGU9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPXQsZS5uZXh0PXIsbiYmKGUubWV0aG9kPSJuZXh0IixlLmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sbz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLGw9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbihhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBuKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgYT1pO2JyZWFrfX1hJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmYS50cnlMb2M8PWUmJmU8PWEuZmluYWxseUxvYyYmKGE9bnVsbCk7dmFyIG89YT9hLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsYT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1hLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxkfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEUociksZH19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztFKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6VCh0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHR9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvKXt0cnl7dmFyIHM9dFthXShvKSxsPXMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcih0KX1zLmRvbmU/ZShsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4saSl7dmFyIGE9dC5hcHBseShlLHIpO2Z1bmN0aW9uIG8odCl7YyhhLG4saSxvLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7YyhhLG4saSxvLHMsInRocm93Iix0KX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGYodCl7cmV0dXJuIGY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGYodCl9ZnVuY3Rpb24gZCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIHAodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwodm9pZCAwLGk9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PWYodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyh0KX0obi5rZXkpLCJzeW1ib2wiPT09ZihpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24geSh0LGUscil7cmV0dXJuIGUmJnYodC5wcm90b3R5cGUsZSksciYmdih0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9dmFyIG09cmVxdWlyZSgiZnMiKSxnPXJlcXVpcmUoImh0dHAiKSxiPXJlcXVpcmUoImh0dHBzIiksXz1yZXF1aXJlKCJ1cmwiKSx3PS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHIsbjtwKHRoaXMsdCksdGhpcy5zb3VyY2U9ZSx0aGlzLnVybD0ocj1lLnVybCwiZmlsZToiPT09KG49Xy5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP18ucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZlLmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHkodCxbe2tleToiX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuX2xvYWRlZCkmJnZvaWQgMCE9PXQ/dDowfX0se2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcy5pc0ZzVXJsP25ldyBUKHRoaXMpOm5ldyBFKHRoaXMpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfX0se2tleToiZ2V0UmFuZ2VSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO3ZhciByPXRoaXMuaXNGc1VybD9uZXcgQyh0aGlzLHQsZSk6bmV3IFAodGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZCh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZOb2RlU3RyZWFtPUE7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3AodGhpcyx0KSx0aGlzLl91cmw9ZS51cmwsdGhpcy5fZG9uZT0hMSx0aGlzLl9zdG9yZWRFcnJvcj1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciByPWUuc291cmNlO3RoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fbG9hZGVkPTAsdGhpcy5fZmlsZW5hbWU9bnVsbCx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX3JhbmdlQ2h1bmtTaXplPXIucmFuZ2VDaHVua1NpemUsdGhpcy5fcmFuZ2VDaHVua1NpemV8fHRoaXMuX2Rpc2FibGVSYW5nZXx8KHRoaXMuX2Rpc2FibGVSYW5nZT0hMCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSFyLmRpc2FibGVSYW5nZSx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faGVhZGVyc0NhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQsdC5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe2UuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlbmQiLChmdW5jdGlvbigpe3QuZGVzdHJveSgpLGUuX2RvbmU9ITAsZS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24odCl7ZS5fZXJyb3IodCl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgbi5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtwKHRoaXMsdCksdGhpcy5fdXJsPWUudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9yZWFkYWJsZVN0cmVhbT1udWxsLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHI9ZS5zb3VyY2U7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXIuZGlzYWJsZVN0cmVhbX12YXIgZTtyZXR1cm4geSh0LFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9aCh1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsaTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjppZighdGhpcy5fZG9uZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe3QubmV4dD02O2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgNjppZihudWxsIT09KHI9dGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpKSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMucmVhZCgpKTtjYXNlIDEwOnJldHVybiB0aGlzLl9sb2FkZWQrPXIubGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLGk9bmV3IFVpbnQ4QXJyYXkocikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTppLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpOnRoaXMuX2Vycm9yKHQpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9zdG9yZWRFcnJvcj10LHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT10LHQub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXtlLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksdC5vbigiZW5kIiwoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKSxlLl9kb25lPSEwLGUuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2UuX2Vycm9yKHQpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19XSksdH0oKTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fXZhciBFPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGE7cCh0aGlzLHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKDQwND09PWUuc3RhdHVzQ29kZSl7dmFyIHI9bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicuY29uY2F0KGEuX3VybCwnIi4nKSk7cmV0dXJuIGEuX3N0b3JlZEVycm9yPXIsdm9pZCBhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3Qocil9YS5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3NldFJlYWRhYmxlU3RyZWFtKGUpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBhLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV19LHM9KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOm8saXNIdHRwOnQuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOmEuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTphLl9kaXNhYmxlUmFuZ2V9KSxsPXMuYWxsb3dSYW5nZVJlcXVlc3RzLHU9cy5zdWdnZXN0ZWRMZW5ndGg7YS5faXNSYW5nZVN1cHBvcnRlZD1sLGEuX2NvbnRlbnRMZW5ndGg9dXx8YS5fY29udGVudExlbmd0aCxhLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKG8pfTtyZXR1cm4oYT1lLmNhbGwodGhpcyx0KSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09YS5fdXJsLnByb3RvY29sP2EuX3JlcXVlc3Q9Zy5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pOmEuX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoYS5fdXJsLHQuaHR0cEhlYWRlcnMpLG8pLGEuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24odCl7YS5fc3RvcmVkRXJyb3I9dCxhLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiB5KHIpfShrKSxQPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxpLGEpe3ZhciBvO2Zvcih2YXIgcyBpbiBwKHRoaXMsciksKG89ZS5jYWxsKHRoaXMsdCkpLl9odHRwSGVhZGVycz17fSx0Lmh0dHBIZWFkZXJzKXt2YXIgbD10Lmh0dHBIZWFkZXJzW3NdO3ZvaWQgMCE9PWwmJihvLl9odHRwSGVhZGVyc1tzXT1sKX1vLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQoaSwiLSIpLmNvbmNhdChhLTEpO3ZhciB1PWZ1bmN0aW9uKHQpe2lmKDQwNCE9PXQuc3RhdHVzQ29kZSlvLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNle3ZhciBlPW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChvLl91cmwsJyIuJykpO28uX3N0b3JlZEVycm9yPWV9fTtyZXR1cm4gby5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1vLl91cmwucHJvdG9jb2w/by5fcmVxdWVzdD1nLnJlcXVlc3QoeChvLl91cmwsby5faHR0cEhlYWRlcnMpLHUpOm8uX3JlcXVlc3Q9Yi5yZXF1ZXN0KHgoby5fdXJsLG8uX2h0dHBIZWFkZXJzKSx1KSxvLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe28uX3N0b3JlZEVycm9yPXR9KSksby5fcmVxdWVzdC5lbmQoKSxvfXJldHVybiB5KHIpfShTKSxUPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCl7dmFyIGk7cCh0aGlzLHIpLGk9ZS5jYWxsKHRoaXMsdCk7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KGkuX3VybC5wYXRoKTtyZXR1cm4gdy50ZXN0KGkuX3VybC5ocmVmKSYmKGE9YS5yZXBsYWNlKC9eXC8vLCIiKSksbS5sc3RhdChhLChmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBuLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLCciLicpKSksaS5fc3RvcmVkRXJyb3I9dCx2b2lkIGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtpLl9jb250ZW50TGVuZ3RoPWUuc2l6ZSxpLl9zZXRSZWFkYWJsZVN0cmVhbShtLmNyZWF0ZVJlYWRTdHJlYW0oYSkpLGkuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxpfXJldHVybiB5KHIpfShrKSxDPWZ1bmN0aW9uKHQpe2Eocix0KTt2YXIgZT1zKHIpO2Z1bmN0aW9uIHIodCxuLGkpe3ZhciBhO3AodGhpcyxyKSxhPWUuY2FsbCh0aGlzLHQpO3ZhciBvPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIHcudGVzdChhLl91cmwuaHJlZikmJihvPW8ucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKG0uY3JlYXRlUmVhZFN0cmVhbShvLHtzdGFydDpuLGVuZDppLTF9KSksYX1yZXR1cm4geShyKX0oUyl9LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6Iik/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrZSsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiLmNvbmNhdCh0LCcpIHdoaWxlIHJldHJpZXZpbmcgUERGICInKS5jb25jYXQoZSwnIi4nKSx0KX0sZS5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXt2YXIgcj0oMCxpLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYoci5pbmNsdWRlcygiJSIpKXRyeXtyPWRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaCh0KXt9aWYoKDAsYS5pc1BkZkZpbGUpKHIpKXJldHVybiByfXJldHVybiBudWxsfSxlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVzcG9uc2VIZWFkZXIscj10LmlzSHR0cCxuPXQucmFuZ2VDaHVua1NpemUsaT10LmRpc2FibGVSYW5nZSxhPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0sbz1wYXJzZUludChlKCJDb250ZW50LUxlbmd0aCIpLDEwKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihvKT8oYS5zdWdnZXN0ZWRMZW5ndGg9byxvPD0yKm58fGl8fCFyfHwiYnl0ZXMiIT09ZSgiQWNjZXB0LVJhbmdlcyIpfHwiaWRlbnRpdHkiIT09KGUoIkNvbnRlbnQtRW5jb2RpbmciKXx8ImlkZW50aXR5Iil8fChhLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMCksYSk6YX0sZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uKHQpe3JldHVybiAyMDA9PT10fHwyMDY9PT10fTt2YXIgbj1yKDEpLGk9cigxNjMpLGE9cigxMzcpfSwodCxlLHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGUuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPSEwLHI9cygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIHUoYT1mKGE9aChhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1zKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KGU9bi5leGVjKHQpKTspe3ZhciBhPWkoZSw0KSxvPWFbMV0sbD1hWzJdLHU9YVszXTtpZigobz1wYXJzZUludChvLDEwKSlpbiByKXtpZigwPT09bylicmVha31lbHNlIHJbb109W2wsdV19Zm9yKHZhciBmPVtdLGQ9MDtkPHIubGVuZ3RoJiZkIGluIHI7KytkKXt2YXIgcD1pKHJbZF0sMiksdj1wWzBdLHk9cFsxXTt5PWMoeSksdiYmKHk9dW5lc2NhcGUoeSksMD09PWQmJih5PWgoeSkpKSxmLnB1c2goeSl9cmV0dXJuIGYuam9pbigiIil9KHQpKXJldHVybiB1KGYocikpO2lmKHI9cygiZmlsZW5hbWUiLCJpIikuZXhlYyh0KSl7dmFyIG89YyhyPXJbMV0pO3JldHVybiB1KG89ZihvKSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiBsKHQscil7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChyKSlyZXR1cm4gcjt0cnl7dmFyIGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT0oMCxuLnN0cmluZ1RvQnl0ZXMpKHIpO3I9aS5kZWNvZGUoYSksZT0hMX1jYXRjaCh0KXt9fXJldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGUmJi9bXHg4MC1ceGZmXS8udGVzdCh0KSYmKHQ9bCgidXRmLTgiLHQpLGUmJih0PWwoImlzby04ODU5LTEiLHQpKSksdH1mdW5jdGlvbiBjKHQpe2lmKHQuc3RhcnRzV2l0aCgnIicpKXtmb3IodmFyIGU9dC5zbGljZSgxKS5zcGxpdCgnXFwiJykscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLmluZGV4T2YoJyInKTstMSE9PW4mJihlW3JdPWVbcl0uc2xpY2UoMCxuKSxlLmxlbmd0aD1yKzEpLGVbcl09ZVtyXS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpfXQ9ZS5qb2luKCciJyl9cmV0dXJuIHR9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIiciKTtyZXR1cm4tMT09PWU/dDpsKHQuc2xpY2UoMCxlKSx0LnNsaWNlKGUrMSkucmVwbGFjZSgvXlteJ10qJy8sIiIpKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LnN0YXJ0c1dpdGgoIj0/Iil8fC9bXHgwMC1ceDE5XHg4MC1ceGZmXS8udGVzdCh0KT90OnQucmVwbGFjZSgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJxIj09PXJ8fCJRIj09PXIpcmV0dXJuIGwoZSxuPShuPW4ucmVwbGFjZSgvXy9nLCIgIikpLnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSwxNikpfSkpKTt0cnl7bj1hdG9iKG4pfWNhdGNoKHQpe31yZXR1cm4gbChlLG4pfSkpfXJldHVybiIifTt2YXIgbj1yKDEpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbD09dD9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixpLGEsbyxzPVtdLGw9ITAsdT0hMTt0cnl7aWYoYT0ocj1yLmNhbGwodCkpLm5leHQsMD09PWUpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0obj1hLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09ZSk7bD0hMCk7fWNhdGNoKHQpe3U9ITAsaT10fWZpbmFsbHl7dHJ5e2lmKCFsJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX0odCxlKXx8ZnVuY3Rpb24odCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGEodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9hKHQsZSk6dm9pZCAwfX0odCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn19LCh0LGUscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUodCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7dSh7fSwiIil9Y2F0Y2godCl7dT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307dShtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1KHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciBsPWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT1sLnR5cGUpe3ZhciB1PWwuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWMoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxvKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXMobC5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT11KHksbCwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LHUodCxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLHUoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLHUoXyxsLCJHZW5lcmF0b3IiKSx1KF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx1KF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGModCl7cmV0dXJuIGM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGModCl9ZnVuY3Rpb24gaCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCh2b2lkIDAsaT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09Yyh0KXx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKHQpfShuLmtleSksInN5bWJvbCI9PT1jKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gZSYmZih0LnByb3RvdHlwZSxlKSxyJiZmKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2godGhpcyx0KSx0aGlzLnVybD1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmci5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndpdGhDcmVkZW50aWFscz1yLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5nZXRYaHI9ci5nZXRYaHJ8fGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdGhpcy5jdXJyWGhySWQ9MCx0aGlzLnBlbmRpbmdSZXF1ZXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBkKHQsW3trZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtiZWdpbjp0LGVuZDplfTtmb3IodmFyIGkgaW4gciluW2ldPXJbaV07cmV0dXJuIHRoaXMucmVxdWVzdChuKX19LHtrZXk6InJlcXVlc3RGdWxsIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHQpfX0se2tleToicmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRYaHIoKSxyPXRoaXMuY3VyclhocklkKyssbj10aGlzLnBlbmRpbmdSZXF1ZXN0c1tyXT17eGhyOmV9O2Zvcih2YXIgaSBpbiBlLm9wZW4oIkdFVCIsdGhpcy51cmwsICEwKSxlLndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgYT10aGlzLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PWEmJmUuc2V0UmVxdWVzdEhlYWRlcihpLGEpfXJldHVybiB0aGlzLmlzSHR0cCYmImJlZ2luImluIHQmJiJlbmQiaW4gdD8oZS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIuY29uY2F0KHQuYmVnaW4sIi0iKS5jb25jYXQodC5lbmQtMSkpLG4uZXhwZWN0ZWRTdGF0dXM9MjA2KTpuLmV4cGVjdGVkU3RhdHVzPTIwMCxlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihyKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSksZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSxlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9dC5vbkRvbmUsbi5vbkVycm9yPXQub25FcnJvcixuLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzLGUuc2VuZChudWxsKSxyfX0se2tleToib25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO24mJihudWxsPT09KHI9bi5vblByb2dyZXNzKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4sZSkpfX0se2tleToib25TdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZihyKXt2YXIgaT1yLnhocjtpZihpLnJlYWR5U3RhdGU+PTImJnIub25IZWFkZXJzUmVjZWl2ZWQmJihyLm9uSGVhZGVyc1JlY2VpdmVkKCksZGVsZXRlIHIub25IZWFkZXJzUmVjZWl2ZWQpLDQ9PT1pLnJlYWR5U3RhdGUmJnQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpaWYoZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLDA9PT1pLnN0YXR1cyYmdGhpcy5pc0h0dHApe3ZhciBhO251bGw9PT0oYT1yLm9uRXJyb3IpfHx2b2lkIDA9PT1hfHxhLmNhbGwocixpLnN0YXR1cyl9ZWxzZXt2YXIgbz1pLnN0YXR1c3x8MjAwO2lmKDIwMD09PW8mJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fG89PT1yLmV4cGVjdGVkU3RhdHVzKXt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9lOigwLG4uc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyfShpKTtpZigyMDY9PT1vKXt2YXIgbD1pLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVJhbmdlIiksdT0vYnl0ZXMgKFxkKyktKFxkKylcLyhcZCspLy5leGVjKGwpO3Iub25Eb25lKHtiZWdpbjpwYXJzZUludCh1WzFdLDEwKSxjaHVuazpzfSl9ZWxzZSBpZihzKXIub25Eb25lKHtiZWdpbjowLGNodW5rOnN9KTtlbHNle3ZhciBjO251bGw9PT0oYz1yLm9uRXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwocixpLnN0YXR1cyl9fWVsc2V7dmFyIGg7bnVsbD09PShoPXIub25FcnJvcil8fHZvaWQgMD09PWh8fGguY2FsbChyLGkuc3RhdHVzKX19fX19LHtrZXk6ImdldFJlcXVlc3RYaHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHJ9fSx7a2V5OiJpc1BlbmRpbmdSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c319LHtrZXk6ImFib3J0UmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO2RlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XSxlLmFib3J0KCl9fV0pLHR9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX21hbmFnZXI9bmV3IHAoZS51cmwse2h0dHBIZWFkZXJzOmUuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSksdGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGQodCxbe2tleToiX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX19LHtrZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB5KHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPW5ldyBtKHRoaXMuX21hbmFnZXIsdCxlKTtyZXR1cm4gci5vbkNsb3NlZD10aGlzLl9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZC5iaW5kKHRoaXMpLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl9mdWxsUmVxdWVzdFJlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpO3ZhciByLG49bCh0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5jYW5jZWwodCl9Y2F0Y2godCl7bi5lKHQpfWZpbmFsbHl7bi5mKCl9fX1dKSx0fSgpO2UuUERGTmV0d29ya1N0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe2godGhpcyx0KSx0aGlzLl9tYW5hZ2VyPWU7dmFyIGk9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ci51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKGkpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9ci5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9ci5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciBlO3JldHVybiBkKHQsW3trZXk6Il9vbkhlYWRlcnNSZWNlaXZlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mdWxsUmVxdWVzdElkLGU9dGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0UmVzcG9uc2VIZWFkZXIodCl9LG49KDAsaS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOnIsaXNIdHRwOnRoaXMuX21hbmFnZXIuaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnRoaXMuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTp0aGlzLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLG89bi5zdWdnZXN0ZWRMZW5ndGg7YSYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApLHRoaXMuX2NvbnRlbnRMZW5ndGg9b3x8dGhpcy5fY29udGVudExlbmd0aCx0aGlzLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHIpLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHQpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX29uRG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodCYmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2godC5jaHVuaykpLHRoaXMuX2RvbmU9ITAsISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9fX0se2tleToiX29uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLGkuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcil9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD0wfX0se2tleToiX29uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjApKXt0Lm5leHQ9NTticmVha31yZXR1cm4gZT10aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKSx0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6ZSxkb25lOiExfSk7Y2FzZSA1OmlmKCF0aGlzLl9kb25lKXt0Lm5leHQ9NzticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiByPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSx0LmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7aCh0aGlzLHQpLHRoaXMuX21hbmFnZXI9ZTt2YXIgaT17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmwsdGhpcy5fcmVxdWVzdElkPWUucmVxdWVzdFJhbmdlKHIsbixpKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMub25DbG9zZWQ9bnVsbH12YXIgZTtyZXR1cm4gZCh0LFt7a2V5OiJfY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMub25DbG9zZWQpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyx0aGlzKX19LHtrZXk6Il9vbkRvbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz1lLHRoaXMuX2RvbmU9ITA7dmFyIHIsbj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfWNhdGNoKHQpe24uZSh0KX1maW5hbGx5e24uZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX2Nsb3NlKCl9fSx7a2V5OiJfb25FcnJvciIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fc3RvcmVkRXJyb3I9KDAsaS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LHRoaXMuX3VybCk7dmFyIGUscj1sKHRoaXMuX3JlcXVlc3RzKTt0cnl7Zm9yKHIucygpOyEoZT1yLm4oKSkuZG9uZTspZS52YWx1ZS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpfWNhdGNoKHQpe3IuZSh0KX1maW5hbGx5e3IuZigpfXRoaXMuX3JlcXVlc3RzLmxlbmd0aD0wLHRoaXMuX3F1ZXVlZENodW5rPW51bGx9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dC5sb2FkZWR9KX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXt0Lm5leHQ9MjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDI6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXt0Lm5leHQ9NjticmVha31yZXR1cm4gZT10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTplLGRvbmU6ITF9KTtjYXNlIDY6aWYoIXRoaXMuX2RvbmUpe3QubmV4dD04O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDg6cmV0dXJuIHI9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLHQuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fZG9uZT0hMDt2YXIgZSxyPWwodGhpcy5fcmVxdWVzdHMpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyllLnZhbHVlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9Y2F0Y2godCl7ci5lKHQpfWZpbmFsbHl7ci5mKCl9dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTAsdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19XSksdH0oKX0sKHQsZSxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDEpLGk9cigxNjIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIHR9O3ZhciB0PXt9LGU9T2JqZWN0LnByb3RvdHlwZSxyPWUuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7Yyh7fSwiIil9Y2F0Y2godCl7Yz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/ZTpwLG89T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscz1uZXcgUChpfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOmsodCxyLHMpfSksb31mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPWg7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9dmFyIG09e307YyhtLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIGc9T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9ZyYmZyhnKFQoW10pKSk7YiYmYiE9PWUmJnIuY2FsbChiLG8pJiYobT1iKTt2YXIgXz15LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0pO2Z1bmN0aW9uIHcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEEodCxlKXtmdW5jdGlvbiBpKG4sYSxvLHMpe3ZhciB1PWYodFtuXSx0LGEpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBjPXUuYXJnLGg9Yy52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWwoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7aSgibmV4dCIsdCxvLHMpfSksKGZ1bmN0aW9uKHQpe2koInRocm93Iix0LG8scyl9KSk6ZS5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBpKCJ0aHJvdyIsdCxvLHMpfSkpfXModS5hcmcpfXZhciBhO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxuKXtpKHQscixlLG4pfSkpfXJldHVybiBhPWE/YS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWkpdGhyb3cgYTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1pLHIuYXJnPWE7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1TKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD1mKHQsZSxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLm1ldGhvZCxuPXQuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gZS5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZ0Lml0ZXJhdG9yLnJldHVybiYmKGUubWV0aG9kPSJyZXR1cm4iLGUuYXJnPXZvaWQgMCxTKHQsZSksInRocm93Ij09PWUubWV0aG9kKXx8InJldHVybiIhPT1yJiYoZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGk9ZihuLHQuaXRlcmF0b3IsZS5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIGUubWV0aG9kPSJ0aHJvdyIsZS5hcmc9aS5hcmcsZS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhlW3QucmVzdWx0TmFtZV09YS52YWx1ZSxlLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ZS5tZXRob2QmJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSxlLmRlbGVnYXRlPW51bGwsZCk6YTooZS5tZXRob2Q9InRocm93IixlLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLGUuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiB4KHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIFAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFQodCl7aWYodCl7dmFyIGU9dFtvXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxpPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT12b2lkIDAsZS5kb25lPSEwLGV9O3JldHVybiBpLm5leHQ9aX19cmV0dXJue25leHQ6Q319ZnVuY3Rpb24gQygpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHYucHJvdG90eXBlPXksbihfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOnksY29uZmlndXJhYmxlOiEwfSksbih5LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksdi5kaXNwbGF5TmFtZT1jKHksdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXZ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LHkpOih0Ll9fcHJvdG9fXz15LGModCx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8pLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LHcoQS5wcm90b3R5cGUpLGMoQS5wcm90b3R5cGUscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9QSx0LmFzeW5jPWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9UHJvbWlzZSk7dmFyIG89bmV3IEEoaChlLHIsbixpKSxhKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSkpfSx3KF8pLGMoXyx1LCJHZW5lcmF0b3IiKSxjKF8sbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKF8sInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHQpLHI9W107Zm9yKHZhciBuIGluIGUpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sdC52YWx1ZXM9VCxQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEUpLCF0KWZvcih2YXIgZSBpbiB0aGlzKSJ0Ij09PWUuY2hhckF0KDApJiZyLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBlPXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz10LGUubmV4dD1yLG4mJihlLm1ldGhvZD0ibmV4dCIsZS5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLG89YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG4oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbihhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIGE9aTticmVha319YSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmEudHJ5TG9jPD1lJiZlPD1hLmZpbmFsbHlMb2MmJihhPW51bGwpO3ZhciBvPWE/YS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGE/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9YS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksZH0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxFKHIpLGR9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGk9bi5hcmc7RShyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlQodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSx0fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEsbyl7dHJ5e3ZhciBzPXRbYV0obyksbD1zLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIHIodCl9cy5kb25lP2UobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBhPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBzKHQpe28oYSxuLGkscyxsLCJuZXh0Iix0KX1mdW5jdGlvbiBsKHQpe28oYSxuLGkscyxsLCJ0aHJvdyIsdCl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBsKHQpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxsKHQpfWZ1bmN0aW9uIHUodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsKHZvaWQgMCxpPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT1sKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcodCl9KG4ua2V5KSwic3ltYm9sIj09PWwoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiBlJiZoKHQucHJvdG90eXBlLGUpLHImJmgodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczp0LHNpZ25hbDpyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczplPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX1mdW5jdGlvbiBwKHQpe3ZhciBlPW5ldyBIZWFkZXJzO2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO3ZvaWQgMCE9PW4mJmUuYXBwZW5kKHIsbil9cmV0dXJuIGV9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2ModGhpcyx0KSx0aGlzLnNvdXJjZT1lLHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZS51cmwpLHRoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJmUuaHR0cEhlYWRlcnN8fHt9LHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1yZXR1cm4gZih0LFt7a2V5OiJfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3JldHVybiBudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5fbG9hZGVkKSYmdm9pZCAwIT09dD90OjB9fSx7a2V5OiJnZXRGdWxsUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIiksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHkodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9bmV3IG0odGhpcyx0LGUpO3JldHVybiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn19LHtrZXk6ImNhbmNlbEFsbFJlcXVlc3RzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpfHx2b2lkIDA9PT1lfHxlLmNhbmNlbCh0KTt2YXIgcixuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1mdW5jdGlvbih0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdSh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3UodCxlKTp2b2lkIDB9fSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe3ImJih0PXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W24rK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9ci5uZXh0KCk7cmV0dXJuIG89dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7cz0hMCxhPXR9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOylyLnZhbHVlLmNhbmNlbCh0KX1jYXRjaCh0KXtuLmUodCl9ZmluYWxseXtuLmYoKX19fV0pLHR9KCk7ZS5QREZGZXRjaFN0cmVhbT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MCx0aGlzLl9maWxlbmFtZT1udWxsO3ZhciBhPWUuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1hLndpdGhDcmVkZW50aWFsc3x8ITEsdGhpcy5fY29udGVudExlbmd0aD1hLmxlbmd0aCx0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2Rpc2FibGVSYW5nZT1hLmRpc2FibGVSYW5nZXx8ITEsdGhpcy5fcmFuZ2VDaHVua1NpemU9YS5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hYS5kaXNhYmxlU3RyZWFtLHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWEuZGlzYWJsZVJhbmdlLHRoaXMuX2hlYWRlcnM9cCh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO3ZhciBvPWEudXJsO2ZldGNoKG8sZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLG8pO3IuX3JlYWRlcj10LmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiB0LmhlYWRlcnMuZ2V0KGUpfSxhPSgwLGkudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjplLGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxzPWEuYWxsb3dSYW5nZVJlcXVlc3RzLGw9YS5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1zLHIuX2NvbnRlbnRMZW5ndGg9bHx8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxpLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGUpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IG4uQWJvcnRFeGNlcHRpb24oIlN0cmVhbWluZyBpcyBkaXNhYmxlZC4iKSl9KSkuY2F0Y2godGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgZTtyZXR1cm4gZih0LFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmlsZW5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maWxlbmFtZX19LHtrZXk6ImNvbnRlbnRMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofX0se2tleToiaXNSYW5nZVN1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9fSx7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfX0se2tleToicmVhZCIsdmFsdWU6KGU9cyhhKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBlLHIsbixpLG87cmV0dXJuIGEoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSA0OmlmKHI9dC5zZW50LG49ci52YWx1ZSwhKGk9ci5kb25lKSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpuLGRvbmU6aX0pO2Nhc2UgOTpyZXR1cm4gdGhpcy5fbG9hZGVkKz1uLmJ5dGVMZW5ndGgsbnVsbD09PShlPXRoaXMub25Qcm9ncmVzcyl8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHtsb2FkZWQ6dGhpcy5fbG9hZGVkLHRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KSxvPW5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcix0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6byxkb25lOiExfSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7bnVsbD09PShlPXRoaXMuX3JlYWRlcil8fHZvaWQgMD09PWV8fGUuY2FuY2VsKHQpLHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX1dKSx0fSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixhKXt2YXIgbz10aGlzO2ModGhpcyx0KSx0aGlzLl9zdHJlYW09ZSx0aGlzLl9yZWFkZXI9bnVsbCx0aGlzLl9sb2FkZWQ9MDt2YXIgcz1lLnNvdXJjZTt0aGlzLl93aXRoQ3JlZGVudGlhbHM9cy53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuX3JlYWRDYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9IXMuZGlzYWJsZVN0cmVhbSx0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLl9oZWFkZXJzPXAodGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKSx0aGlzLl9oZWFkZXJzLmFwcGVuZCgiUmFuZ2UiLCJieXRlcz0iLmNvbmNhdChyLCItIikuY29uY2F0KGEtMSkpO3ZhciBsPXMudXJsO2ZldGNoKGwsZCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbih0KXtpZighKDAsaS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGwpO28uX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKSxvLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIGU7cmV0dXJuIGYodCxbe2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOihlPXMoYSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgZSxyLG4saSxvO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZihyPXQuc2VudCxuPXIudmFsdWUsIShpPXIuZG9uZSkpe3QubmV4dD05O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7dmFsdWU6bixkb25lOml9KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9bi5ieXRlTGVuZ3RoLG51bGw9PT0oZT10aGlzLm9uUHJvZ3Jlc3MpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLG89bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyLHQuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpvLGRvbmU6ITF9KTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZTtudWxsPT09KGU9dGhpcy5fcmVhZGVyKXx8dm9pZCAwPT09ZXx8ZS5jYW5jZWwodCksdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fV0pLHR9KCl9XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdF0ocixyLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyksci5leHBvcnRzfXZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz17fTtyZXR1cm4oKCk9Pnt2YXIgdD1fX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFib3J0RXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5BYm9ydEV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvckxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkFubm90YXRpb25MYXllcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbk1vZGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25Nb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDTWFwQ29tcHJlc3Npb25UeXBlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5DTWFwQ29tcHJlc3Npb25UeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJHbG9iYWxXb3JrZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJJbnZhbGlkUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJNaXNzaW5nUERGRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5NaXNzaW5nUERGRXhjZXB0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJPUFMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk9QU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0YVJhbmdlVHJhbnNwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5QREZEYXRhUmFuZ2VUcmFuc3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERkRhdGVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBERkRhdGVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBERldvcmtlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuUERGV29ya2VyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQYXNzd29yZFJlc3BvbnNlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBlcm1pc3Npb25GbGFnIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QZXJtaXNzaW9uRmxhZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGl4ZWxzUGVySW5jaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUGl4ZWxzUGVySW5jaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlNWR0dyYXBoaWNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5TVkdHcmFwaGljc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVU5TVVBQT1JURURfRkVBVFVSRVMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVXRpbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVXRpbH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiVmVyYm9zaXR5TGV2ZWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlZlcmJvc2l0eUxldmVsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJYZmFMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguWGZhTGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJ1aWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5idWlsZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVWYWxpZEFic29sdXRlVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREb2N1bWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0RG9jdW1lbnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldEZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0RmlsZW5hbWVGcm9tVXJsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRQZGZGaWxlbmFtZUZyb21VcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFBkZkZpbGVuYW1lRnJvbVVybH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0WGZhUGFnZVZpZXdwb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRYZmFQYWdlVmlld3BvcnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzRGF0YVNjaGVtZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uaXNEYXRhU2NoZW1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc1BkZkZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmlzUGRmRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibG9hZFNjcmlwdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZFNjcmlwdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVuZGVyVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5yZW5kZXJUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNldExheWVyRGltZW5zaW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2V0TGF5ZXJEaW1lbnNpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidXBkYXRlVGV4dExheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS51cGRhdGVUZXh0TGF5ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLnZlcnNpb259fSk7dmFyIGU9X193X3BkZmpzX3JlcXVpcmVfXygxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oMTMzKSxuPV9fd19wZGZqc19yZXF1aXJlX18oMTM3KSxpPV9fd19wZGZqc19yZXF1aXJlX18oMTUxKSxhPV9fd19wZGZqc19yZXF1aXJlX18oMTUyKSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTM2KSxzPV9fd19wZGZqc19yZXF1aXJlX18oMTU3KSxsPV9fd19wZGZqc19yZXF1aXJlX18oMTQ0KSx1PV9fd19wZGZqc19yZXF1aXJlX18oMyksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDE2MCksaD1fX3dfcGRmanNfcmVxdWlyZV9fKDE1OSk7aWYodS5pc05vZGVKUyl7dmFyIGY9X193X3BkZmpzX3JlcXVpcmVfXygxNjEpLlBERk5vZGVTdHJlYW07KDAsci5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0KX0pKX1lbHNle3ZhciBkPV9fd19wZGZqc19yZXF1aXJlX18oMTY0KS5QREZOZXR3b3JrU3RyZWFtLHA9X193X3BkZmpzX3JlcXVpcmVfXygxNjUpLlBERkZldGNoU3RyZWFtOygwLHIuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmlzVmFsaWRGZXRjaFVybCkodC51cmwpP25ldyBwKHQpOm5ldyBkKHQpfSkpfX0pKCksX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZmFjdG9yeSgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwZGZqcy1kaXN0L2J1aWxkL3BkZiIsW10sZmFjdG9yeSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09ZmFjdG9yeSgpOnJvb3RbInBkZmpzLWRpc3QvYnVpbGQvcGRmIl09cm9vdC5wZGZqc0xpYj1mYWN0b3J5KCk7",new Promise(((l,m)=>{let d=document.createElement("script");d.src=Z,d.onload=function(){l()},d.onerror=function(){m()},document.body.append(d)}))).then((()=>{if(!window.pdfjsLib||GX)return Promise.reject("window.pdfjsLib未找到");GX=!0,window.pdfjsLib.GlobalWorkerOptions.workerSrc="data:text/javascript;base64,LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgd29ya2VyLmpzLkxJQ0VOU0UudHh0ICovCnZhciBlLHQ7ZT1nbG9iYWxUaGlzLHQ9KCk9PigoKT0+e3ZhciBlPVssKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTM3KSxzPXIoMjAwKSxjPXIoMTk0KSx1PXIoNCksbD1yKDIzMSksZj1yKDIzMik7ZnVuY3Rpb24gaCgpe2g9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTtjKHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoUChbXSkpKTttJiZtIT09dCYmci5jYWxsKG0saSkmJih2PW0pO3ZhciB3PWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YihmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxuKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPWMoZyxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB5KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGcoZSx0KXx8cCgpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHYoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT92KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB2KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24geShlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBiKGUpe3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxiKGUpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWIoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1iKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3codGhpcyxlKSx0aGlzLm5hbWU9dCx0aGlzLnRlcm1pbmF0ZWQ9ITEsdGhpcy5fY2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImZpbmlzaGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZmluaXNoIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudGVybWluYXRlZD0hMH19LHtrZXk6ImVuc3VyZU5vdFRlcm1pbmF0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19XSksZX0oKTt0LldvcmtlclRhc2s9eDt2YXIgTyxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3codGhpcyxlKX1yZXR1cm4gUyhlLG51bGwsW3trZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPSExO3Qub24oInRlc3QiLChmdW5jdGlvbihlKXthfHwoYT0hMCx0LnNlbmQoInRlc3QiLGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksdC5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLHQub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVEb2N1bWVudEhhbmRsZXIodCxyKX0pKX19LHtrZXk6ImNyZWF0ZURvY3VtZW50SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcix2PSExLGI9bnVsbCx3PVtdLGs9KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSxTPWUsTz1TLmRvY0lkLEE9Uy5hcGlWZXJzaW9uLEM9IjMuMi4wIjtpZihBIT09Qyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBUEkgdmVyc2lvbiAiJy5jb25jYXQoQSwnIiBkb2VzIG5vdCBtYXRjaCAnKSsndGhlIFdvcmtlciB2ZXJzaW9uICInLmNvbmNhdChDLCciLicpKTt2YXIgRj1bXTtmb3IodmFyIFAgaW5bXSlGLnB1c2goUCk7aWYoRi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgYEFycmF5LnByb3RvdHlwZWAgY29udGFpbnMgdW5leHBlY3RlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXM6ICIrRi5qb2luKCIsICIpKyI7IHRodXMgYnJlYWtpbmcgZS5nLiBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBvZiBgQXJyYXlgcy4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtKXt2YXIgVD0iVGhlIGJyb3dzZXIvZW52aXJvbm1lbnQgbGFja3MgbmF0aXZlIHN1cHBvcnQgZm9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUgUERGLmpzIGxpYnJhcnkgKGUuZy4gYFJlYWRhYmxlU3RyZWFtYCk7ICI7aWYodS5pc05vZGVKUyl0aHJvdyBuZXcgRXJyb3IoVCsicGxlYXNlIHVzZSBhIGBsZWdhY3lgLWJ1aWxkIGluc3RlYWQuIik7dGhyb3cgbmV3IEVycm9yKFQrInBsZWFzZSB1cGRhdGUgdG8gYSBzdXBwb3J0ZWQgYnJvd3Nlci4iKX12YXIgST1PKyJfd29ya2VyIixFPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKEksTyx0KTtmdW5jdGlvbiBqKCl7aWYodil0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIE0oZSl7dy5wdXNoKGUpfWZ1bmN0aW9uIF8oZSl7ZS5maW5pc2goKTt2YXIgdD13LmluZGV4T2YoZSk7dy5zcGxpY2UodCwxKX1mdW5jdGlvbiBMKGUpe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBSKCl7dmFyIGU7cmV0dXJuIGU9aCgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIG4sYSxpLG8scyxjLHU7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW3RdKTtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCxyLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW3RdKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIsci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2Nhc2UgMTI6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xODticmVha31yZXR1cm4gTShhPW5ldyB4KCJsb2FkWGZhRm9udHMiKSksZS5uZXh0PTE4LFByb21pc2UuYWxsKFtyLmxvYWRYZmFGb250cyhFLGEpLmNhdGNoKChmdW5jdGlvbihlKXt9KSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gXyhhKX0pKSxyLmxvYWRYZmFJbWFnZXMoKV0pO2Nhc2UgMTg6cmV0dXJuIGUubmV4dD0yMCxQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoIm51bVBhZ2VzIiksci5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7Y2FzZSAyMDppZihpPWUuc2VudCxvPWQoaSwyKSxzPW9bMF0sYz1vWzFdLCFuKXtlLm5leHQ9MzA7YnJlYWt9cmV0dXJuIGUubmV4dD0yNyxyLmVuc3VyZURvYygiaHRtbEZvclhmYSIpO2Nhc2UgMjc6ZS50MD1lLnNlbnQsZS5uZXh0PTMxO2JyZWFrO2Nhc2UgMzA6ZS50MD1udWxsO2Nhc2UgMzE6cmV0dXJuIHU9ZS50MCxlLmFicnVwdCgicmV0dXJuIix7bnVtUGFnZXM6cyxmaW5nZXJwcmludHM6YyxodG1sRm9yWGZhOnV9KTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksUj1mdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gRS5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmUoZSwicm90YXRlIiksci5lbnN1cmUoZSwicmVmIiksci5lbnN1cmUoZSwidXNlclVuaXQiKSxyLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1kKGUsNCk7cmV0dXJue3JvdGF0ZTp0WzBdLHJlZjp0WzFdLHVzZXJVbml0OnRbMl0sdmlldzp0WzNdfX0pKX0pKX0pKSxFLm9uKCJHZXRQYWdlSW5kZXgiLChmdW5jdGlvbihlKXt2YXIgdD1hLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxFLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLEUub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksRS5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxFLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksRS5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLEUub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksRS5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLEUub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksRS5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksRS5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4O3JldHVybiByLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpLEUub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKSxFLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKSxFLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSksRS5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxyLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKSxFLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSksRS5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKSxFLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiR2V0QW5ub3RhdGlvbnM6IHBhZ2UgIi5jb25jYXQodCkpO3JldHVybiBNKHIpLGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEUscixuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gXyhyKSxlfSksKGZ1bmN0aW9uKGUpe18ocil9KSl9KSl9KSksRS5vbigiR2V0RmllbGRPYmplY3RzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKX0pKSxFLm9uKCJIYXNKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImhhc0pTQWN0aW9ucyIpfSkpLEUub24oIkdldENhbGN1bGF0aW9uT3JkZXJJZHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImNhbGN1bGF0aW9uT3JkZXJJZHMiKX0pKSxFLm9uKCJTYXZlRG9jdW1lbnQiLChmdW5jdGlvbihlKXt2YXIgdD1lLmlzUHVyZVhmYSxvPWUubnVtUGFnZXMscz1lLmFubm90YXRpb25TdG9yYWdlLHU9ZS5maWxlbmFtZSxsPVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJ4cmVmIiksci5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpXSxmPXQ/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShzKTtpZihmKXt2YXIgaCx2PWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1nKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZik7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIGU9ZChoLnZhbHVlLDIpLHQ9ZVswXSxuPWVbMV07bC5wdXNoKHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgeCgiU2F2ZSAoZWRpdG9yKTogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGUuc2F2ZU5ld0Fubm90YXRpb25zKEUscixuKS5maW5hbGx5KChmdW5jdGlvbigpe18ocil9KSl9KSkpfTtmb3Iodi5zKCk7IShoPXYubigpKS5kb25lOyltKCl9Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9fWlmKHQpbC5wdXNoKHIuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IodmFyIGI9ZnVuY3Rpb24oZSl7bC5wdXNoKHIuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1uZXcgeCgiU2F2ZTogcGFnZSAiLmNvbmNhdChlKSk7cmV0dXJuIHQuc2F2ZShFLHIscykuZmluYWxseSgoZnVuY3Rpb24oKXtfKHIpfSkpfSkpKX0sdz0wO3c8bzt3KyspYih3KTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHIsaT15KHI9ZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fGcocil8fHAoKSxvPWlbMF0scz1pWzFdLGw9aVsyXSxmPWlbM10saD1pWzRdLGQ9aS5zbGljZSg1KSx2PVtdLG09bnVsbDtpZih0KXtpZighKG09ZFswXSkpcmV0dXJuIG8uYnl0ZXN9ZWxzZSBpZigwPT09KHY9ZC5mbGF0KDIpKS5sZW5ndGgpcmV0dXJuIG8uYnl0ZXM7dmFyIGI9bCYmcyBpbnN0YW5jZW9mIGEuRGljdCYmdi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWVkQXBwZWFyYW5jZXN9KSksdz1zIGluc3RhbmNlb2YgYS5EaWN0JiZzLmdldCgiWEZBIil8fG51bGwsaz1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheSh3KSl7Zm9yKHZhciB4PTAsTz13Lmxlbmd0aDt4PE87eCs9MikiZGF0YXNldHMiPT09d1t4XSYmKGs9d1t4KzFdLFM9ITApO251bGw9PT1rJiYoaz1mLmdldE5ld1RlbXBvcmFyeVJlZigpKX1lbHNlIHcmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpO3ZhciBBPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZi50cmFpbGVyKXt2YXIgQz1PYmplY3QuY3JlYXRlKG51bGwpLEY9Zi50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO0YgaW5zdGFuY2VvZiBhLkRpY3QmJkYuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJihDW2VdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpKX0pKSxBPXtyb290UmVmOmYudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmYudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zi5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmYudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOkMsZmlsZUlkczpmLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpoLGZpbGVuYW1lOnV9fXRyeXtyZXR1cm4oMCxjLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOm8uYnl0ZXMseHJlZkluZm86QSxuZXdSZWZzOnYseHJlZjpmLGhhc1hmYTohIXcseGZhRGF0YXNldHNSZWY6ayxoYXNYZmFEYXRhc2V0c0VudHJ5OlMsbmVlZEFwcGVhcmFuY2VzOmIsYWNyb0Zvcm1SZWY6bCxhY3JvRm9ybTpzLHhmYURhdGE6bX0pfWZpbmFsbHl7Zi5yZXNldE5ld1RlbXBvcmFyeVJlZigpfX0pKX0pKSxFLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe3ZhciBhPWUucGFnZUluZGV4O3IuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgeCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtNKGkpO3ZhciBvPWs+PW4uVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkUsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSIpKyIiLmNvbmNhdChEYXRlLm5vdygpLW8sIm1zLCBsZW49IikuY29uY2F0KGUubGVuZ3RoKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9bmV3IHgoIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7TShpKTt2YXIgbz1rPj1uLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDtyLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjpFLHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7XyhpKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrIiIuY29uY2F0KERhdGUubm93KCktbywibXMiKSksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe18oaSksaS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLEUub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLEUub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLEUpfSkpLEUub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxFLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXt2PSEwO3ZhciB0PVtdO2lmKHIpe3IudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3ZhciBhPXIuY2xlYW51cCgpO3QucHVzaChhKSxyPW51bGx9ZWxzZSgwLHMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7YiYmYihuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IodmFyIGk9MCxvPXc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07dC5wdXNoKGMuZmluaXNoZWQpLGMudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7RS5kZXN0cm95KCksRT1udWxsfSkpfSkpLEUub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aigpLEUuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gYShlKXtpZihqKCksZSBpbnN0YW5jZW9mIG4uUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyB4KCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIi5jb25jYXQoZS5jb2RlKSk7TSh0KSxFLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1lLnBhc3N3b3JkO18odCksci51cGRhdGVQYXNzd29yZChuKSxzKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7Xyh0KSxFLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygbi5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVua25vd25FcnJvckV4Y2VwdGlvbj9FLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6RS5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBuLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcygpe2ooKSxMKCExKS50aGVuKHQsKGZ1bmN0aW9uKGUpe2ooKSxlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/ci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtqKCksTCghMCkudGhlbih0LGEpfSkpOmEoZSl9KSl9aigpLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5kYXRhLGE9ZS5wYXNzd29yZCxpPWUuZGlzYWJsZUF1dG9GZXRjaCxzPWUucmFuZ2VDaHVua1NpemUsYz1lLmxlbmd0aCx1PWUuZG9jQmFzZVVybCxsPWUuZW5hYmxlWGZhLGg9ZS5ldmFsdWF0b3JPcHRpb25zLGQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtpZihyKXt0cnl7dD1uZXcgby5Mb2NhbFBkZk1hbmFnZXIoTyxyLGEsRSxoLGwsdSksZC5yZXNvbHZlKHQpfWNhdGNoKGUpe2QucmVqZWN0KGUpfXJldHVybiBkLnByb21pc2V9dmFyIHAsZz1bXTt0cnl7cD1uZXcgZi5QREZXb3JrZXJTdHJlYW0oRSl9Y2F0Y2goZSl7cmV0dXJuIGQucmVqZWN0KGUpLGQucHJvbWlzZX12YXIgdj1wLmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7aT1pfHx2LmlzU3RyZWFtaW5nU3VwcG9ydGVkLHQ9bmV3IG8uTmV0d29ya1BkZk1hbmFnZXIoTyxwLHttc2dIYW5kbGVyOkUscGFzc3dvcmQ6YSxsZW5ndGg6di5jb250ZW50TGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpzfSxoLGwsdSk7Zm9yKHZhciBlPTAscj1nO2U8ci5sZW5ndGg7ZSsrKXt2YXIgbj1yW2VdO3Quc2VuZFByb2dyZXNzaXZlRGF0YShuKX1nPVtdLGQucmVzb2x2ZSh0KSxiPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtkLnJlamVjdChlKSxiPW51bGx9KSk7dmFyIHk9MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7di5yZWFkKCkudGhlbigoZnVuY3Rpb24gZShpKXt2YXIgcz1pLnZhbHVlLGY9aS5kb25lO3RyeXtpZihqKCksZilyZXR1cm4gdHx8ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmFycmF5c1RvQnl0ZXMpKGcpO2MmJmUubGVuZ3RoIT09YyYmKDAsbi53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e3Q9bmV3IG8uTG9jYWxQZGZNYW5hZ2VyKE8sZSxhLEUsaCxsLHUpLGQucmVzb2x2ZSh0KX1jYXRjaChlKXtkLnJlamVjdChlKX1nPVtdfSgpLHZvaWQoYj1udWxsKTt5Kz0oMCxuLmFycmF5Qnl0ZUxlbmd0aCkocyksdi5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8RS5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp5LHRvdGFsOk1hdGgubWF4KHksdi5jb250ZW50TGVuZ3RofHwwKX0pLHQ/dC5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHMpOmcucHVzaChzKSx2LnJlYWQoKS50aGVuKGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7ZC5yZWplY3QoZSksYj1udWxsfSkpLGI9ZnVuY3Rpb24oZSl7cC5jYW5jZWxBbGxSZXF1ZXN0cyhlKX0sZC5wcm9taXNlfShlKS50aGVuKChmdW5jdGlvbihlKXtpZih2KXRocm93IGUudGVybWluYXRlKG5ldyBuLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpLG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIik7KHI9ZSkucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZnVuY3Rpb24oZSl7RS5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocyxhKX0oZSksZT1udWxsfSkpLEl9fSx7a2V5OiJpbml0aWFsaXplRnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBsLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIix0KTtlLnNldHVwKHIsdCksci5zZW5kKCJyZWFkeSIsbnVsbCl9fV0pLGV9KCk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1BLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhdS5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YoTz1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBPJiZBLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGkoZSl9KGUpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGkoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9pKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW8oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1vKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09byhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWQoZSk7aWYodCl7dmFyIGE9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1vKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMCx0LmFycmF5Qnl0ZUxlbmd0aD1QLHQuYXJyYXlzVG9CeXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtmb3IodmFyIHI9MCxuPTA7bjx0O24rKylyKz1QKGVbbl0pO2Zvcih2YXIgYT0wLGk9bmV3IFVpbnQ4QXJyYXkociksbz0wO288dDtvKyspe3ZhciBzPWVbb107cyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChzPSJzdHJpbmciPT10eXBlb2Ygcz9GKHMpOm5ldyBVaW50OEFycmF5KHMpKTt2YXIgYz1zLmJ5dGVMZW5ndGg7aS5zZXQocyxhKSxhKz1jfXJldHVybiBpfSx0LmFzc2VydD1mdW5jdGlvbihlLHQpe2V8fHkodCl9LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXsib2JqZWN0Ij09PW8oZSkmJm51bGwhPT1lJiZ2b2lkIDAhPT1lLmxlbmd0aHx8eSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO3ZhciB0PWUubGVuZ3RoLHI9ODE5MjtpZih0PHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IodmFyIG49W10sYT0wO2E8dDthKz1yKXt2YXIgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9LHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9ITE7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR0bGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSksZS5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UucmVzb2x2ZT1mdW5jdGlvbihlKXt0PSEwLHIoZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3Q9ITAsbihlKX19KSksZX0sdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXt2YXIgbj1lLm1hdGNoKC9cLi9nKTtuJiZuLmxlbmd0aD49MiYmKGU9Imh0dHA6Ly8iLmNvbmNhdChlKSl9aWYoci50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9TShlKX1jYXRjaChlKXt9fXZhciBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBnfSx0LmluZm89ZnVuY3Rpb24oZSl7Zz49cC5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09byhlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWEoZSkpKXtyJiYoZT1yKTt2YXIgbj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxzPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBzPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsbz1lfSxmOmZ1bmN0aW9uKCl7dHJ5e3N8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBvfX19fShlKTt0cnl7Zm9yKGkucygpOyEodD1pLm4oKSkuZG9uZTspe3ZhciBvPShyPXQudmFsdWUsMixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHIpfHxhKHIsMil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkscz1vWzBdLGM9b1sxXTtuW3NdPWN9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBufSx0Lm9iamVjdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH0sdC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoZz1lKX0sdC5zaGFkb3c9bSx0LnN0cmluZzMyPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSx0LnN0cmluZ1RvQnl0ZXM9Rix0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGVbMF0+PSLDryImJigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCkpdHJ5e3ZhciByPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLG49RihlKTtyZXR1cm4gci5kZWNvZGUobil9Y2F0Y2goZSl7dignc3RyaW5nVG9QREZTdHJpbmc6ICInLmNvbmNhdChlLCciLicpKX1mb3IodmFyIGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyl7dmFyIHM9altlLmNoYXJDb2RlQXQoaSldO2EucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiBhLmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGOFN0cmluZz1NLHQudW5yZWFjaGFibGU9eSx0LnV0ZjhTdHJpbmdUb1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sdC53YXJuPXYsZ2xvYmFsVGhpcy5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZHx8KGdsb2JhbFRoaXMuX3BkZmpzQ29tcGF0aWJpbGl0eUNoZWNrZWQ9ITAscigzKSksdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9LHQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn0sdC5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifSx0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifSx0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfSx0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9LHQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX0sdC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSx0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx0LlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifSx0LkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O3ZhciBwPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9cCx0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX0sdC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX0sdC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07dmFyIGc9cC5XQVJOSU5HUztmdW5jdGlvbiB2KGUpe2c+PXAuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24geShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gbShlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWUmJnkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIiksdGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPXJ9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LkJhc2VFeGNlcHRpb249Yjt2YXIgdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJQYXNzd29yZEV4Y2VwdGlvbiIpKS5jb2RlPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5QYXNzd29yZEV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpKS5kZXRhaWxzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249azt2YXIgUz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0LkludmFsaWRQREZFeGNlcHRpb249Uzt2YXIgeD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTt0Lk1pc3NpbmdQREZFeGNlcHRpb249eDt2YXIgTz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHUodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKSkuc3RhdHVzPW4sYX1yZXR1cm4gYyhyKX0oYik7dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Tzt2YXIgQT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRm9ybWF0RXJyb3IiKX1yZXR1cm4gYyhyKX0oYik7dC5Gb3JtYXRFcnJvcj1BO3ZhciBDPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJBYm9ydEV4Y2VwdGlvbiIpfXJldHVybiBjKHIpfShiKTtmdW5jdGlvbiBGKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmeSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09MjU1JmUuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBQKGUpe3JldHVybiB2b2lkIDAhPT1lLmxlbmd0aD9lLmxlbmd0aDp2b2lkIDAhPT1lLmJ5dGVMZW5ndGg/ZS5ieXRlTGVuZ3RoOnZvaWQgeSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9dC5BYm9ydEV4Y2VwdGlvbj1DO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6ImlzTGl0dGxlRW5kaWFuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsKChlPW5ldyBVaW50OEFycmF5KDQpKVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXSkpO3ZhciBlfX0se2tleToiaXNFdmFsU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9fSx7a2V5OiJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX19LHtrZXk6InBsYXRmb3JtIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9tKHRoaXMsInBsYXRmb3JtIix7aXNXaW46ITEsaXNNYWM6ITF9KTptKHRoaXMsInBsYXRmb3JtIix7aXNXaW46bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpfSl9fV0pLGV9KCk7dC5GZWF0dXJlVGVzdD1UO3ZhciBJPW4oQXJyYXkoMjU2KS5rZXlzKCkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX0pKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKX1yZXR1cm4gYyhlLG51bGwsW3trZXk6Im1ha2VIZXhDb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiIjIi5jb25jYXQoSVtlXSkuY29uY2F0KElbdF0pLmNvbmNhdChJW3JdKX19LHtrZXk6InNjYWxlTWluTWF4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO2VbMF0/KGVbMF08MCYmKHI9dFswXSx0WzBdPXRbMV0sdFsxXT1yKSx0WzBdKj1lWzBdLHRbMV0qPWVbMF0sZVszXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbM10sdFszXSo9ZVszXSk6KHI9dFswXSx0WzBdPXRbMl0sdFsyXT1yLHI9dFsxXSx0WzFdPXRbM10sdFszXT1yLGVbMV08MCYmKHI9dFsyXSx0WzJdPXRbM10sdFszXT1yKSx0WzJdKj1lWzFdLHRbM10qPWVbMV0sZVsyXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMl0sdFsxXSo9ZVsyXSksdFswXSs9ZVs0XSx0WzFdKz1lWzRdLHRbMl0rPWVbNV0sdFszXSs9ZVs1XX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX19LHtrZXk6ImFwcGx5VHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX19LHtrZXk6ImFwcGx5SW52ZXJzZVRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX19LHtrZXk6ImdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX19LHtrZXk6ImludmVyc2VUcmFuc2Zvcm0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX19LHtrZXk6InNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydChNYXRoLnBvdyhyK2ksMiktNCoocippLWEqbikpLzIsYz1vK3N8fDEsdT1vLXN8fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQodSldfX0se2tleToibm9ybWFsaXplUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH19LHtrZXk6ImludGVyc2VjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7dmFyIGE9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIGE+aT9udWxsOltyLGEsbixpXX19LHtrZXk6ImJlemllckJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzLGMpe2Zvcih2YXIgdSxsLGYsaCxkLHAsZyx2LHk9W10sbT1bW10sW11dLGI9MDtiPDI7KytiKWlmKDA9PT1iPyhsPTYqZS0xMipyKzYqaSx1PS0zKmUrOSpyLTkqaSszKnMsZj0zKnItMyplKToobD02KnQtMTIqYSs2Km8sdT0tMyp0KzkqYS05Km8rMypjLGY9MyphLTMqdCksTWF0aC5hYnModSk8MWUtMTIpe2lmKE1hdGguYWJzKGwpPDFlLTEyKWNvbnRpbnVlOzA8KGg9LWYvbCkmJmg8MSYmeS5wdXNoKGgpfWVsc2UgZz1sKmwtNCpmKnUsdj1NYXRoLnNxcnQoZyksZzwwfHwoMDwoZD0oLWwrdikvKDIqdSkpJiZkPDEmJnkucHVzaChkKSwwPChwPSgtbC12KS8oMip1KSkmJnA8MSYmeS5wdXNoKHApKTtmb3IodmFyIHcsaz15Lmxlbmd0aCxTPWs7ay0tOyl3PTEtKGg9eVtrXSksbVswXVtrXT13KncqdyplKzMqdyp3KmgqciszKncqaCpoKmkraCpoKmgqcyxtWzFdW2tdPXcqdyp3KnQrMyp3KncqaCphKzMqdypoKmgqbytoKmgqaCpjO3JldHVybiBtWzBdW1NdPWUsbVsxXVtTXT10LG1bMF1bUysxXT1zLG1bMV1bUysxXT1jLG1bMF0ubGVuZ3RoPW1bMV0ubGVuZ3RoPVMrMixbTWF0aC5taW4uYXBwbHkoTWF0aCxuKG1bMF0pKSxNYXRoLm1pbi5hcHBseShNYXRoLG4obVsxXSkpLE1hdGgubWF4LmFwcGx5KE1hdGgsbihtWzBdKSksTWF0aC5tYXguYXBwbHkoTWF0aCxuKG1bMV0pKV19fV0pLGV9KCk7dC5VdGlsPUU7dmFyIGo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCk7IWdsb2JhbFRoaXMuYnRvYSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYnRvYT1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWdsb2JhbFRoaXMuYXRvYiYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuYXRvYj1mdW5jdGlvbihlKXtyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSksIWdsb2JhbFRoaXMuRE9NTWF0cml4JiZuLmlzTm9kZUpTJiYoZ2xvYmFsVGhpcy5ET01NYXRyaXg9cmVxdWlyZSgiY2FudmFzIikuRE9NTWF0cml4KSwhZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSYmbi5pc05vZGVKUyYmKGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW09cmVxdWlyZSgid2ViLXN0cmVhbXMtcG9seWZpbGwvZGlzdC9wb255ZmlsbC5qcyIpLlJlYWRhYmxlU3RyZWFtKSxBcnJheS5wcm90b3R5cGUuYXR8fHIoNSksVWludDhBcnJheS5wcm90b3R5cGUuYXR8fHIoNzkpLGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lfHxyKDg5KX0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzTm9kZUpTPXZvaWQgMDt2YXIgbj0hKCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgcHJvY2Vzcz8idW5kZWZpbmVkIjpyKHByb2Nlc3MpKXx8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7dC5pc05vZGVKUz1ufSwoZSx0LHIpPT57cig2KTt2YXIgbj1yKDc4KTtlLmV4cG9ydHM9bigiQXJyYXkiLCJhdCIpfSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoNDQpLGk9cig2OCksbz1yKDY2KSxzPXIoNzMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1vKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfX0pLHMoImF0Iil9LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig5KS5mLGk9cig0OCksbz1yKDUyKSxzPXIoNDIpLGM9cig2MCksdT1yKDcyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixsLGYsaCxkLHA9ZS50YXJnZXQsZz1lLmdsb2JhbCx2PWUuc3RhdDtpZihyPWc/bjp2P25bcF18fHMocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gdCl7aWYoaD10W2xdLGY9ZS5kb250Q2FsbEdldFNldD8oZD1hKHIsbCkpJiZkLnZhbHVlOnJbbF0sIXUoZz9sOnArKHY/Ii4iOiIjIikrbCxlLmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBoPT10eXBlb2YgZiljb250aW51ZTtjKGgsZil9KGUuc2hhbXx8ZiYmZi5zaGFtKSYmaShoLCJzaGFtIiwhMCksbyhyLGwsaCxlKX19fSxlPT57dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDEyKSxpPXIoMTQpLG89cigxNSkscz1yKDE2KSxjPXIoMjIpLHU9cig0MyksbD1yKDQ2KSxmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/ZjpmdW5jdGlvbihlLHQpe2lmKGU9cyhlKSx0PWModCksbCl0cnl7cmV0dXJuIGYoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBvKCFhKGkuZixlLHQpLGVbdF0pfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSwoZSx0LHIpPT57dmFyIG49cigxMSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTcpLGE9cigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigxMSksaT1yKDE5KSxvPU9iamVjdCxzPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFvKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/cyhlLCIiKTpvKGUpfTpvfSwoZSx0LHIpPT57dmFyIG49cigxMyksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwsbz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPW4oe30udG9TdHJpbmcpLGk9bigiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGEoZSksOCwtMSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwoZSx0LHIpPT57dmFyIG49cigyMyksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLCJzdHJpbmciKTtyZXR1cm4gYSh0KT90OnQrIiJ9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMjcpLG89cigzNCkscz1yKDM3KSxjPXIoMzgpLHU9VHlwZUVycm9yLGw9YygidG9QcmltaXRpdmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighYShlKXx8aShlKSlyZXR1cm4gZTt2YXIgcixjPW8oZSxsKTtpZihjKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLHI9bihjLGUsdCksIWEocil8fGkocikpcmV0dXJuIHI7dGhyb3cgdSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PSJudW1iZXIiKSxzKGUsdCl9fSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1yKDI2KSxpPWEuYWxsO2UuZXhwb3J0cz1hLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl8fGU9PT1pfTpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LChlLHQscik9Pnt2YXIgbj1yKDI2KSxhPW4uYWxsO2UuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LGU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwscj12b2lkIDA9PT10JiZ2b2lkIDAhPT10O2UuZXhwb3J0cz17YWxsOnQsSVNfSFRNTEREQTpyfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjgpLGE9cigyNSksaT1yKDI5KSxvPXIoMzApLHM9T2JqZWN0O2UuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9bigiU3ltYm9sIik7cmV0dXJuIGEodCkmJmkodC5wcm90b3R5cGUscyhlKSl9fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KHI9bltlXSxhKHIpP3I6dm9pZCAwKTpuW2VdJiZuW2VdW3RdO3ZhciByfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1uKHt9LmlzUHJvdG90eXBlT2YpfSwoZSx0LHIpPT57dmFyIG49cigzMSk7ZS5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPXIoMTEpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig4KSxvPXIoMzMpLHM9aS5wcm9jZXNzLGM9aS5EZW5vLHU9cyYmcy52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGw9dSYmdS52ODtsJiYoYT0obj1sLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJm8mJighKG49by5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49by5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSwoZSx0LHIpPT57dmFyIG49cigyOCk7ZS5leHBvcnRzPW4oIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sKGUsdCxyKT0+e3ZhciBuPXIoMzUpLGE9cigyMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMzYpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSxlPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigyNSksaT1yKDI0KSxvPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzO2lmKCJzdHJpbmciPT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShzPW4ocixlKSkpcmV0dXJuIHM7aWYoYShyPWUudmFsdWVPZikmJiFpKHM9bihyLGUpKSlyZXR1cm4gcztpZigic3RyaW5nIiE9PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkocz1uKHIsZSkpKXJldHVybiBzO3Rocm93IG8oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDM5KSxpPXIoNDMpLG89cig0NSkscz1yKDMxKSxjPXIoMzApLHU9YSgid2tzIiksbD1uLlN5bWJvbCxmPWwmJmwuZm9yLGg9Yz9sOmwmJmwud2l0aG91dFNldHRlcnx8bztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWkodSxlKXx8IXMmJiJzdHJpbmciIT10eXBlb2YgdVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7cyYmaShsLGUpP3VbZV09bFtlXTp1W2VdPWMmJmY/Zih0KTpoKHQpfXJldHVybiB1W2VdfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDApLGE9cig0MSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4yNi4xIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIyIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjI2LjEvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sZT0+e2UuZXhwb3J0cz0hMX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDQyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLG89bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9b30sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2EobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoNDQpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDIwKSxhPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEobihlKSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT0wLGk9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitvKCsrYStpLDM2KX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpLGk9cig0Nyk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI0KSxpPW4uZG9jdW1lbnQsbz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDkpLGk9cigxNSk7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhLmYoZSx0LGkoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDQ2KSxpPXIoNTApLG89cig1MSkscz1yKDIyKSxjPVR5cGVFcnJvcix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj0iZW51bWVyYWJsZSIsaD0iY29uZmlndXJhYmxlIixkPSJ3cml0YWJsZSI7dC5mPW4/aT9mdW5jdGlvbihlLHQscil7aWYobyhlKSx0PXModCksbyhyKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gciYmZCBpbiByJiYhcltkXSl7dmFyIG49bChlLHQpO24mJm5bZF0mJihlW3RdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOmggaW4gcj9yW2hdOm5baF0sZW51bWVyYWJsZTpmIGluIHI/cltmXTpuW2ZdLHdyaXRhYmxlOiExfSl9cmV0dXJuIHUoZSx0LHIpfTp1OmZ1bmN0aW9uKGUsdCxyKXtpZihvKGUpLHQ9cyh0KSxvKHIpLGEpdHJ5e3JldHVybiB1KGUsdCxyKX1jYXRjaChlKXt9aWYoImdldCJpbiByfHwic2V0ImluIHIpdGhyb3cgYygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKGVbdF09ci52YWx1ZSksZX19LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoMTEpO2UuZXhwb3J0cz1uJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoNDkpLGk9cig1Myksbz1yKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7c3x8KHM9e30pO3ZhciBjPXMuZW51bWVyYWJsZSx1PXZvaWQgMCE9PXMubmFtZT9zLm5hbWU6dDtpZihuKHIpJiZpKHIsdSxzKSxzLmdsb2JhbCljP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7cy51bnNhZmU/ZVt0XSYmKGM9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31jP2VbdF09cjphLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFzLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohcy5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigyNSksaT1yKDQzKSxvPXIoMTApLHM9cig1NCkuQ09ORklHVVJBQkxFLGM9cig1NSksdT1yKDU2KSxsPXUuZW5mb3JjZSxmPXUuZ2V0LGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1oKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHA9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLGc9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1TdHJpbmcodCkuc2xpY2UoMCw3KSYmKHQ9IlsiK1N0cmluZyh0KS5yZXBsYWNlKC9eU3ltYm9sXCgoW14pXSopXCkvLCIkMSIpKyJdIiksciYmci5nZXR0ZXImJih0PSJnZXQgIit0KSxyJiZyLnNldHRlciYmKHQ9InNldCAiK3QpLCghaShlLCJuYW1lIil8fHMmJmUubmFtZSE9PXQpJiYobz9oKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSxkJiZyJiZpKHIsImFyaXR5IikmJmUubGVuZ3RoIT09ci5hcml0eSYmaChlLCJsZW5ndGgiLHt2YWx1ZTpyLmFyaXR5fSk7dHJ5e3ImJmkociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3Rvcj9vJiZoKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgbj1sKGUpO3JldHVybiBpKG4sInNvdXJjZSIpfHwobi5zb3VyY2U9cC5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSksZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWcoKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykmJmYodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LChlLHQscik9Pnt2YXIgbj1yKDEwKSxhPXIoNDMpLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWEoaSwibmFtZSIpLGM9cyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSx1PXMmJighbnx8biYmbyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTp1fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cigyNSksaT1yKDQxKSxvPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDU3KSxzPXIoOCksYz1yKDI0KSx1PXIoNDgpLGw9cig0MyksZj1yKDQxKSxoPXIoNTgpLGQ9cig1OSkscD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLGc9cy5UeXBlRXJyb3Isdj1zLldlYWtNYXA7aWYob3x8Zi5zdGF0ZSl7dmFyIHk9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IHYpO3kuZ2V0PXkuZ2V0LHkuaGFzPXkuaGFzLHkuc2V0PXkuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZih5LmhhcyhlKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHkuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4geS5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiB5LmhhcyhlKX19ZWxzZXt2YXIgbT1oKCJzdGF0ZSIpO2RbbV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGwoZSxtKSl0aHJvdyBnKHApO3JldHVybiB0LmZhY2FkZT1lLHUoZSxtLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IGcoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDI1KSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoNDUpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig0MyksYT1yKDYxKSxpPXIoOSksbz1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgcz1hKHQpLGM9by5mLHU9aS5mLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGY9c1tsXTtuKGUsZil8fHImJm4ocixmKXx8YyhlLGYsdSh0LGYpKX19fSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDE4KSxpPXIoNjIpLG89cig3MSkscz1yKDUxKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKHMoZSkpLHI9by5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpLGE9cig3MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxOCksYT1yKDQzKSxpPXIoMTYpLG89cig2NCkuaW5kZXhPZixzPXIoNTkpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksdT0wLGw9W107Zm9yKHIgaW4gbikhYShzLHIpJiZhKG4scikmJmMobCxyKTtmb3IoO3QubGVuZ3RoPnU7KWEobixyPXRbdSsrXSkmJih+byhsLHIpfHxjKGwscikpO3JldHVybiBsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9cig2NSksaT1yKDY4KSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIHMsYz1uKHQpLHU9aShjKSxsPWEobyx1KTtpZihlJiZyIT1yKXtmb3IoO3U+bDspaWYoKHM9Y1tsKytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigoZXx8bCBpbiBjKSYmY1tsXT09PXIpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjYpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDExKSxhPXIoMjUpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPWNbcyhlKV07cmV0dXJuIHI9PWx8fHIhPXUmJihhKHQpP24odCk6ISF0KX0scz1vLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9by5kYXRhPXt9LHU9by5OQVRJVkU9Ik4iLGw9by5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPW99LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoNzQpLGk9cig0OSkuZixvPW4oInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7bnVsbD09c1tvXSYmaShzLG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphKG51bGwpfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3Nbb11bZV09ITB9fSwoZSx0LHIpPT57dmFyIG4sYT1yKDUxKSxpPXIoNzUpLG89cig3MCkscz1yKDU5KSxjPXIoNzcpLHU9cig0NyksbD1yKDU4KSxmPSJwcm90b3R5cGUiLGg9InNjcmlwdCIsZD1sKCJJRV9QUk9UTyIpLHA9ZnVuY3Rpb24oKXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2grIj4iK2UrIjwvIitoKyI+In0sdj1mdW5jdGlvbihlKXtlLndyaXRlKGcoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0seT1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7eT0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj92KG4pOih0PXUoImlmcmFtZSIpLHI9ImphdmEiK2grIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShnKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTp2KG4pO2Zvcih2YXIgYT1vLmxlbmd0aDthLS07KWRlbGV0ZSB5W2ZdW29bYV1dO3JldHVybiB5KCl9O3NbZF09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhwW2ZdPWEoZSkscj1uZXcgcCxwW2ZdPW51bGwscltkXT1lKTpyPXkoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSwoZSx0LHIpPT57dmFyIG49cigxMCksYT1yKDUwKSxpPXIoNDkpLG89cig1MSkscz1yKDE2KSxjPXIoNzYpO3QuZj1uJiYhYT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49cyh0KSxhPWModCksdT1hLmxlbmd0aCxsPTA7dT5sOylpLmYoZSxyPWFbbCsrXSxuW3JdKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDYzKSxhPXIoNzApO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LChlLHQscik9Pnt2YXIgbj1yKDI4KTtlLmV4cG9ydHM9bigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sKGUsdCxyKT0+e3ZhciBuPXIoOCksYT1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShuW2VdLnByb3RvdHlwZVt0XSl9fSwoZSx0LHIpPT57cig4MCl9LChlLHQscik9Pnt2YXIgbj1yKDgxKSxhPXIoNjgpLGk9cig2Niksbz1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImF0IiwoZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxyPWEodCksbj1pKGUpLHM9bj49MD9uOnIrbjtyZXR1cm4gczwwfHxzPj1yP3ZvaWQgMDp0W3NdfSkpfSwoZSx0LHIpPT57dmFyIG4sYSxpLG89cig4Mikscz1yKDEwKSxjPXIoOCksdT1yKDI1KSxsPXIoMjQpLGY9cig0MyksaD1yKDgzKSxkPXIoMzYpLHA9cig0OCksZz1yKDUyKSx2PXIoNDkpLmYseT1yKDI5KSxtPXIoODUpLGI9cig4Nyksdz1yKDM4KSxrPXIoNDUpLFM9cig1NikseD1TLmVuZm9yY2UsTz1TLmdldCxBPWMuSW50OEFycmF5LEM9QSYmQS5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LFA9RiYmRi5wcm90b3R5cGUsVD1BJiZtKEEpLEk9QyYmbShDKSxFPU9iamVjdC5wcm90b3R5cGUsaj1jLlR5cGVFcnJvcixNPXcoInRvU3RyaW5nVGFnIiksXz1rKCJUWVBFRF9BUlJBWV9UQUciKSxMPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFI9byYmISFiJiYiT3BlcmEiIT09aChjLm9wZXJhKSxOPSExLEQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxCPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpO2lmKGwodCkpe3ZhciByPU8odCk7cmV0dXJuIHImJmYocixMKT9yW0xdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIGYoRCx0KXx8ZihCLHQpfTtmb3IobiBpbiBEKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/eChpKVtMXT1hOlI9ITE7Zm9yKG4gaW4gQikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoeChpKVtMXT1hKTtpZigoIVJ8fCF1KFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBqKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxSKSlmb3IobiBpbiBEKWNbbl0mJmIoY1tuXSxUKTtpZigoIVJ8fCFJfHxJPT09RSkmJihJPVQucHJvdG90eXBlLFIpKWZvcihuIGluIEQpY1tuXSYmYihjW25dLnByb3RvdHlwZSxJKTtpZihSJiZtKFApIT09SSYmYihQLEkpLHMmJiFmKEksTSkpZm9yKG4gaW4gTj0hMCx2KEksTSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tfXTp2b2lkIDB9fSksRCljW25dJiZwKGNbbl0sXyxuKTtlLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6UixUWVBFRF9BUlJBWV9UQUc6TiYmXyxhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZigkKGUpKXJldHVybiBlO3Rocm93IGooIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJighYnx8eShULGUpKSlyZXR1cm4gZTt0aHJvdyBqKGQoZSkrIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKHMpe2lmKHIpZm9yKHZhciBhIGluIEQpe3ZhciBpPWNbYV07aWYoaSYmZihpLnByb3RvdHlwZSxlKSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW2VdfWNhdGNoKHIpe3RyeXtpLnByb3RvdHlwZVtlXT10fWNhdGNoKGUpe319fUlbZV0mJiFyfHxnKEksZSxyP3Q6UiYmQ1tlXXx8dCxuKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7aWYocyl7aWYoYil7aWYocilmb3IobiBpbiBEKWlmKChhPWNbbl0pJiZmKGEsZSkpdHJ5e2RlbGV0ZSBhW2VdfWNhdGNoKGUpe31pZihUW2VdJiYhcilyZXR1cm47dHJ5e3JldHVybiBnKFQsZSxyP3Q6UiYmVFtlXXx8dCl9Y2F0Y2goZSl7fX1mb3IobiBpbiBEKSEoYT1jW25dKXx8YVtlXSYmIXJ8fGcoYSxlLHQpfX0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOlUsaXNWaWV3OmZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PWgoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGYoRCx0KXx8ZihCLHQpfSxpc1R5cGVkQXJyYXk6JCxUeXBlZEFycmF5OlQsVHlwZWRBcnJheVByb3RvdHlwZTpJfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDI1KSxpPXIoMTkpLG89cigzOCkoInRvU3RyaW5nVGFnIikscz1PYmplY3QsYz0iQXJndW1lbnRzIj09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1uP2k6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1zKGUpLG8pKT9yOmM/aSh0KToiT2JqZWN0Ij09KG49aSh0KSkmJmEodC5jYWxsZWUpPyJBcmd1bWVudHMiOm59fSwoZSx0LHIpPT57dmFyIG49e307bltyKDM4KSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobil9LChlLHQscik9Pnt2YXIgbj1yKDQzKSxhPXIoMjUpLGk9cig0NCksbz1yKDU4KSxzPXIoODYpLGM9bygiSUVfUFJPVE8iKSx1PU9iamVjdCxsPXUucHJvdG90eXBlO2UuZXhwb3J0cz1zP3UuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHU/bDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoMTgpLGE9cig1MSksaT1yKDg4KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwoZSx0LHIpPT57dmFyIG49cigyNSksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIithKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQscik9PntyKDkwKSxyKDk3KSxyKDk5KSxyKDEyMikscigxMjQpO3ZhciBuPXIoMTMzKTtlLmV4cG9ydHM9bi5zdHJ1Y3R1cmVkQ2xvbmV9LChlLHQscik9Pnt2YXIgbj1yKDE2KSxhPXIoNzMpLGk9cig5MSksbz1yKDU2KSxzPXIoNDkpLmYsYz1yKDkyKSx1PXIoOTYpLGw9cig0MCksZj1yKDEwKSxoPSJBcnJheSBJdGVyYXRvciIsZD1vLnNldCxwPW8uZ2V0dGVyRm9yKGgpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7ZCh0aGlzLHt0eXBlOmgsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXAodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx1KHZvaWQgMCwhMCkpOnUoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIGc9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFsJiZmJiYidmFsdWVzIiE9PWcubmFtZSl0cnl7cyhnLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTIpLGk9cig0MCksbz1yKDU0KSxzPXIoMjUpLGM9cig5MyksdT1yKDg1KSxsPXIoODcpLGY9cig5NSksaD1yKDQ4KSxkPXIoNTIpLHA9cigzOCksZz1yKDkxKSx2PXIoOTQpLHk9by5QUk9QRVIsbT1vLkNPTkZJR1VSQUJMRSxiPXYuSXRlcmF0b3JQcm90b3R5cGUsdz12LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsaz1wKCJpdGVyYXRvciIpLFM9ImtleXMiLHg9InZhbHVlcyIsTz0iZW50cmllcyIsQT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLHYsQyl7YyhyLHQsbyk7dmFyIEYsUCxULEk9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJkwpcmV0dXJuIEw7aWYoIXcmJmUgaW4gTSlyZXR1cm4gTVtlXTtzd2l0Y2goZSl7Y2FzZSBTOmNhc2UgeDpjYXNlIE86cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LEU9dCsiIEl0ZXJhdG9yIixqPSExLE09ZS5wcm90b3R5cGUsXz1NW2tdfHxNWyJAQGl0ZXJhdG9yIl18fHAmJk1bcF0sTD0hdyYmX3x8SShwKSxSPSJBcnJheSI9PXQmJk0uZW50cmllc3x8XztpZihSJiYoRj11KFIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJkYubmV4dCYmKGl8fHUoRik9PT1ifHwobD9sKEYsYik6cyhGW2tdKXx8ZChGLGssQSkpLGYoRixFLCEwLCEwKSxpJiYoZ1tFXT1BKSkseSYmcD09eCYmXyYmXy5uYW1lIT09eCYmKCFpJiZtP2goTSwibmFtZSIseCk6KGo9ITAsTD1mdW5jdGlvbigpe3JldHVybiBhKF8sdGhpcyl9KSkscClpZihQPXt2YWx1ZXM6SSh4KSxrZXlzOnY/TDpJKFMpLGVudHJpZXM6SShPKX0sQylmb3IoVCBpbiBQKSh3fHxqfHwhKFQgaW4gTSkpJiZkKE0sVCxQW1RdKTtlbHNlIG4oe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDp3fHxqfSxQKTtyZXR1cm4gaSYmIUN8fE1ba109PT1MfHxkKE0sayxMLHtuYW1lOnB9KSxnW3RdPUwsUH19LChlLHQscik9Pnt2YXIgbj1yKDk0KS5JdGVyYXRvclByb3RvdHlwZSxhPXIoNzQpLGk9cigxNSksbz1yKDk1KSxzPXIoOTEpLGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHUpe3ZhciBsPXQrIiBJdGVyYXRvciI7cmV0dXJuIGUucHJvdG90eXBlPWEobix7bmV4dDppKCshdSxyKX0pLG8oZSxsLCExLCEwKSxzW2xdPWMsZX19LChlLHQscik9Pnt2YXIgbixhLGksbz1yKDExKSxzPXIoMjUpLGM9cigyNCksdT1yKDc0KSxsPXIoODUpLGY9cig1MiksaD1yKDM4KSxkPXIoNDApLHA9aCgiaXRlcmF0b3IiKSxnPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9bChsKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpnPSEwKSwhYyhuKXx8bygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltwXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmQmJihuPXUobikpLHMobltwXSl8fGYobixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmd9fSwoZSx0LHIpPT57dmFyIG49cig0OSkuZixhPXIoNDMpLGk9cigzOCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFhKGUsaSkmJm4oZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDUyKSxpPXIoOTgpO258fGEoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSwoZSx0LHIpPT57dmFyIG49cig4NCksYT1yKDgzKTtlLmV4cG9ydHM9bj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrYSh0aGlzKSsiXSJ9fSwoZSx0LHIpPT57cigxMDApfSwoZSx0LHIpPT57cigxMDEpKCJNYXAiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSkscigxMTkpKX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDgpLGk9cigxOCksbz1yKDcyKSxzPXIoNTIpLGM9cigxMDIpLHU9cigxMDkpLGw9cigxMTYpLGY9cigyNSksaD1yKDIxKSxkPXIoMjQpLHA9cigxMSksZz1yKDExNyksdj1yKDk1KSx5PXIoMTE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtPS0xIT09ZS5pbmRleE9mKCJNYXAiKSxiPS0xIT09ZS5pbmRleE9mKCJXZWFrIiksdz1tPyJzZXQiOiJhZGQiLGs9YVtlXSxTPWsmJmsucHJvdG90eXBlLHg9ayxPPXt9LEE9ZnVuY3Rpb24oZSl7dmFyIHQ9aShTW2VdKTtzKFMsZSwiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShiJiYhZChlKSkmJnQodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4gYiYmIWQoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKGImJiFkKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZihvKGUsIWYoayl8fCEoYnx8Uy5mb3JFYWNoJiYhcCgoZnVuY3Rpb24oKXsobmV3IGspLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PXIuZ2V0Q29uc3RydWN0b3IodCxlLG0sdyksYy5lbmFibGUoKTtlbHNlIGlmKG8oZSwhMCkpe3ZhciBDPW5ldyB4LEY9Q1t3XShiP3t9Oi0wLDEpIT1DLFA9cCgoZnVuY3Rpb24oKXtDLmhhcygxKX0pKSxUPWcoKGZ1bmN0aW9uKGUpe25ldyBrKGUpfSkpLEk9IWImJnAoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBrLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1R8fCgoeD10KChmdW5jdGlvbihlLHQpe2woZSxTKTt2YXIgcj15KG5ldyBrLGUseCk7cmV0dXJuIGgodCl8fHUodCxyW3ddLHt0aGF0OnIsQVNfRU5UUklFUzptfSkscn0pKSkucHJvdG90eXBlPVMsUy5jb25zdHJ1Y3Rvcj14KSwoUHx8SSkmJihBKCJkZWxldGUiKSxBKCJoYXMiKSxtJiZBKCJnZXQiKSksKEl8fEYpJiZBKHcpLGImJlMuY2xlYXImJmRlbGV0ZSBTLmNsZWFyfXJldHVybiBPW2VdPXgsbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDp4IT1rfSxPKSx2KHgsZSksYnx8ci5zZXRTdHJvbmcoeCxlLG0pLHh9fSwoZSx0LHIpPT57dmFyIG49cig3KSxhPXIoMTgpLGk9cig1OSksbz1yKDI0KSxzPXIoNDMpLGM9cig0OSkuZix1PXIoNjIpLGw9cigxMDMpLGY9cigxMDYpLGg9cig0NSksZD1yKDEwOCkscD0hMSxnPWgoIm1ldGEiKSx2PTAseT1mdW5jdGlvbihlKXtjKGUsZyx7dmFsdWU6e29iamVjdElEOiJPIit2Kyssd2Vha0RhdGE6e319fSl9LG09ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXttLmVuYWJsZT1mdW5jdGlvbigpe30scD0hMDt2YXIgZT11LmYsdD1hKFtdLnNwbGljZSkscj17fTtyW2ddPTEsZShyKS5sZW5ndGgmJih1LmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUociksYT0wLGk9bi5sZW5ndGg7YTxpO2ErKylpZihuW2FdPT09Zyl7dChuLGEsMSk7YnJlYWt9cmV0dXJuIG59LG4oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6bC5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFzKGUsZykpe2lmKCFmKGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7eShlKX1yZXR1cm4gZVtnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighcyhlLGcpKXtpZighZihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTt5KGUpfXJldHVybiBlW2ddLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZCYmcCYmZihlKSYmIXMoZSxnKSYmeShlKSxlfX07aVtnXT0hMH0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9cigxNiksaT1yKDYyKS5mLG89cigxMDQpLHM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBvKHMpfX0oZSk6aShhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KSxhPXIoNjgpLGk9cigxMDUpLG89QXJyYXkscz1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYz1hKGUpLHU9bih0LGMpLGw9bih2b2lkIDA9PT1yP2M6cixjKSxmPW8ocyhsLXUsMCkpLGg9MDt1PGw7dSsrLGgrKylpKGYsaCxlW3VdKTtyZXR1cm4gZi5sZW5ndGg9aCxmfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjIpLGE9cig0OSksaT1yKDE1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPW4odCk7byBpbiBlP2EuZihlLG8saSgwLHIpKTplW29dPXJ9fSwoZSx0LHIpPT57dmFyIG49cigxMSksYT1yKDI0KSxpPXIoMTkpLG89cigxMDcpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxjPW4oKGZ1bmN0aW9uKCl7cygxKX0pKTtlLmV4cG9ydHM9Y3x8bz9mdW5jdGlvbihlKXtyZXR1cm4hIWEoZSkmJighb3x8IkFycmF5QnVmZmVyIiE9aShlKSkmJighc3x8cyhlKSl9OnN9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LChlLHQscik9Pnt2YXIgbj1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDExMCksYT1yKDEyKSxpPXIoNTEpLG89cigzNikscz1yKDExMiksYz1yKDY4KSx1PXIoMjkpLGw9cigxMTMpLGY9cigxMTQpLGg9cigxMTUpLGQ9VHlwZUVycm9yLHA9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxnPXAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHYseSxtLGIsdyxrLFMseD1yJiZyLnRoYXQsTz0hKCFyfHwhci5BU19FTlRSSUVTKSxBPSEoIXJ8fCFyLklTX1JFQ09SRCksQz0hKCFyfHwhci5JU19JVEVSQVRPUiksRj0hKCFyfHwhci5JTlRFUlJVUFRFRCksUD1uKHQseCksVD1mdW5jdGlvbihlKXtyZXR1cm4gdiYmaCh2LCJub3JtYWwiLGUpLG5ldyBwKCEwLGUpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBPPyhpKGUpLEY/UChlWzBdLGVbMV0sVCk6UChlWzBdLGVbMV0pKTpGP1AoZSxUKTpQKGUpfTtpZihBKXY9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpdj1lO2Vsc2V7aWYoISh5PWYoZSkpKXRocm93IGQobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHMoeSkpe2ZvcihtPTAsYj1jKGUpO2I+bTttKyspaWYoKHc9SShlW21dKSkmJnUoZyx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfXY9bChlLHkpfWZvcihrPUE/ZS5uZXh0OnYubmV4dDshKFM9YShrLHYpKS5kb25lOyl7dHJ5e3c9SShTLnZhbHVlKX1jYXRjaChlKXtoKHYsInRocm93IixlKX1pZigib2JqZWN0Ij09dHlwZW9mIHcmJncmJnUoZyx3KSlyZXR1cm4gd31yZXR1cm4gbmV3IHAoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoMzUpLGk9cigxMyksbz1uKG4uYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSksdm9pZCAwPT09dD9lOmk/byhlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LChlLHQscik9Pnt2YXIgbj1yKDM4KSxhPXIoOTEpLGk9bigiaXRlcmF0b3IiKSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8b1tpXT09PWUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cigzNSksaT1yKDUxKSxvPXIoMzYpLHM9cigxMTQpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9zKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMobyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoODMpLGE9cigzNCksaT1yKDIxKSxvPXIoOTEpLHM9cigzOCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiBhKGUscyl8fGEoZSwiQEBpdGVyYXRvciIpfHxvW24oZSldfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig1MSksaT1yKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHM7YShlKTt0cnl7aWYoIShvPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe3M9ITAsbz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYocyl0aHJvdyBvO3JldHVybiBhKG8pLHJ9fSwoZSx0LHIpPT57dmFyIG49cigyOSksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobih0LGUpKXJldHVybiBlO3Rocm93IGEoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwoZSx0LHIpPT57dmFyIG49cigzOCkoIml0ZXJhdG9yIiksYT0hMTt0cnl7dmFyIGk9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXthPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFhKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgaT17fTtpW25dPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX19fSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPXIoMjQpLGk9cig4Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbyxzO3JldHVybiBpJiZuKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1yJiZhKHM9by5wcm90b3R5cGUpJiZzIT09ci5wcm90b3R5cGUmJmkoZSxzKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLmYsYT1yKDc0KSxpPXIoMTIwKSxvPXIoMTEwKSxzPXIoMTE2KSxjPXIoMjEpLHU9cigxMDkpLGw9cig5MiksZj1yKDk2KSxoPXIoMTIxKSxkPXIoMTApLHA9cigxMDIpLmZhc3RLZXksZz1yKDU2KSx2PWcuc2V0LHk9Zy5nZXR0ZXJGb3I7ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQscixsKXt2YXIgZj1lKChmdW5jdGlvbihlLG4pe3MoZSxoKSx2KGUse3R5cGU6dCxpbmRleDphKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxkfHwoZS5zaXplPTApLGMobil8fHUobixlW2xdLHt0aGF0OmUsQVNfRU5UUklFUzpyfSl9KSksaD1mLnByb3RvdHlwZSxnPXkodCksbT1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpPWcoZSksbz1iKGUsdCk7cmV0dXJuIG8/by52YWx1ZT1yOihpLmxhc3Q9bz17aW5kZXg6YT1wKHQsITApLGtleTp0LHZhbHVlOnIscHJldmlvdXM6bj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9byksbiYmKG4ubmV4dD1vKSxkP2kuc2l6ZSsrOmUuc2l6ZSsrLCJGIiE9PWEmJihpLmluZGV4W2FdPW8pKSxlfSxiPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1nKGUpLGE9cCh0KTtpZigiRiIhPT1hKXJldHVybiBuLmluZGV4W2FdO2ZvcihyPW4uZmlyc3Q7cjtyPXIubmV4dClpZihyLmtleT09dClyZXR1cm4gcn07cmV0dXJuIGkoaCx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9Zyh0aGlzKSx0PWUuaW5kZXgscj1lLmZpcnN0O3I7KXIucmVtb3ZlZD0hMCxyLnByZXZpb3VzJiYoci5wcmV2aW91cz1yLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgdFtyLmluZGV4XSxyPXIubmV4dDtlLmZpcnN0PWUubGFzdD12b2lkIDAsZD9lLnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1nKHQpLG49Yih0LGUpO2lmKG4pe3ZhciBhPW4ubmV4dCxpPW4ucHJldmlvdXM7ZGVsZXRlIHIuaW5kZXhbbi5pbmRleF0sbi5yZW1vdmVkPSEwLGkmJihpLm5leHQ9YSksYSYmKGEucHJldmlvdXM9aSksci5maXJzdD09biYmKHIuZmlyc3Q9YSksci5sYXN0PT1uJiYoci5sYXN0PWkpLGQ/ci5zaXplLS06dC5zaXplLS19cmV0dXJuISFufSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWcodGhpcyksbj1vKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3Q9dD90Lm5leHQ6ci5maXJzdDspZm9yKG4odC52YWx1ZSx0LmtleSx0aGlzKTt0JiZ0LnJlbW92ZWQ7KXQ9dC5wcmV2aW91c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhYih0aGlzLGUpfX0pLGkoaCxyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLGUpO3JldHVybiB0JiZ0LnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0aGlzLDA9PT1lPzA6ZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG0odGhpcyxlPTA9PT1lPzA6ZSxlKX19KSxkJiZuKGgsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKS5zaXplfX0pLGZ9LHNldFN0cm9uZzpmdW5jdGlvbihlLHQscil7dmFyIG49dCsiIEl0ZXJhdG9yIixhPXkodCksaT15KG4pO2woZSx0LChmdW5jdGlvbihlLHQpe3YodGhpcyx7dHlwZTpuLHRhcmdldDplLHN0YXRlOmEoZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxyPWUubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9cj1yP3IubmV4dDplLnN0YXRlLmZpcnN0KT9mKCJrZXlzIj09dD9yLmtleToidmFsdWVzIj09dD9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KGUudGFyZ2V0PXZvaWQgMCxmKHZvaWQgMCwhMCkpfSkscj8iZW50cmllcyI6InZhbHVlcyIsIXIsITApLGgodCl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LChlLHQscik9Pnt2YXIgbj1yKDI4KSxhPXIoNDkpLGk9cigzOCksbz1yKDEwKSxzPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPWEuZjtvJiZ0JiYhdFtzXSYmcih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LChlLHQscik9PntyKDEyMyl9LChlLHQscik9PntyKDEwMSkoIlNldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxyKDExOSkpfSwoZSx0LHIpPT57dmFyIG4sYT1yKDQwKSxpPXIoNyksbz1yKDgpLHM9cigyOCksYz1yKDE4KSx1PXIoMTEpLGw9cig0NSksZj1yKDI1KSxoPXIoMTI1KSxkPXIoMjEpLHA9cigyNCksZz1yKDI3KSx2PXIoMTA5KSx5PXIoNTEpLG09cig4MyksYj1yKDQzKSx3PXIoMTA1KSxrPXIoNDgpLFM9cig2OCkseD1yKDEyNiksTz1yKDEyNyksQT1yKDEyOSksQz1yKDMyKSxGPXIoMTMwKSxQPXIoMTMxKSxUPXIoMTMyKSxJPW8uT2JqZWN0LEU9by5EYXRlLGo9by5FcnJvcixNPW8uRXZhbEVycm9yLF89by5SYW5nZUVycm9yLEw9by5SZWZlcmVuY2VFcnJvcixSPW8uU3ludGF4RXJyb3IsTj1vLlR5cGVFcnJvcixEPW8uVVJJRXJyb3IsQj1vLlBlcmZvcm1hbmNlTWFyayxVPW8uV2ViQXNzZW1ibHksJD1VJiZVLkNvbXBpbGVFcnJvcnx8aixYPVUmJlUuTGlua0Vycm9yfHxqLEg9VSYmVS5SdW50aW1lRXJyb3J8fGoscT1zKCJET01FeGNlcHRpb24iKSxHPXMoIlNldCIpLHo9cygiTWFwIiksVz16LnByb3RvdHlwZSxWPWMoVy5oYXMpLFk9YyhXLmdldCksSz1jKFcuc2V0KSxKPWMoRy5wcm90b3R5cGUuYWRkKSxaPXMoIk9iamVjdCIsImtleXMiKSxRPWMoW10ucHVzaCksZWU9YygoITApLnZhbHVlT2YpLHRlPWMoMS4udmFsdWVPZikscmU9YygiIi52YWx1ZU9mKSxuZT1jKEUucHJvdG90eXBlLmdldFRpbWUpLGFlPWwoInN0cnVjdHVyZWRDbG9uZSIpLGllPSJEYXRhQ2xvbmVFcnJvciIsb2U9IlRyYW5zZmVycmluZyIsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8uU2V0KFs3XSkscj1lKHQpLG49ZShJKDcpKTtyZXR1cm4gcj09dHx8IXIuaGFzKDcpfHwib2JqZWN0IiE9dHlwZW9mIG58fDchPW59KSkmJmV9LGNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXUoKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IHQsbj1lKHthOnIsYjpyfSk7cmV0dXJuIShuJiZuLmE9PT1uLmImJm4uYSBpbnN0YW5jZW9mIHQmJm4uYS5zdGFjaz09PXIuc3RhY2spfSkpfSx1ZT1vLnN0cnVjdHVyZWRDbG9uZSxsZT1hfHwhY2UodWUsail8fCFjZSh1ZSxxKXx8KG49dWUsISF1KChmdW5jdGlvbigpe3ZhciBlPW4obmV3IG8uQWdncmVnYXRlRXJyb3IoWzFdLGFlLHtjYXVzZTozfSkpO3JldHVybiJBZ2dyZWdhdGVFcnJvciIhPWUubmFtZXx8MSE9ZS5lcnJvcnNbMF18fGUubWVzc2FnZSE9YWV8fDMhPWUuY2F1c2V9KSkpLGZlPSF1ZSYmc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihhZSx7ZGV0YWlsOmV9KS5kZXRhaWx9KSksaGU9c2UodWUpfHxmZSxkZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgcSgiVW5jbG9uZWFibGUgdHlwZTogIitlLGllKX0scGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgcSgodHx8IkNsb25pbmciKSsiIG9mICIrZSsiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lIixpZSl9LGdlPWZ1bmN0aW9uKGUsdCl7aWYoZyhlKSYmZGUoIlN5bWJvbCIpLCFwKGUpKXJldHVybiBlO2lmKHQpe2lmKFYodCxlKSlyZXR1cm4gWSh0LGUpfWVsc2UgdD1uZXcgejt2YXIgcixuLGEsaSxjLHUsbCxoLGQsdix5PW0oZSkseD0hMTtzd2l0Y2goeSl7Y2FzZSJBcnJheSI6YT1bXSx4PSEwO2JyZWFrO2Nhc2UiT2JqZWN0IjphPXt9LHg9ITA7YnJlYWs7Y2FzZSJNYXAiOmE9bmV3IHoseD0hMDticmVhaztjYXNlIlNldCI6YT1uZXcgRyx4PSEwO2JyZWFrO2Nhc2UiUmVnRXhwIjphPW5ldyBSZWdFeHAoZS5zb3VyY2UsTyhlKSk7YnJlYWs7Y2FzZSJFcnJvciI6c3dpdGNoKG49ZS5uYW1lKXtjYXNlIkFnZ3JlZ2F0ZUVycm9yIjphPXMoIkFnZ3JlZ2F0ZUVycm9yIikoW10pO2JyZWFrO2Nhc2UiRXZhbEVycm9yIjphPU0oKTticmVhaztjYXNlIlJhbmdlRXJyb3IiOmE9XygpO2JyZWFrO2Nhc2UiUmVmZXJlbmNlRXJyb3IiOmE9TCgpO2JyZWFrO2Nhc2UiU3ludGF4RXJyb3IiOmE9UigpO2JyZWFrO2Nhc2UiVHlwZUVycm9yIjphPU4oKTticmVhaztjYXNlIlVSSUVycm9yIjphPUQoKTticmVhaztjYXNlIkNvbXBpbGVFcnJvciI6YT0kKCk7YnJlYWs7Y2FzZSJMaW5rRXJyb3IiOmE9WCgpO2JyZWFrO2Nhc2UiUnVudGltZUVycm9yIjphPUgoKTticmVhaztkZWZhdWx0OmE9aigpfXg9ITA7YnJlYWs7Y2FzZSJET01FeGNlcHRpb24iOmE9bmV3IHEoZS5tZXNzYWdlLGUubmFtZSkseD0hMDticmVhaztjYXNlIkRhdGFWaWV3IjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkJpZ0ludDY0QXJyYXkiOmNhc2UiQmlnVWludDY0QXJyYXkiOnI9b1t5XSxwKHIpfHxwZSh5KSxhPW5ldyByKGdlKGUuYnVmZmVyLHQpLGUuYnl0ZU9mZnNldCwiRGF0YVZpZXciPT09eT9lLmJ5dGVMZW5ndGg6ZS5sZW5ndGgpO2JyZWFrO2Nhc2UiRE9NUXVhZCI6dHJ5e2E9bmV3IERPTVF1YWQoZ2UoZS5wMSx0KSxnZShlLnAyLHQpLGdlKGUucDMsdCksZ2UoZS5wNCx0KSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztjYXNlIkZpbGVMaXN0IjppZihpPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9bmV3IG8uRGF0YVRyYW5zZmVyfWNhdGNoKHQpe3RyeXtlPW5ldyBvLkNsaXBib2FyZEV2ZW50KCIiKS5jbGlwYm9hcmREYXRhfWNhdGNoKGUpe319cmV0dXJuIGUmJmUuaXRlbXMmJmUuZmlsZXM/ZTpudWxsfSgpKXtmb3IoYz0wLHU9UyhlKTtjPHU7YysrKWkuaXRlbXMuYWRkKGdlKGVbY10sdCkpO2E9aS5maWxlc31lbHNlIGhlP2E9aGUoZSk6cGUoeSk7YnJlYWs7Y2FzZSJJbWFnZURhdGEiOnRyeXthPW5ldyBJbWFnZURhdGEoZ2UoZS5kYXRhLHQpLGUud2lkdGgsZS5oZWlnaHQse2NvbG9yU3BhY2U6ZS5jb2xvclNwYWNlfSl9Y2F0Y2godCl7aGU/YT1oZShlKTpwZSh5KX1icmVhaztkZWZhdWx0OmlmKGhlKWE9aGUoZSk7ZWxzZSBzd2l0Y2goeSl7Y2FzZSJCaWdJbnQiOmE9SShlLnZhbHVlT2YoKSk7YnJlYWs7Y2FzZSJCb29sZWFuIjphPUkoZWUoZSkpO2JyZWFrO2Nhc2UiTnVtYmVyIjphPUkodGUoZSkpO2JyZWFrO2Nhc2UiU3RyaW5nIjphPUkocmUoZSkpO2JyZWFrO2Nhc2UiRGF0ZSI6YT1uZXcgRShuZShlKSk7YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6KHI9by5EYXRhVmlldyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlfHxwZSh5KTt0cnl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UpYT1lLnNsaWNlKDApO2Vsc2UgZm9yKHU9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKHUpLGQ9bmV3IHIoZSksdj1uZXcgcihhKSxjPTA7Yzx1O2MrKyl2LnNldFVpbnQ4KGMsZC5nZXRVaW50OChjKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHEoIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkIixpZSl9YnJlYWs7Y2FzZSJTaGFyZWRBcnJheUJ1ZmZlciI6YT1lO2JyZWFrO2Nhc2UiQmxvYiI6dHJ5e2E9ZS5zbGljZSgwLGUuc2l6ZSxlLnR5cGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NUG9pbnQiOmNhc2UiRE9NUG9pbnRSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVBvaW50P3IuZnJvbVBvaW50KGUpOm5ldyByKGUueCxlLnksZS56LGUudyl9Y2F0Y2goZSl7cGUoeSl9YnJlYWs7Y2FzZSJET01SZWN0IjpjYXNlIkRPTVJlY3RSZWFkT25seSI6cj1vW3ldO3RyeXthPXIuZnJvbVJlY3Q/ci5mcm9tUmVjdChlKTpuZXcgcihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiRE9NTWF0cml4IjpjYXNlIkRPTU1hdHJpeFJlYWRPbmx5IjpyPW9beV07dHJ5e2E9ci5mcm9tTWF0cml4P3IuZnJvbU1hdHJpeChlKTpuZXcgcihlKX1jYXRjaChlKXtwZSh5KX1icmVhaztjYXNlIkF1ZGlvRGF0YSI6Y2FzZSJWaWRlb0ZyYW1lIjpmKGUuY2xvbmUpfHxwZSh5KTt0cnl7YT1lLmNsb25lKCl9Y2F0Y2goZSl7ZGUoeSl9YnJlYWs7Y2FzZSJGaWxlIjp0cnl7YT1uZXcgRmlsZShbZV0sZS5uYW1lLGUpfWNhdGNoKGUpe3BlKHkpfWJyZWFrO2Nhc2UiQ3JvcFRhcmdldCI6Y2FzZSJDcnlwdG9LZXkiOmNhc2UiRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtRmlsZUhhbmRsZSI6Y2FzZSJGaWxlU3lzdGVtSGFuZGxlIjpjYXNlIkdQVUNvbXBpbGF0aW9uSW5mbyI6Y2FzZSJHUFVDb21waWxhdGlvbk1lc3NhZ2UiOmNhc2UiSW1hZ2VCaXRtYXAiOmNhc2UiUlRDQ2VydGlmaWNhdGUiOmNhc2UiV2ViQXNzZW1ibHkuTW9kdWxlIjpwZSh5KTtkZWZhdWx0OmRlKHkpfX1pZihLKHQsZSxhKSx4KXN3aXRjaCh5KXtjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6Zm9yKGw9WihlKSxjPTAsdT1TKGwpO2M8dTtjKyspaD1sW2NdLHcoYSxoLGdlKGVbaF0sdCkpO2JyZWFrO2Nhc2UiTWFwIjplLmZvckVhY2goKGZ1bmN0aW9uKGUscil7SyhhLGdlKHIsdCksZ2UoZSx0KSl9KSk7YnJlYWs7Y2FzZSJTZXQiOmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLGdlKGUsdCkpfSkpO2JyZWFrO2Nhc2UiRXJyb3IiOmsoYSwibWVzc2FnZSIsZ2UoZS5tZXNzYWdlLHQpKSxiKGUsImNhdXNlIikmJmsoYSwiY2F1c2UiLGdlKGUuY2F1c2UsdCkpLCJBZ2dyZWdhdGVFcnJvciI9PW4mJihhLmVycm9ycz1nZShlLmVycm9ycyx0KSk7Y2FzZSJET01FeGNlcHRpb24iOkEmJmsoYSwic3RhY2siLGdlKGUuc3RhY2ssdCkpfXJldHVybiBhfSx2ZT11ZSYmIXUoKGZ1bmN0aW9uKCl7aWYoUCYmQz45Mnx8VCYmQz45NHx8RiYmQz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD11ZShlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9ZS5ieXRlTGVuZ3RofHw4IT10LmJ5dGVMZW5ndGh9KSk7aSh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsc2hhbTohdmUsZm9yY2VkOmxlfSx7c3RydWN0dXJlZENsb25lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eChhcmd1bWVudHMubGVuZ3RoLDEpPjEmJiFkKGFyZ3VtZW50c1sxXSk/eShhcmd1bWVudHNbMV0pOnZvaWQgMCxuPXI/ci50cmFuc2Zlcjp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW4mJmZ1bmN0aW9uKGUsdCl7aWYoIXAoZSkpdGhyb3cgTigiVHJhbnNmZXIgb3B0aW9uIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSIpO3ZhciByPVtdO3YoZSwoZnVuY3Rpb24oZSl7UShyLHkoZSkpfSkpO3ZhciBuLGEsaSxzLGMsdSxsPTAsZD1TKHIpO2lmKHZlKWZvcihzPXVlKHIse3RyYW5zZmVyOnJ9KTtsPGQ7KUsodCxyW2xdLHNbbCsrXSk7ZWxzZSBmb3IoO2w8ZDspe2lmKG49cltsKytdLFYodCxuKSl0aHJvdyBuZXcgcSgiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSIsaWUpO3N3aXRjaChhPW0obikpe2Nhc2UiSW1hZ2VCaXRtYXAiOmk9by5PZmZzY3JlZW5DYW52YXMsaChpKXx8cGUoYSxvZSk7dHJ5eyh1PW5ldyBpKG4ud2lkdGgsbi5oZWlnaHQpKS5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKG4pLGM9dS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBdWRpb0RhdGEiOmNhc2UiVmlkZW9GcmFtZSI6ZihuLmNsb25lKSYmZihuLmNsb3NlKXx8cGUoYSxvZSk7dHJ5e2M9bi5jbG9uZSgpLG4uY2xvc2UoKX1jYXRjaChlKXt9YnJlYWs7Y2FzZSJBcnJheUJ1ZmZlciI6Y2FzZSJNZWRpYVNvdXJjZUhhbmRsZSI6Y2FzZSJNZXNzYWdlUG9ydCI6Y2FzZSJPZmZzY3JlZW5DYW52YXMiOmNhc2UiUmVhZGFibGVTdHJlYW0iOmNhc2UiVHJhbnNmb3JtU3RyZWFtIjpjYXNlIldyaXRhYmxlU3RyZWFtIjpwZShhLG9lKX1pZih2b2lkIDA9PT1jKXRocm93IG5ldyBxKCJUaGlzIG9iamVjdCBjYW5ub3QgYmUgdHJhbnNmZXJyZWQ6ICIrYSxpZSk7Syh0LG4sYyl9fShuLHQ9bmV3IHopLGdlKGUsdCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDE4KSxhPXIoMTEpLGk9cigyNSksbz1yKDgzKSxzPXIoMjgpLGM9cig1NSksdT1mdW5jdGlvbigpe30sbD1bXSxmPXMoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxoPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGQ9bihoLmV4ZWMpLHA9IWguZXhlYyh1KSxnPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3RyeXtyZXR1cm4gZih1LGwsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx2PWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3N3aXRjaChvKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiBwfHwhIWQoaCxjKGUpKX1jYXRjaChlKXtyZXR1cm4hMH19O3Yuc2hhbT0hMCxlLmV4cG9ydHM9IWZ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGcoZy5jYWxsKXx8IWcoT2JqZWN0KXx8IWcoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT92Omd9LGU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxMiksYT1yKDQzKSxpPXIoMjkpLG89cigxMjgpLHM9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncztyZXR1cm4gdm9pZCAwIT09dHx8ImZsYWdzImluIHN8fGEoZSwiZmxhZ3MiKXx8IWkocyxlKT90Om4obyxlKX19LChlLHQscik9Pnt2YXIgbj1yKDUxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHQ9IiI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPSJkIiksZS5nbG9iYWwmJih0Kz0iZyIpLGUuaWdub3JlQ2FzZSYmKHQrPSJpIiksZS5tdWx0aWxpbmUmJih0Kz0ibSIpLGUuZG90QWxsJiYodCs9InMiKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUudW5pY29kZVNldHMmJih0Kz0idiIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTEpLGE9cigxNSk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLGEoMSw3KSksNyE9PWUuc3RhY2spfSkpfSwoZSx0LHIpPT57dmFyIG49cigxMzEpLGE9cigxMzIpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoOCk7ZS5leHBvcnRzPSJwcm9jZXNzIj09bihhLnByb2Nlc3MpfSwoZSx0LHIpPT57dmFyIG49cig4KTtlLmV4cG9ydHM9bn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtiLl9jbGVhckNhY2hlKCkseS5fY2xlYXJDYWNoZSgpLHguX2NsZWFyQ2FjaGUoKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgYiYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBrJiYodm9pZCAwPT09dHx8QyhlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9Qyx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGkobixvLHMsYyl7dmFyIHU9aChlW25dLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09YShmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodixjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LGMsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gbChlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1wO3ZhciBnPVN5bWJvbCgiRU9GIik7dC5FT0Y9Zzt2YXIgdix5PSh2PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLm5hbWU9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdF18fCh2W3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3Y9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5OYW1lPXk7dmFyIG0sYj0obT1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jbWQ9dH1yZXR1cm4gZChlLG51bGwsW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF18fChtW3RdPW5ldyBlKHQpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe209T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5DbWQ9Yjt2YXIgdz1mdW5jdGlvbigpe3JldHVybiB3fSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2YodGhpcyxlKSx0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9dCx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXd9dmFyIHQscjtyZXR1cm4gZChlLFt7a2V5OiJhc3NpZ25YcmVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWY9ZX19LHtrZXk6InNpemUiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmdm9pZCAwPT09KG49dGhpcy5fbWFwW3RdKSYmdm9pZCAwIT09ciYmKG49dGhpcy5fbWFwW3JdKSxuIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChuLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTpufX0se2tleToiZ2V0QXN5bmMiLHZhbHVlOih0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHZvaWQgMD09PShhPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJnZvaWQgMD09PShhPXRoaXMuX21hcFtyXSkmJnZvaWQgMCE9PW4mJihhPXRoaXMuX21hcFtuXSksIShhIGluc3RhbmNlb2YgeCYmdGhpcy54cmVmKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkscj1mdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPXQuYXBwbHkoZSxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJnZvaWQgMD09PShuPXRoaXMuX21hcFt0XSkmJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSksbiBpbnN0YW5jZW9mIHgmJnRoaXMueHJlZiYmKG49dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKSxBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgYT0wLGk9KG49bi5zbGljZSgpKS5sZW5ndGg7YTxpO2ErKyluW2FdaW5zdGFuY2VvZiB4JiZ0aGlzLnhyZWYmJihuW2FdPXRoaXMueHJlZi5mZXRjaChuW2FdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7cmV0dXJuIG59fSx7a2V5OiJnZXRSYXciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJnZXRLZXlzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfX0se2tleToiZ2V0UmF3VmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9fV0sW3trZXk6ImVtcHR5IixnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZShudWxsKTtyZXR1cm4gdC5zZXQ9ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLHQpfX0se2tleToibWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLG49dC54cmVmLGE9dC5kaWN0QXJyYXkscz10Lm1lcmdlU3ViRGljdHMsYz12b2lkIDAhPT1zJiZzLHU9bmV3IGUobiksbD1uZXcgTWFwLGY9byhhKTt0cnl7Zm9yKGYucygpOyEocj1mLm4oKSkuZG9uZTspe3ZhciBoPXIudmFsdWU7aWYoaCBpbnN0YW5jZW9mIGUpZm9yKHZhciBkPTAscD1PYmplY3QuZW50cmllcyhoLl9tYXApO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1pKHBbZF0sMiksdj1nWzBdLHk9Z1sxXSxtPWwuZ2V0KHYpO2lmKHZvaWQgMD09PW0pbT1bXSxsLnNldCh2LG0pO2Vsc2UgaWYoIShjJiZ5IGluc3RhbmNlb2YgZSkpY29udGludWU7bS5wdXNoKHkpfX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9dmFyIGIsdz1vKGwpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIGs9aShiLnZhbHVlLDIpLFM9a1swXSx4PWtbMV07aWYoMSE9PXgubGVuZ3RoJiZ4WzBdaW5zdGFuY2VvZiBlKXt2YXIgTyxBPW5ldyBlKG4pLEM9byh4KTt0cnl7Zm9yKEMucygpOyEoTz1DLm4oKSkuZG9uZTspZm9yKHZhciBGPU8udmFsdWUsUD0wLFQ9T2JqZWN0LmVudHJpZXMoRi5fbWFwKTtQPFQubGVuZ3RoO1ArKyl7dmFyIEk9aShUW1BdLDIpLEU9SVswXSxqPUlbMV07dm9pZCAwPT09QS5fbWFwW0VdJiYoQS5fbWFwW0VdPWopfX1jYXRjaChlKXtDLmUoZSl9ZmluYWxseXtDLmYoKX1BLnNpemU+MCYmKHUuX21hcFtTXT1BKX1lbHNlIHUuX21hcFtTXT14WzBdfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX1yZXR1cm4gbC5jbGVhcigpLHUuc2l6ZT4wP3U6ZS5lbXB0eX19XSksZX0oKTt0LkRpY3Q9azt2YXIgUyx4PShTPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubnVtPXQsdGhpcy5nZW49cn1yZXR1cm4gZChlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZ2VuPyIiLmNvbmNhdCh0aGlzLm51bSwiUiIpOiIiLmNvbmNhdCh0aGlzLm51bSwiUiIpLmNvbmNhdCh0aGlzLmdlbil9fV0sW3trZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj0wPT09cj8iIi5jb25jYXQodCwiUiIpOiIiLmNvbmNhdCh0LCJSIikuY29uY2F0KHIpO3JldHVybiBTW25dfHwoU1tuXT1uZXcgZSh0LHIpKX19LHtrZXk6Il9jbGVhckNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe1M9T2JqZWN0LmNyZWF0ZShudWxsKX19XSksZX0oKSk7dC5SZWY9eDt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Zih0aGlzLHQpLHRoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9cmV0dXJuIGQodCxbe2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfX0se2tleToicHV0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX19LHtrZXk6U3ltYm9sLml0ZXJhdG9yLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldC5jbGVhcigpfX1dKSx0fSgpO3QuUmVmU2V0PU87dmFyIEE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KSx0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gZCh0LFt7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9fSx7a2V5OiJwdXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9fSx7a2V5OiJwdXRBbGlhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX19XSksdH0oKTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB5JiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9dC5SZWZTZXRDYWNoZT1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMCx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLG89Uyh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihvKWZvcih2YXIgYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXt2YXIgdT1vW2NdO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBsLGY9cyh1LmdldEtleXMoKSk7dHJ5e2ZvcihmLnMoKTshKGw9Zi5uKCkpLmRvbmU7KXt2YXIgaD1sLnZhbHVlLGQ9cltoXTtpZihkKXt2YXIgcD11LmdldFJhdyhoKSxnPW5ldyBpLlJlZlNldCx2PVtdO08ocCxlLHYsZyksdi5sZW5ndGg+MCYmKG5bZF09dil9fX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX19fWlmKHQuaGFzKCJBIikpe3ZhciB5PVtdO08odC5nZXQoIkEiKSxlLHksbmV3IGkuUmVmU2V0KSx5Lmxlbmd0aD4wJiYobi5BY3Rpb249eSl9cmV0dXJuKDAsYS5vYmplY3RTaXplKShuKT4wP246bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWkmJmk8PTEyNil7dmFyIG89QVtpXTtvJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKG8pLHI9bisxKX1lbHNlIHI8biYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsbikpLHQucHVzaCgiJiN4Ii5jb25jYXQoaS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiOyIpKSxpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKyxyPW4rMX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlUERGTmFtZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLG49MCxhPWUubGVuZ3RoO248YTtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTsoaTwzM3x8aT4xMjZ8fDM1PT09aXx8NDA9PT1pfHw0MT09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8NDc9PT1pfHwzNz09PWkpJiYocjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCIjIi5jb25jYXQoaS50b1N0cmluZygxNikpKSxyPW4rMSl9cmV0dXJuIDA9PT10Lmxlbmd0aD9lOihyPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcocixlLmxlbmd0aCkpLHQuam9pbigiIikpfSx0LmVzY2FwZVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWygpXFxcblxyXSkvZywoZnVuY3Rpb24oZSl7cmV0dXJuIlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6IlxcIi5jb25jYXQoZSl9KSl9LHQuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dmFyIHI9ZSgpO2U9bnVsbCx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bis9Mil0W3Jbbl1dPXJbbisxXTtyPW51bGx9cmV0dXJuIHR9fSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Uyx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBNYXAsaT1zKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89KHI9dC52YWx1ZSwyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dCwwOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLDIhPT1zLmxlbmd0aCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0ocil8fGMociwyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PW9bMF0sbD1vWzFdO2lmKHUuc3RhcnRzV2l0aChhLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKXt2YXIgZj1uLmdldChsLnBhZ2VJbmRleCk7Znx8KGY9W10sbi5zZXQobC5wYWdlSW5kZXgsZikpLGYucHVzaChsKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBuLnNpemU+MD9uOm51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9LHQucGFyc2VYRkFQYXRoPWZ1bmN0aW9uKGUpe3ZhciB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWF0Y2godCk7cmV0dXJuIHI/e25hbWU6clsxXSxwb3M6cGFyc2VJbnQoclsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfSx0LnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH0sdC5yZWFkVWludDE2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfSx0LnJlYWRVaW50MzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9LHQucmVjb3ZlckpzVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQmJnRbMl0pe3ZhciByPXRbMl0sbj0hMTtyZXR1cm4idHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYobj0hMCkse3VybDpyLG5ld1dpbmRvdzpufX1yZXR1cm4gbnVsbH0sdC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnN0cmluZ1RvVVRGMTZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXt2YXIgYT1lLmNoYXJDb2RlQXQocik7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxhLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Zm9yKHZhciByLG49W107ZT49MWUzOyllLT0xZTMsbi5wdXNoKCJNIik7cj1lLzEwMHwwLGUlPTEwMCxuLnB1c2goeFtyXSkscj1lLzEwfDAsZSU9MTAsbi5wdXNoKHhbMTArcl0pLG4ucHVzaCh4WzIwK2VdKTt2YXIgaT1uLmpvaW4oIiIpO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfSx0LnZhbGlkYXRlQ1NTRm9udD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgU2V0KFsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiMTAwMCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIl0pLHI9ZS5mb250RmFtaWx5LG49ZS5mb250V2VpZ2h0LGk9ZS5pdGFsaWNBbmdsZTtpZigvXiIuKiIkLy50ZXN0KHIpKXtpZigvW15cXF0iLy50ZXN0KHIuc2xpY2UoMSxyLmxlbmd0aC0xKSkpcmV0dXJuKDAsYS53YXJuKSgnWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAnLmNvbmNhdChyLCIuIikpLCExfWVsc2UgaWYoL14nLionJC8udGVzdChyKSl7aWYoL1teXFxdJy8udGVzdChyLnNsaWNlKDEsci5sZW5ndGgtMSkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogIi5jb25jYXQociwiLiIpKSwhMX1lbHNle3ZhciBvLGM9cyhyLnNwbGl0KC9bIFx0XSsvKSk7dHJ5e2ZvcihjLnMoKTshKG89Yy5uKCkpLmRvbmU7KXt2YXIgdT1vLnZhbHVlO2lmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QodSl8fCEvXltcdy1cXF0rJC8udGVzdCh1KSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogIi5jb25jYXQociwiLiIpKSwhMX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fXZhciBsPW4/bi50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhsKT9sOiI0MDAiO3ZhciBmPXBhcnNlRmxvYXQoaSk7cmV0dXJuIGUuaXRhbGljQW5nbGU9aXNOYU4oZil8fGY8LTkwfHxmPjkwPyIxNCI6aS50b1N0cmluZygpLCEwfTt2YXIgYT1yKDIpLGk9cigxMzQpLG89cigxMzYpO2Z1bmN0aW9uIHMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWMoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxwKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT12KGUpO2lmKHQpe3ZhciBpPXYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gdj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdihlKX10LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO3ZhciB5PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gaCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJNaXNzaW5nIGRhdGEgWyIuY29uY2F0KGUsIiwgIikuY29uY2F0KG4sIikiKSwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKSkuYmVnaW49ZSxhLmVuZD1uLGF9cmV0dXJuIGYocil9KGEuQmFzZUV4Y2VwdGlvbik7dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj15O3ZhciBtPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlBhcnNlckVPRkV4Y2VwdGlvbj1tO3ZhciBiPWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmRW50cnlFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj1iO3ZhciB3PWZ1bmN0aW9uKGUpe2QocixlKTt2YXIgdD1nKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGgodGhpcyxyKSx0LmNhbGwodGhpcyxlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX1yZXR1cm4gZihyKX0oYS5CYXNlRXhjZXB0aW9uKTt0LlhSZWZQYXJzZUV4Y2VwdGlvbj13O3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtoKHRoaXMsZSksdGhpcy5faGFuZGxlcj10LHRoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQsdGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9cmV0dXJuIGYoZSxbe2tleToiX3NlbmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXModGhpcy5fc3RyZWFtVHlwZXMpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl0W2UudmFsdWVdPSEwfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBhLGk9cyh0aGlzLl9mb250VHlwZXMpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOylyW2EudmFsdWVdPSEwfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMuX2hhbmRsZXIuc2VuZCgiRG9jU3RhdHMiLHtzdHJlYW1UeXBlczp0LGZvbnRUeXBlczpyfSl9fSx7a2V5OiJhZGRTdHJlYW1UeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSl8fCh0aGlzLl9zdHJlYW1UeXBlcy5hZGQoZSksdGhpcy5fc2VuZCgpKX19LHtrZXk6ImFkZEZvbnRUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9mb250VHlwZXMuaGFzKGUpfHwodGhpcy5fZm9udFR5cGVzLmFkZChlKSx0aGlzLl9zZW5kKCkpfX1dKSxlfSgpO2Z1bmN0aW9uIFMoZSl7Zm9yKHZhciB0LHI9ZS5kaWN0LG49ZS5rZXksYT1lLmdldEFycmF5LG89dm9pZCAwIT09YSYmYSxzPWUuc3RvcFdoZW5Gb3VuZCxjPXZvaWQgMD09PXN8fHMsdT1uZXcgaS5SZWZTZXQ7ciBpbnN0YW5jZW9mIGkuRGljdCYmKCFyLm9iaklkfHwhdS5oYXMoci5vYmpJZCkpOyl7ci5vYmpJZCYmdS5wdXQoci5vYmpJZCk7dmFyIGw9bz9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWwpe2lmKGMpcmV0dXJuIGw7dHx8KHQ9W10pLHQucHVzaChsKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LkRvY1N0YXRzPWs7dmFyIHg9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBPKGUsdCxyLG4pe2lmKGUpe3ZhciBjPW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuUmVmKXtpZihuLmhhcyhlKSlyZXR1cm47Yz1lLG4ucHV0KGMpLGU9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdSxsPXMoZSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KU8odS52YWx1ZSx0LHIsbil9Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9fWVsc2UgaWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7aWYoKDAsaS5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7dmFyIGYsaD1lLmdldCgiSlMiKTtoIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2Y9aC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIGgmJihmPWgpLChmPWYmJigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKSkmJnIucHVzaChmKX1PKGUuZ2V0UmF3KCJOZXh0IiksdCxyLG4pfWMmJm4ucmVtb3ZlKGMpfX12YXIgQT17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWEoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1hKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YShpKT9pOlN0cmluZyhpKSksbil9dmFyIGl9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9fSx7a2V5OiJpc0VtcHR5IixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfX0se2tleToiaXNEYXRhTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX19LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xIT09ZSYmdGhpcy5wb3MtLSxlfX0se2tleToicGVla0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEJ5dGVzKGUpO3JldHVybiB0aGlzLnBvcy09dC5sZW5ndGgsdH19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fX0se2tleToiZ2V0SW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX19LHtrZXk6ImdldEJ5dGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wb3MrPWV8fDF9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9fSx7a2V5OiJtb3ZlU3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX19LHtrZXk6Im1ha2VTdWJTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJnZXRCYXNlU3RyZWFtcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSkmJmkodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkJhc2VTdHJlYW09b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzgpLGk9cigxMzUpLG89cigxNDApLHM9cigxMzkpO2Z1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWgoZSk7aWYodCl7dmFyIGE9aCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmKGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBmKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGQoZSl9ZnVuY3Rpb24gcCgpe3A9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09ZChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gZyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7ZyhpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7ZyhpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1kKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQmJm0oZS5wcm90b3R5cGUsdCksciYmbShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdyhlKXtpZihlKXt2YXIgdD0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjsoMCxuLndhcm4pKCdJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gbnVsbH12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt5KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJkb2NJZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0lkfX0se2tleToicGFzc3dvcmQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXNzd29yZH19LHtrZXk6ImRvY0Jhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZztyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jQmFzZVVybCIsZS5iYXNlVXJsfHx0aGlzLl9kb2NCYXNlVXJsKX19LHtrZXk6ImVuc3VyZURvYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudCxlLHQpfX0se2tleToiZW5zdXJlWFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC54cmVmLGUsdCl9fSx7a2V5OiJlbnN1cmVDYXRhbG9nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LmNhdGFsb2csZSx0KX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoZSl9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJsb2FkWGZhRm9udHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUZvbnRzKGUsdCl9fSx7a2V5OiJsb2FkWGZhSW1hZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFJbWFnZXMoKX19LHtrZXk6InNlcmlhbGl6ZVhmYURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoZSl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChlKX19LHtrZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDooMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fV0pLGV9KCksUz1mdW5jdGlvbihlKXtjKG4sZSk7dmFyIHQscj1sKG4pO2Z1bmN0aW9uIG4oZSx0LGEsaSxjLHUsbCl7dmFyIGg7eSh0aGlzLG4pLChoPXIuY2FsbCh0aGlzKSkuX2RvY0lkPWUsaC5fcGFzc3dvcmQ9YSxoLl9kb2NCYXNlVXJsPXcobCksaC5tc2dIYW5kbGVyPWksaC5ldmFsdWF0b3JPcHRpb25zPWMsaC5lbmFibGVYZmE9dTt2YXIgZD1uZXcgcy5TdHJlYW0odCk7cmV0dXJuIGgucGRmRG9jdW1lbnQ9bmV3IG8uUERGRG9jdW1lbnQoZihoKSxkKSxoLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZShkKSxofXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJyZXF1ZXN0UmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX1dKSxufShrKTt0LkxvY2FsUGRmTWFuYWdlcj1TO3ZhciB4PWZ1bmN0aW9uKGUpe2MobixlKTt2YXIgdCxyPWwobik7ZnVuY3Rpb24gbihlLHQsaSxzLGMsdSl7dmFyIGw7cmV0dXJuIHkodGhpcyxuKSwobD1yLmNhbGwodGhpcykpLl9kb2NJZD1lLGwuX3Bhc3N3b3JkPWkucGFzc3dvcmQsbC5fZG9jQmFzZVVybD13KHUpLGwubXNnSGFuZGxlcj1pLm1zZ0hhbmRsZXIsbC5ldmFsdWF0b3JPcHRpb25zPXMsbC5lbmFibGVYZmE9YyxsLnN0cmVhbU1hbmFnZXI9bmV3IGEuQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjppLm1zZ0hhbmRsZXIsbGVuZ3RoOmkubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6aS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemV9KSxsLnBkZkRvY3VtZW50PW5ldyBvLlBERkRvY3VtZW50KGYobCksbC5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKSxsfXJldHVybiBiKG4sW3trZXk6ImVuc3VyZSIsdmFsdWU6KHQ9dihwKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE7cmV0dXJuIHAoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2YoYT10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixhKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19XSksbn0oayk7dC5OZXR3b3JrUGRmTWFuYWdlcj14fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciBhPXIoMiksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoKGUpfXZhciBkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9KG8sZSk7dmFyIHQscixhPSh0PW8scj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPWgodCk7aWYocil7dmFyIGk9aCh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIG47cmV0dXJuIGModGhpcyxvKSwobj1hLmNhbGwodGhpcyxuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCkpLmNodW5rU2l6ZT10LG4uX2xvYWRlZENodW5rcz1uZXcgU2V0LG4ubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLG4ubWFuYWdlcj1yLG4ucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsbi5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMSxufXJldHVybiBsKG8sW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfX0se2tleToibnVtQ2h1bmtzTG9hZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9fSx7a2V5OiJpc0RhdGFMb2FkZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfX0se2tleToib25SZWNlaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNodW5rU2l6ZTtpZihlJXIhPTApdGhyb3cgbmV3IEVycm9yKCJCYWQgYmVnaW4gb2Zmc2V0OiAiLmNvbmNhdChlKSk7dmFyIG49ZSt0LmJ5dGVMZW5ndGg7aWYobiVyIT0wJiZuIT09dGhpcy5ieXRlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCYWQgZW5kIG9mZnNldDogIi5jb25jYXQobikpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KHQpLGUpO2Zvcih2YXIgYT1NYXRoLmZsb29yKGUvciksaT1NYXRoLmZsb29yKChuLTEpL3IpKzEsbz1hO288aTsrK28pdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChvKX19LHtrZXk6Im9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgscj1NYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO3RoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGUpLHQpLHQrPWUuYnl0ZUxlbmd0aCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD10O2Zvcih2YXIgbj10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpLGE9cjthPG47KythKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoYSl9fSx7a2V5OiJlbnN1cmVCeXRlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpKXt2YXIgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX19fSx7a2V5OiJlbnN1cmVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGU+PXR8fHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSl7dmFyIHI9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHI+dGhpcy5udW1DaHVua3MpKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKSxhPXI7YTxuOysrYSlpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSl0aHJvdyBuZXcgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX19LHtrZXk6Im5leHRFbXB0eUNodW5rIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5udW1DaHVua3Mscj0wO3I8dDsrK3Ipe3ZhciBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zO3JldHVybiBlPj10aGlzLmVuZD8tMTooZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSx0aGlzLmJ5dGVzW3RoaXMucG9zKytdKX19LHtrZXk6ImdldEJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ5dGVzLHI9dGhpcy5wb3Msbj10aGlzLmVuZDtpZighZSlyZXR1cm4gbj50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLG4pLHQuc3ViYXJyYXkocixuKTt2YXIgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksYT50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShyLGEpLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtmdW5jdGlvbiBuKCl7fXQ/ZSt0PnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGUsZSt0KTplPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyksbi5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNodW5rU2l6ZSx0PU1hdGguZmxvb3IodGhpcy5zdGFydC9lKSxyPU1hdGguZmxvb3IoKHRoaXMuZW5kLTEpL2UpKzEsbj1bXSxhPXQ7YTxyOysrYSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGEpfHxuLnB1c2goYSk7cmV0dXJuIG59LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXNdfX1dKSxvfShyKDEzOSkuU3RyZWFtKTt0LkNodW5rZWRTdHJlYW09ZDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtjKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgZCh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGwoZSxbe2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO24uaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChuLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO3ZhciBpPVtdLG89MDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhjKXt0cnl7aWYoIWMuZG9uZSl7dmFyIHU9Yy52YWx1ZTtyZXR1cm4gaS5wdXNoKHUpLG8rPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKSh1KSxuLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBuLnJlYWQoKS50aGVuKHMsdCl9dmFyIGw9KDAsYS5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZShsKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5jdXJyUmVxdWVzdElkKyssbj1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocixuKTt2YXIgaSxzPW8oZSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO3RoaXMuc3RyZWFtLmhhc0NodW5rKGMpfHxuLmFkZChjKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMD09PW4uc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIHU9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocix1KTt2YXIgbCxmPVtdLGg9byhuKTt0cnl7Zm9yKGgucygpOyEobD1oLm4oKSkuZG9uZTspe3ZhciBkPWwudmFsdWUscD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGQpO3B8fChwPVtdLHRoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZCxwKSxmLnB1c2goZCkpLHAucHVzaChyKX19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9aWYoZi5sZW5ndGg+MCl7dmFyIGcsdj1vKHRoaXMuZ3JvdXBDaHVua3MoZikpO3RyeXtmb3Iodi5zKCk7IShnPXYubigpKS5kb25lOyl7dmFyIHk9Zy52YWx1ZSxtPXkuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxiPU1hdGgubWluKHkuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QobSxiKS5jYXRjaCh1LnJlamVjdCl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfX1yZXR1cm4gdS5wcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXtpZighdC5hYm9ydGVkKXRocm93IGV9KSl9fSx7a2V5OiJnZXRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyZWFtfX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxuPXRoaXMuZ2V0RW5kQ2h1bmsodCksYT1bXSxpPXI7aTxuOysraSlhLnB1c2goaSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9fSx7a2V5OiJyZXF1ZXN0UmFuZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1vKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KWZvcih2YXIgbj1lLnZhbHVlLGE9dGhpcy5nZXRCZWdpbkNodW5rKG4uYmVnaW4pLGk9dGhpcy5nZXRFbmRDaHVuayhuLmVuZCkscz1hO3M8aTsrK3MpdC5pbmNsdWRlcyhzKXx8dC5wdXNoKHMpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXJldHVybiB0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSx0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfX0se2tleToiZ3JvdXBDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPS0xLG49LTEsYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7dmFyIG89ZVthXTtyPDAmJihyPW8pLG4+PTAmJm4rMSE9PW8mJih0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpuKzF9KSxyPW8pLGErMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6cixlbmRDaHVuazpvKzF9KSxuPW99cmV0dXJuIHR9fSx7a2V5OiJvblByb2dyZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9fSx7a2V5OiJvblJlY2VpdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNodW5rLHI9dm9pZCAwPT09ZS5iZWdpbixuPXI/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixhPW4rdC5ieXRlTGVuZ3RoLGk9TWF0aC5mbG9vcihuL3RoaXMuY2h1bmtTaXplKSxzPWE8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoYS90aGlzLmNodW5rU2l6ZSk7cj8odGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPWEpOnRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEobix0KSx0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Zm9yKHZhciBjPVtdLHU9aTt1PHM7Kyt1KXt2YXIgbD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KHUpO2lmKGwpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUodSk7dmFyIGYsaD1vKGwpO3RyeXtmb3IoaC5zKCk7IShmPWgubigpKS5kb25lOyl7dmFyIGQ9Zi52YWx1ZSxwPXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoZCk7cC5oYXModSkmJnAuZGVsZXRlKHUpLHAuc2l6ZT4wfHxjLnB1c2goZCl9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXt2YXIgZztpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXt2YXIgdj10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh2KXx8KGc9dil9ZWxzZSBnPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZykmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2ddKX1mb3IodmFyIHk9MCxtPWM7eTxtLmxlbmd0aDt5Kyspe3ZhciBiPW1beV0sdz10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoYik7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGIpLHcucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO3ZhciB0LHI9byh0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUucmVqZWN0KGUpfWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXB9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cmluZ1N0cmVhbT10LlN0cmVhbT10Lk51bGxTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUsbixhLGkpe3ZhciBzO3JldHVybiBvKHRoaXMsciksKHM9dC5jYWxsKHRoaXMpKS5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHMuc3RhcnQ9bnx8MCxzLnBvcz1zLnN0YXJ0LHMuZW5kPW4rYXx8cy5ieXRlcy5sZW5ndGgscy5kaWN0PWksc31yZXR1cm4gYyhyLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnl0ZXMscj10aGlzLnBvcyxuPXRoaXMuZW5kO2lmKCFlKXJldHVybiB0LnN1YmFycmF5KHIsbik7dmFyIGE9citlO3JldHVybiBhPm4mJihhPW4pLHRoaXMucG9zPWEsdC5zdWJhcnJheShyLGEpfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPDAmJihlPTApLHQ+dGhpcy5lbmQmJih0PXRoaXMuZW5kKSx0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBuZXcgcih0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsbil9fV0pLHJ9KGEuQmFzZVN0cmVhbSk7dC5TdHJlYW09ZDt2YXIgcD1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsKDAsaS5zdHJpbmdUb0J5dGVzKShlKSl9cmV0dXJuIGMocil9KGQpO3QuU3RyaW5nU3RyZWFtPXA7dmFyIGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcigpe3JldHVybiBvKHRoaXMsciksdC5jYWxsKHRoaXMsbmV3IFVpbnQ4QXJyYXkoMCkpfXJldHVybiBjKHIpfShkKTt0Lk51bGxTdHJlYW09Z30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIG49cigxNDEpLGE9cigyKSxpPXIoMTM1KSxvPXIoMTM0KSxzPXIoMTgwKSxjPXIoMTM2KSx1PXIoMTk2KSxsPXIoMTk4KSxmPXIoMjAwKSxoPXIoMjI5KSxkPXIoMTQ2KSxwPXIoMTM5KSxnPXIoMjA0KSx2PXIoMTkxKSx5PXIoMTQ0KSxtPXIoMTQ4KSxiPXIoMjAzKSx3PXIoMTk0KSxrPXIoMjA1KSxTPXIoMjMwKTtmdW5jdGlvbiB4KGUpe3JldHVybiB4PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4KGUpfWZ1bmN0aW9uIE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8UChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQSgpe0E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09eChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gVChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fFAoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9UChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gUChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gVChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP1QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIFQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtJKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtJKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaihlLHQpe3JldHVybiBqPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saihlLHQpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIE09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LE0oZSl9ZnVuY3Rpb24gXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXgobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT14KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBSKGUsdCxyKXtyZXR1cm4gdCYmTChlLnByb3RvdHlwZSx0KSxyJiZMKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgTj1bMCwwLDYxMiw3OTJdLEQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5nbG9iYWxJZEZhY3RvcnksYz10LmZvbnRDYWNoZSx1PXQuYnVpbHRJbkNNYXBDYWNoZSxsPXQuc3RhbmRhcmRGb250RGF0YUNhY2hlLGY9dC5nbG9iYWxJbWFnZUNhY2hlLGg9dC5ub25CbGVuZE1vZGVzU2V0LGQ9dC54ZmFGYWN0b3J5O18odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9cix0aGlzLnBhZ2VJbmRleD1hLHRoaXMucGFnZURpY3Q9aSx0aGlzLnhyZWY9bix0aGlzLnJlZj1vLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPXUsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Zix0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aCx0aGlzLmV2YWx1YXRvck9wdGlvbnM9ci5ldmFsdWF0b3JPcHRpb25zLHRoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsLHRoaXMueGZhRmFjdG9yeT1kO3ZhciBwPXtvYmo6MH07dGhpcy5fbG9jYWxJZEZhY3Rvcnk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmooZSx0KX0oaSxlKTt2YXIgdCxyLG49KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLG49TSh0KTtpZihyKXt2YXIgYT1NKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PXgodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKCl7cmV0dXJuIF8odGhpcyxpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUihpLG51bGwsW3trZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJwIi5jb25jYXQoYSwiXyIpLmNvbmNhdCgrK3Aub2JqKX19LHtrZXk6ImdldFBhZ2VPYmpJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4icGFnZSIuY29uY2F0KG8udG9TdHJpbmcoKSl9fV0pLGl9KHMpfXZhciB0LHIscztyZXR1cm4gUihlLFt7a2V5OiJfZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPSgwLGkuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dGhpcy5wYWdlRGljdCxrZXk6ZSxnZXRBcnJheTp0LHN0b3BXaGVuRm91bmQ6ITF9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT8xIT09ci5sZW5ndGgmJnJbMF1pbnN0YW5jZW9mIG8uRGljdD9vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpyfSk6clswXTpyfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0QXJyYXkoIkNvbnRlbnRzIil9fSx7a2V5OiJyZXNvdXJjZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBvLkRpY3Q/ZTpvLkRpY3QuZW1wdHkpfX0se2tleToiX2dldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O3ZhciB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZigodD1hLlV0aWwubm9ybWFsaXplUmVjdCh0KSlbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxhLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9fSx7a2V5OiJtZWRpYUJveCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Til9fSx7a2V5OiJjcm9wQm94IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLGEuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9fSx7a2V5OiJ2aWV3IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyb3BCb3gsdD10aGlzLm1lZGlhQm94O2lmKGUhPT10JiYhKDAsYS5pc0FycmF5RXF1YWwpKGUsdCkpe3ZhciByPWEuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLGEud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLGEuc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfX0se2tleToiX29uU3ViU3RyZWFtRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pLHZvaWQoMCxhLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQociwnKTogIicpLmNvbmNhdCh0LCciLicpKTt0aHJvdyB0fX0se2tleToiZ2V0Q29udGVudFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/cjpBcnJheS5pc0FycmF5KHIpP25ldyBtLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShyLHQuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0LGUpKTpuZXcgcC5OdWxsU3RyZWFtfSkpfX0se2tleToieGZhRGF0YSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX19LHtrZXk6InNhdmVOZXdBbm5vdGF0aW9ucyIsdmFsdWU6KHM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGksbyxzLGMsdSxsLGYsaCxkLHAsZztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhmYUZhY3Rvcnkpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y2FzZSAyOnJldHVybiBpPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPXRoaXMucGFnZURpY3Qscz10aGlzLmFubm90YXRpb25zLnNsaWNlKCksZS5uZXh0PTcsbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSxyLGEpO2Nhc2UgNzpjPWUuc2VudCx1PUYoYy5hbm5vdGF0aW9ucyk7dHJ5e2Zvcih1LnMoKTshKGw9dS5uKCkpLmRvbmU7KWY9bC52YWx1ZS5yZWYscy5wdXNoKGYpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXJldHVybiBoPW8uZ2V0KCJBbm5vdHMiKSxvLnNldCgiQW5ub3RzIixzKSxkPVtdLHA9bnVsbCx0aGlzLnhyZWYuZW5jcnlwdCYmKHA9dGhpcy54cmVmLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSwoMCx3LndyaXRlT2JqZWN0KSh0aGlzLnJlZixvLGQscCksaCYmby5zZXQoIkFubm90cyIsaCksKGc9Yy5kZXBlbmRlbmNpZXMpLnB1c2guYXBwbHkoZyxbe3JlZjp0aGlzLnJlZixkYXRhOmQuam9pbigiIil9XS5jb25jYXQoQyhjLmFubm90YXRpb25zKSkpLGUuYWJydXB0KCJyZXR1cm4iLGcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBpLG89W10scz1GKGUpO3RyeXtmb3Iocy5zKCk7IShpPXMubigpKS5kb25lOyl7dmFyIGM9aS52YWx1ZTtjLm11c3RCZVByaW50ZWQocikmJm8ucHVzaChjLnNhdmUobix0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiKyciJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pKX0pKX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbz1lLnNpbmsscz1lLnRhc2ssYz1lLmludGVudCx1PWUuY2FjaGVLZXksbD1lLmFubm90YXRpb25TdG9yYWdlLGY9dm9pZCAwPT09bD9udWxsOmwsaD10aGlzLmdldENvbnRlbnRTdHJlYW0ociksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSkscD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZz10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShmKSxtPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXt2YXIgYj1nLmdldCh0aGlzLnBhZ2VJbmRleCk7YiYmKG09bi5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHAscyxiKSl9dmFyIHc9UHJvbWlzZS5hbGwoW2gsZF0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPU8oZSwxKVswXSxhPW5ldyB2Lk9wZXJhdG9yTGlzdChjLG8pO3JldHVybiByLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTpwLmhhc0JsZW5kTW9kZXModC5yZXNvdXJjZXMsdC5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dC5wYWdlSW5kZXgsY2FjaGVLZXk6dX0pLHAuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOnMscmVzb3VyY2VzOnQucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDphfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsbV0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PU8oZSwzKSxyPXRbMF0sbj10WzFdLGk9dFsyXTtpZihpJiYobj1uLmNvbmNhdChpKSksMD09PW4ubGVuZ3RofHxjJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiByLmZsdXNoKCEwKSx7bGVuZ3RoOnIudG90YWxMZW5ndGh9O3ZhciBvLHU9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLGw9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGMmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEoYyZhLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGc9W10sdj1GKG4pO3RyeXtmb3Iodi5zKCk7IShvPXYubigpKS5kb25lOyl7dmFyIHk9by52YWx1ZTsobHx8aCYmeS5tdXN0QmVWaWV3ZWQoZil8fGQmJnkubXVzdEJlUHJpbnRlZChmKSkmJmcucHVzaCh5LmdldE9wZXJhdG9yTGlzdChwLHMsYyx1LGYpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIrJyInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXJldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdCxuPSExLGE9ITEsaT1GKGUpO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIG89dC52YWx1ZSxzPW8ub3BMaXN0LGM9by5zZXBhcmF0ZUZvcm0sdT1vLnNlcGFyYXRlQ2FudmFzO3IuYWRkT3BMaXN0KHMpLGMmJihuPWMpLHUmJihhPXUpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gci5mbHVzaCghMCx7Zm9ybTpuLGNhbnZhczphfSkse2xlbmd0aDpyLnRvdGFsTGVuZ3RofX0pKX0pKX19LHtrZXk6ImV4dHJhY3RUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFuZGxlcixuPWUudGFzayxhPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLmdldENvbnRlbnRTdHJlYW0ociksYz10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSk7cmV0dXJuIFByb21pc2UuYWxsKFtzLGNdKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcz1PKGUsMSlbMF07cmV0dXJuIG5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dC54cmVmLGhhbmRsZXI6cixwYWdlSW5kZXg6dC5wYWdlSW5kZXgsaWRGYWN0b3J5OnQuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazpuLHJlc291cmNlczp0LnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOmksdmlld0JveDp0LnZpZXd9KX0pKX19LHtrZXk6ImdldFN0cnVjdFRyZWUiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5uZXh0PTcsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbdF0pO2Nhc2UgNzpyZXR1cm4gcj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsci5zZXJpYWxpemFibGUpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9wYXJzZVN0cnVjdFRyZWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiLlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7cmV0dXJuIHQucGFyc2UoKSx0fX0se2tleToiZ2V0QW5ub3RhdGlvbnNEYXRhIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaSxvLHMsYyx1LGwsZixoLGQscCxnO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2Nhc2UgMjppZigwIT09KGk9ZS5zZW50KS5sZW5ndGgpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbXSk7Y2FzZSA1Om89W10scz1bXSx1PSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksbD0hIShuJmEuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxmPSEhKG4mYS5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKSxoPUYoaSk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSwoKGc9dXx8bCYmcC52aWV3YWJsZSl8fGYmJnAucHJpbnRhYmxlKSYmcy5wdXNoKHAuZGF0YSkscC5oYXNUZXh0Q29udGVudCYmZyYmKGN8fChjPW5ldyB5LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6dCxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSksby5wdXNoKHAuZXh0cmFjdFRleHRDb250ZW50KGMscix0aGlzLnZpZXcpLmNhdGNoKChmdW5jdGlvbihlKXsoMCxhLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGUubmV4dD0xMixQcm9taXNlLmFsbChvKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJhbm5vdGF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfX0se2tleToiX3BhcnNlZEFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQscj1bXSxpPUYoZS5hbm5vdGF0aW9ucyk7dHJ5e2ZvcihpLnMoKTshKHQ9aS5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO3IucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShlLnhyZWYsbyxlLnBkZk1hbmFnZXIsZS5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdCxyLGE9W10saT1GKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89ci52YWx1ZTtvJiYobyBpbnN0YW5jZW9mIG4uUG9wdXBBbm5vdGF0aW9uPyh0fHwodD1bXSksdC5wdXNoKG8pKTphLnB1c2gobykpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gdCYmYS5wdXNoLmFwcGx5KGEsQyh0KSksYX0pKX0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19LHtrZXk6ImpzQWN0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3QsYS5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19XSksZX0oKTt0LlBhZ2U9RDt2YXIgQj1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxVPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksJD1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLG89aS5sZW5ndGgtYTtpZihvPD0wKXJldHVybiExO2lmKG4pZm9yKHZhciBzPWEtMSxjPWkubGVuZ3RoLTE7Yz49czspe2Zvcih2YXIgdT0wO3U8YSYmaVtjLXVdPT09dFtzLXVdOyl1Kys7aWYodT49YSlyZXR1cm4gZS5wb3MrPWMtcywhMDtjLS19ZWxzZSBmb3IodmFyIGw9MDtsPD1vOyl7Zm9yKHZhciBmPTA7ZjxhJiZpW2wrZl09PT10W2ZdOylmKys7aWYoZj49YSlyZXR1cm4gZS5wb3MrPWwsITA7bCsrfXJldHVybiExfXZhciBIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2lmKF8odGhpcyxlKSxyLmxlbmd0aDw9MCl0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1yLHRoaXMueHJlZj1uZXcgUy5YUmVmKHIsdCksdGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXAsdGhpcy5fdmVyc2lvbj1udWxsO3ZhciBuPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfKHRoaXMsZSl9cmV0dXJuIFIoZSxudWxsLFt7a2V5OiJnZXREb2NJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZ18iLmNvbmNhdCh0LmRvY0lkKX19LHtrZXk6ImNyZWF0ZUZvbnRJZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iZiIuY29uY2F0KCsrbi5mb250KX19LHtrZXk6ImNyZWF0ZU9iaklkIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9fSx7a2V5OiJnZXRQYWdlT2JqSWQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsYS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fV0pLGV9KCl9dmFyIHQscixwLG0sYix3LEMsUDtyZXR1cm4gUihlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy54cmVmLnBhcnNlKGUpLHRoaXMuY2F0YWxvZz1uZXcgbC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1kLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoZSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSxYKGUsJCkmJih0PWUucG9zKzYtZS5zdGFydCk7ZWxzZXtmb3IodmFyIHI9VS5sZW5ndGgsbj0hMSxvPWUuZW5kOyFuJiZvPjA7KShvLT0xMDI0LXIpPDAmJihvPTApLGUucG9zPW8sbj1YKGUsVSwxMDI0LCEwKTtpZihuKXt2YXIgcztlLnNraXAoOSk7ZG97cz1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocykpO2Zvcih2YXIgYz0iIjtzPj0zMiYmczw9NTc7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUocykscz1lLmdldEJ5dGUoKTt0PXBhcnNlSW50KGMsMTApLGlzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksWChlLEIpKXtlLm1vdmVTdGFydCgpLGUuc2tpcChCLmxlbmd0aCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZyLmxlbmd0aDw3OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3Qocik/dGhpcy5fdmVyc2lvbj1yOigwLGEud2FybikoIkludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAiLmNvbmNhdChyKSl9fX0se2tleToicGFyc2VTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsYS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6Il9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtpZighKChlPXQueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrcj4xMD8oKDAsYS53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dC5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHIpO3ZhciBuPSgwLG8uaXNOYW1lKShlLmdldCgiRlQiKSwiU2lnIiksaT1lLmdldCgiUmVjdCIpLHM9QXJyYXkuaXNBcnJheShpKSYmaS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSkpO3JldHVybiBuJiZzfSkpfX0se2tleToiX3hmYVN0cmVhbXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiWEZBIikscj17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpcmV0dXJuIHJbInhkcDp4ZHAiXT10LHI7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKz0yKXt2YXIgaTtpZihpPTA9PT1uPyJ4ZHA6eGRwIjpuPT09YS0yPyIveGRwOnhkcCI6dFtuXSxyLmhhc093blByb3BlcnR5KGkpKXt2YXIgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W24rMV0pO28gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHkmJihyW2ldPW8pfX1yZXR1cm4gcn19LHtrZXk6InhmYURhdGFzZXRzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKHZhciB0PTAscj1bImRhdGFzZXRzIiwieGRwOnhkcCJdO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9ZVtuXTtpZihpKXRyeXt2YXIgbz17W25dOigwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShpLmdldFN0cmluZygpKX07cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixuZXcgaC5EYXRhc2V0UmVhZGVyKG8pKX1jYXRjaChlKXsoMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYURhdGFzZXRzIixudWxsKX19LHtrZXk6InhmYURhdGEiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj0wLG49T2JqZWN0LmVudHJpZXMoZSk7cjxuLmxlbmd0aDtyKyspe3ZhciBpPU8obltyXSwyKSxvPWlbMF0scz1pWzFdO2lmKHMpdHJ5e3Rbb109KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKHMuZ2V0U3RyaW5nKCkpfWNhdGNoKGUpe3JldHVybigwLGEud2FybikoIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpLG51bGx9fXJldHVybiB0fX0se2tleToieGZhRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpLCgwLGEuc2hhZG93KSh0aGlzLCJ4ZmFGYWN0b3J5IixlP25ldyBrLlhGQUZhY3RvcnkoZSk6bnVsbCl9fSx7a2V5OiJpc1B1cmVYZmEiLGdldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfX0se2tleToiaHRtbEZvclhmYSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfX0se2tleToibG9hZFhmYUltYWdlcyIsdmFsdWU6KFA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhLGksbyxzLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2Nhc2UgMjppZih0PWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIHI9dC5nZXRLZXlzKCksbj1uZXcgZy5PYmplY3RMb2FkZXIodCxyLHRoaXMueHJlZiksZS5uZXh0PTksbi5sb2FkKCk7Y2FzZSA5OmE9bmV3IE1hcCxpPUYocik7dHJ5e2ZvcihpLnMoKTshKG89aS5uKCkpLmRvbmU7KXM9by52YWx1ZSwodT10LmdldChzKSlpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmYS5zZXQocyx1LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRYZmFGb250cyIsdmFsdWU6KEM9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGMsdSxsLGYsaCxkLHAsbSxiLHcsayxTLHgsQyxQLFQsSSxFLGosTSxfLEwsUixOLEQsQixVLCQsWCxILHEsRyx6O3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpO2Nhc2UgMjppZihuPWUuc2VudCl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6cmV0dXJuIGUubmV4dD03LG4uZ2V0QXN5bmMoIkRSIik7Y2FzZSA3OmlmKChjPWUuc2VudClpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpyZXR1cm4gdT1uZXcgZy5PYmplY3RMb2FkZXIoYyxbIkZvbnQiXSx0aGlzLnhyZWYpLGUubmV4dD0xMyx1LmxvYWQoKTtjYXNlIDEzOmlmKChsPWMuZ2V0KCJGb250IikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTY6KGY9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKSkudXNlU3lzdGVtRm9udHM9ITEsaD1uZXcgeS5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmZ9KSxkPW5ldyB2Lk9wZXJhdG9yTGlzdCxwPVtdLGUudDA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbT17Z2V0IGZvbnQoKXtyZXR1cm4gcC5hdCgtMSl9LHNldCBmb250KGUpe3AucHVzaChlKX0sY2xvbmU6ZS50MH0sYj1uZXcgTWFwLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtiLnNldChlLHQpfSkpLHc9W10saz1GKGIpLGUucHJldj0yNyxrLnMoKTtjYXNlIDI5OmlmKChTPWsubigpKS5kb25lKXtlLm5leHQ9NDQ7YnJlYWt9aWYoeD1PKFMudmFsdWUsMiksQz14WzBdLFA9eFsxXSwoVD1QLmdldCgiRm9udERlc2NyaXB0b3IiKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTM0O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDQyKTtjYXNlIDM0OmlmKEk9KEk9VC5nZXQoIkZvbnRGYW1pbHkiKSkucmVwbGFjZSgvWyBdKyhcZCkvZywiJDEiKSxFPVQuZ2V0KCJGb250V2VpZ2h0Iiksaj0tVC5nZXQoIkl0YWxpY0FuZ2xlIiksTT17Zm9udEZhbWlseTpJLGZvbnRXZWlnaHQ6RSxpdGFsaWNBbmdsZTpqfSwoMCxpLnZhbGlkYXRlQ1NTRm9udCkoTSkpe2UubmV4dD00MTticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw0Mik7Y2FzZSA0MTp3LnB1c2goaC5oYW5kbGVTZXRGb250KGMsW28uTmFtZS5nZXQoQyksMV0sbnVsbCxkLHIsbSxudWxsLE0pLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkWGZhRm9udHM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtjYXNlIDQyOmUubmV4dD0yOTticmVhaztjYXNlIDQ0OmUubmV4dD00OTticmVhaztjYXNlIDQ2OmUucHJldj00NixlLnQxPWUuY2F0Y2goMjcpLGsuZShlLnQxKTtjYXNlIDQ5OnJldHVybiBlLnByZXY9NDksay5mKCksZS5maW5pc2goNDkpO2Nhc2UgNTI6cmV0dXJuIGUubmV4dD01NCxQcm9taXNlLmFsbCh3KTtjYXNlIDU0OmlmKF89dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKHApKXtlLm5leHQ9NTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU3OmYuaWdub3JlRXJyb3JzPSEwLHcubGVuZ3RoPTAscC5sZW5ndGg9MCxMPW5ldyBTZXQsUj1GKF8pO3RyeXtmb3IoUi5zKCk7IShOPVIubigpKS5kb25lOylEPU4udmFsdWUsKDAscy5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KEQsIi1SZWd1bGFyIikpfHxMLmFkZChEKX1jYXRjaChlKXtSLmUoZSl9ZmluYWxseXtSLmYoKX1MLnNpemUmJl8ucHVzaCgiUGRmSlMtRmFsbGJhY2siKSxCPUYoXyksZS5wcmV2PTY1LEIucygpO2Nhc2UgNjc6aWYoKFU9Qi5uKCkpLmRvbmUpe2UubmV4dD03NDticmVha31pZigkPVUudmFsdWUsIUwuaGFzKCQpKXtlLm5leHQ9NzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJjb250aW51ZSIsNzIpO2Nhc2UgNzE6Zm9yKFg9MCxIPVt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XTtYPEgubGVuZ3RoO1grKylxPUhbWF0sRz0iIi5jb25jYXQoJCwiLSIpLmNvbmNhdChxLm5hbWUpLHo9KDAscy5nZXRYZmFGb250RGljdCkoRyksdy5wdXNoKGguaGFuZGxlU2V0Rm9udChjLFtvLk5hbWUuZ2V0KEcpLDFdLG51bGwsZCxyLG0seix7Zm9udEZhbWlseTokLGZvbnRXZWlnaHQ6cS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnEuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7Y2FzZSA3MjplLm5leHQ9Njc7YnJlYWs7Y2FzZSA3NDplLm5leHQ9Nzk7YnJlYWs7Y2FzZSA3NjplLnByZXY9NzYsZS50Mj1lLmNhdGNoKDY1KSxCLmUoZS50Mik7Y2FzZSA3OTpyZXR1cm4gZS5wcmV2PTc5LEIuZigpLGUuZmluaXNoKDc5KTtjYXNlIDgyOnJldHVybiBlLm5leHQ9ODQsUHJvbWlzZS5hbGwodyk7Y2FzZSA4NDp0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMocCxMKTtjYXNlIDg1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMjcsNDYsNDksNTJdLFs2NSw3Niw3OSw4Ml1dKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplWGZhRGF0YSIsdmFsdWU6KHc9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEodCk6bnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn19LHtrZXk6ImZvcm1JbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXt2YXIgcj10LmdldCgiRmllbGRzIiksbj1BcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aD4wO2UuaGFzRmllbGRzPW47dmFyIG89dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobykmJm8ubGVuZ3RoPjB8fG8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFvLmlzRW1wdHk7dmFyIHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksdT1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXUsZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9fSx7a2V5OiJkb2N1bWVudEluZm8iLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTt0cnl7ZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIix0KTt2YXIgcixuPUYoZS5nZXRLZXlzKCkpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIHM9ci52YWx1ZSxjPWUuZ2V0KHMpO3N3aXRjaChzKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYyl7dFtzXT0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGMgaW5zdGFuY2VvZiBvLk5hbWUpe3Rbc109Yztjb250aW51ZX1icmVhaztkZWZhdWx0OnZhciB1PXZvaWQgMDtzd2l0Y2goeChjKSl7Y2FzZSJzdHJpbmciOnU9KDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dT1jO2JyZWFrO2RlZmF1bHQ6YyBpbnN0YW5jZW9mIG8uTmFtZSYmKHU9Yyl9aWYodm9pZCAwPT09dSl7KDAsYS53YXJuKSgnQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSk7Y29udGludWV9dC5DdXN0b218fCh0LkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKSx0LkN1c3RvbVtzXT11O2NvbnRpbnVlfSgwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gSW5mbzogJykuY29uY2F0KGMsIi4iKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLHQpfX0se2tleToiZmluZ2VycHJpbnRzIixnZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXt2YXIgdCxyPVtdLG49RihlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWUudG9TdHJpbmcoMTYpO3IucHVzaChhLnBhZFN0YXJ0KDIsIjAiKSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByLmpvaW4oIiIpfXZhciByLG4saT10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmUoaVswXSk/KHI9KDAsYS5zdHJpbmdUb0J5dGVzKShpWzBdKSxpWzFdIT09aVswXSYmZShpWzFdKSYmKG49KDAsYS5zdHJpbmdUb0J5dGVzKShpWzFdKSkpOnI9KDAsdS5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCksKDAsYS5zaGFkb3cpKHRoaXMsImZpbmdlcnByaW50cyIsW3Qociksbj90KG4pOm51bGxdKX19LHtrZXk6Il9nZXRMaW5lYXJpemF0aW9uUGFnZSIsdmFsdWU6KGI9RShBKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGkscyxjLHU7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcj10aGlzLmNhdGFsb2csbj10aGlzLmxpbmVhcml6YXRpb24saT10aGlzLnhyZWYscz1vLlJlZi5nZXQobi5vYmplY3ROdW1iZXJGaXJzdCwwKSxlLnByZXY9MixlLm5leHQ9NSxpLmZldGNoQXN5bmMocyk7Y2FzZSA1OmlmKCEoKGM9ZS5zZW50KWluc3RhbmNlb2Ygby5EaWN0KSl7ZS5uZXh0PTE2O2JyZWFrfWlmKCEoKHU9Yy5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLm5leHQ9MTEsaS5mZXRjaEFzeW5jKHUpO2Nhc2UgMTE6dT1lLnNlbnQ7Y2FzZSAxMjppZighKDAsby5pc05hbWUpKHUsIlBhZ2UiKSYmKGMuaGFzKCJUeXBlIil8fGMuaGFzKCJLaWRzIikpKXtlLm5leHQ9MTY7YnJlYWt9cmV0dXJuIHIucGFnZUtpZHNDb3VudENhY2hlLmhhcyhzKXx8ci5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHMsMSksci5wYWdlSW5kZXhDYWNoZS5oYXMocyl8fHIucGFnZUluZGV4Q2FjaGUucHV0KHMsMCksZS5hYnJ1cHQoInJldHVybiIsW2Msc10pO2Nhc2UgMTY6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKTtjYXNlIDE5OnJldHVybiBlLnByZXY9MTksZS50MD1lLmNhdGNoKDIpLCgwLGEud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KGUudDAubWVzc2FnZSwnIi4nKSksZS5hYnJ1cHQoInJldHVybiIsci5nZXRQYWdlRGljdCh0KSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTldXSl9KSkpLGZ1bmN0aW9uKGUpe3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZihyKXJldHVybiByO3ZhciBuLGE9dGhpcy5jYXRhbG9nLGk9dGhpcy5saW5lYXJpemF0aW9uLHM9dGhpcy54ZmFGYWN0b3J5O3JldHVybiBuPShuPXM/UHJvbWlzZS5yZXNvbHZlKFtvLkRpY3QuZW1wdHksbnVsbF0pOmkmJmkucGFnZUZpcnN0PT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTphLmdldFBhZ2VEaWN0KGUpKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj1PKHIsMiksaT1uWzBdLG89blsxXTtyZXR1cm4gbmV3IEQoe3BkZk1hbmFnZXI6dC5wZGZNYW5hZ2VyLHhyZWY6dC54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OmkscmVmOm8sZ2xvYmFsSWRGYWN0b3J5OnQuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6c30pfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxuKSxufX0se2tleToiY2hlY2tGaXJzdFBhZ2UiLHZhbHVlOihtPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighKHQubGVuZ3RoPjAmJnZvaWQgMCE9PXRbMF0mJnRbMF0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5wcmV2PTMsZS5uZXh0PTYsdGhpcy5nZXRQYWdlKDApO2Nhc2UgNjplLm5leHQ9MTU7YnJlYWs7Y2FzZSA4OmlmKGUucHJldj04LGUudDA9ZS5jYXRjaCgzKSwhKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbikpe2UubmV4dD0xNTticmVha31yZXR1cm4gdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxlLm5leHQ9MTQsdGhpcy5jbGVhbnVwKCk7Y2FzZSAxNDp0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzMsOF1dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2hlY2tMYXN0UGFnZSIsdmFsdWU6KHA9RShBKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixvLHMsYyx1LGwsZixoLGQscCxnLHY9YXJndW1lbnRzO3JldHVybiBBKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9di5sZW5ndGg+MCYmdm9pZCAwIT09dlswXSYmdlswXSxyPXRoaXMuY2F0YWxvZyxuPXRoaXMucGRmTWFuYWdlcixyLnNldEFjdHVhbE51bVBhZ2VzKCksZS5wcmV2PTMsZS5uZXh0PTYsUHJvbWlzZS5hbGwoW24uZW5zdXJlRG9jKCJ4ZmFGYWN0b3J5Iiksbi5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxuLmVuc3VyZUNhdGFsb2coIm51bVBhZ2VzIildKTtjYXNlIDY6aWYoIXRoaXMueGZhRmFjdG9yeSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMDpvPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6ci5udW1QYWdlcztjYXNlIDExOmlmKE51bWJlci5pc0ludGVnZXIobykpe2UubmV4dD0xNTticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtjYXNlIDE1OmlmKCEobzw9MSkpe2UubmV4dD0xNzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTc6cmV0dXJuIGUubmV4dD0xOSx0aGlzLmdldFBhZ2Uoby0xKTtjYXNlIDE5OmUubmV4dD00NDticmVhaztjYXNlIDIxOnJldHVybiBlLnByZXY9MjEsZS50MD1lLmNhdGNoKDMpLHRoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoby0xKSxlLm5leHQ9MjYsdGhpcy5jbGVhbnVwKCk7Y2FzZSAyNjppZighKGUudDAgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbil8fHQpe2UubmV4dD0yODticmVha310aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247Y2FzZSAyODpyZXR1cm4oMCxhLndhcm4pKCJjaGVja0xhc3RQYWdlIC0gaW52YWxpZCAvUGFnZXMgdHJlZSAvQ291bnQ6ICIuY29uY2F0KG8sIi4iKSksZS5wcmV2PTI5LGUubmV4dD0zMixyLmdldEFsbFBhZ2VEaWN0cyh0KTtjYXNlIDMyOnM9ZS5zZW50LGUubmV4dD00MTticmVhaztjYXNlIDM1OmlmKGUucHJldj0zNSxlLnQxPWUuY2F0Y2goMjkpLCEoZS50MSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXx8dCl7ZS5uZXh0PTM5O2JyZWFrfXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtjYXNlIDM5OnJldHVybiByLnNldEFjdHVhbE51bVBhZ2VzKDEpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQxOmM9RihzKTt0cnl7Zm9yKGMucygpOyEodT1jLm4oKSkuZG9uZTspbD1PKHUudmFsdWUsMiksZj1sWzBdLGg9TyhsWzFdLDIpLGQ9aFswXSxwPWhbMV0sZz12b2lkIDAsZCBpbnN0YW5jZW9mIEVycm9yPyhnPVByb21pc2UucmVqZWN0KGQpKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSk6Zz1Qcm9taXNlLnJlc29sdmUobmV3IEQoe3BkZk1hbmFnZXI6bix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZixwYWdlRGljdDpkLHJlZjpwLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnIuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6ci5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTpyLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnIuZ2xvYmFsSW1hZ2VDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5Om51bGx9KSksdGhpcy5fcGFnZVByb21pc2VzLnNldChmLGcpfWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXIuc2V0QWN0dWFsTnVtUGFnZXMocy5zaXplKTtjYXNlIDQ0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMywyMV0sWzI5LDM1XV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soZSx0KX19LHtrZXk6ImNsZWFudXAiLHZhbHVlOihyPUUoQSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyPWFyZ3VtZW50cztyZXR1cm4gQSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIubGVuZ3RoPjAmJnZvaWQgMCE9PXJbMF0mJnJbMF0sZS5hYnJ1cHQoInJldHVybiIsdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKHQpOigwLGYuY2xlYXJHbG9iYWxDYWNoZXMpKCkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9jb2xsZWN0RmllbGRPYmplY3RzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7dmFyIG89KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/bzoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdChvKX1pZihyLmhhcyhlKXx8ci5zZXQoZSxbXSksci5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITApLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmdldEZpZWxkT2JqZWN0KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLGEud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7dmFyIHMsYz1GKGkuZ2V0KCJLaWRzIikpO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOyl7dmFyIHU9cy52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKGUsdSxyKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19LHtrZXk6ImZpZWxkT2JqZWN0cyIsZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7dmFyIGUsdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9bmV3IE1hcCxuPUYodGhpcy5jYXRhbG9nLmFjcm9Gb3JtLmdldCgiRmllbGRzIikpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGk9ZS52YWx1ZTt0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGkscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBvLHM9W10sYz1GKHIpO3RyeXt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPU8oby52YWx1ZSwyKSxyPWVbMF0sbj1lWzFdO3MucHVzaChQcm9taXNlLmFsbChuKS50aGVuKChmdW5jdGlvbihlKXsoZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpKS5sZW5ndGg+MCYmKHRbcl09ZSl9KSkpfTtmb3IoYy5zKCk7IShvPWMubigpKS5kb25lOyl1KCl9Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSl9fSx7a2V5OiJoYXNKU0FjdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJoYXNKU0FjdGlvbnMiLGUpfX0se2tleToiX3BhcnNlSGFzSlNBY3Rpb25zIix2YWx1ZToodD1FKEEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuLGE7cmV0dXJuIEEoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2Nhc2UgMjppZih0PWUuc2VudCxyPU8odCwyKSxuPXJbMF0sYT1yWzFdLCFuKXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgODppZighYSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixPYmplY3QudmFsdWVzKGEpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZS5hY3Rpb25zfSkpfSkpKTtjYXNlIDEwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbGN1bGF0aW9uT3JkZXJJZHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTt2YXIgcixuPVtdLGk9Rih0KTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7cyBpbnN0YW5jZW9mIG8uUmVmJiZuLnB1c2gocy50b1N0cmluZygpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIDA9PT1uLmxlbmd0aD8oMCxhLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsYS5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG4pfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9SH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwLHQuZ2V0UXVhZFBvaW50cz1EO3ZhciBuPXIoMiksYT1yKDEzNSksaT1yKDE0Miksbz1yKDEzNCkscz1yKDE5NCksYz1yKDEzNiksdT1yKDE4OSksbD1yKDE5OCksZj1yKDE0MyksaD1yKDIwMSksZD1yKDIwNCkscD1yKDE5MSksZz1yKDEzOSksdj1yKDIwNSk7ZnVuY3Rpb24geSgpe3JldHVybiB5PSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9eChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYihlLHQpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gYj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGIoZSx0KX1mdW5jdGlvbiB3KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPXgoZSk7aWYodCl7dmFyIGE9eCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gayh0aGlzLHIpfX1mdW5jdGlvbiBrKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Tyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gUyhlKX1mdW5jdGlvbiBTKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB4KGUpe3JldHVybiB4PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSx4KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9SShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gQygpe0M9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6ayhlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgZz17fTtjKGcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgdj1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT12JiZ2KHYoUChbXSkpKTt5JiZ5IT09dCYmci5jYWxsKHksaSkmJihnPXkpO3ZhciBtPXAucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZyk7ZnVuY3Rpb24gYihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09TyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gayhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPVMobyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gUyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLFMoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKHgsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9cCxuKG0sImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxuKHAsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWMocCxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sYih3LnByb3RvdHlwZSksYyh3LnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj13LGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgdyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGIobSksYyhtLHMsIkdlbmVyYXRvciIpLGMobSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGMobSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gRihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7RihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7RihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8SShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gRShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0UoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEUoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBqKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1PKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09TyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PU8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIF8oZSx0LHIpe3JldHVybiB0JiZNKGUucHJvdG90eXBlLHQpLHImJk0oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2oodGhpcyxlKX12YXIgdCxyLGk7cmV0dXJuIF8oZSxudWxsLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9dGhpcztyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoZnVuY3Rpb24obyl7dmFyIHM9VChvLDUpLGM9c1swXSx1PShzWzFdLHNbMl0pLGw9c1szXSxmPXNbNF07cmV0dXJuIHIuZW5zdXJlKGksIl9jcmVhdGUiLFtlLHQscixuLGMsdSxsLGEsZl0pfSkpfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCx1PWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLGw9YXJndW1lbnRzLmxlbmd0aD43P2FyZ3VtZW50c1s3XTp2b2lkIDAsZj1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06LTEsaD1lLmZldGNoSWZSZWYodCk7aWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQ9dCBpbnN0YW5jZW9mIG8uUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKSxwPWguZ2V0KCJTdWJ0eXBlIik7cD1wIGluc3RhbmNlb2Ygby5OYW1lP3AubmFtZTpudWxsO3ZhciBnPXMgaW5zdGFuY2VvZiBvLkRpY3Q/czpvLkRpY3QuZW1wdHksdj17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOnAsaWQ6ZCxwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06ZyxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOnUsY29sbGVjdEZpZWxkczpsLG5lZWRBcHBlYXJhbmNlczohbCYmITA9PT1nLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OmYsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bi5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmci5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfTtzd2l0Y2gocCl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IFkodik7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFYodik7Y2FzZSJXaWRnZXQiOnZhciB5PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO3N3aXRjaCh5PXkgaW5zdGFuY2VvZiBvLk5hbWU/eS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgcSh2KTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBHKHYpO2Nhc2UiQ2giOnJldHVybiBuZXcgeih2KTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBXKHYpfXJldHVybigwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIicuY29uY2F0KHksJyIsICcpKyJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLiIpLG5ldyBIKHYpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgSyh2KTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEoodik7Y2FzZSJMaW5lIjpyZXR1cm4gbmV3IFoodik7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgUSh2KTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBlZSh2KTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IHRlKHYpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyByZSh2KTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IG5lKHYpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IGFlKHYpO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IGllKHYpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IG9lKHYpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgc2Uodik7Y2FzZSJTdHJpa2VPdXQiOnJldHVybiBuZXcgY2Uodik7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyB1ZSh2KTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IGxlKHYpO2RlZmF1bHQ6cmV0dXJuIGx8fChwPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInLmNvbmNhdChwLCciLCAnKSsiZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi4iKTooMCxuLndhcm4pKCJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpKSxuZXcgVSh2KX19fX0se2tleToiX2dldFBhZ2VJbmRleCIsdmFsdWU6KGk9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSl7dmFyIGkscyxjO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUubmV4dD0zLHQuZmV0Y2hJZlJlZkFzeW5jKHIpO2Nhc2UgMzppZigoaT1lLnNlbnQpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSA2OmlmKChzPWkuZ2V0UmF3KCJQIikpaW5zdGFuY2VvZiBvLlJlZil7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLC0xKTtjYXNlIDk6cmV0dXJuIGUubmV4dD0xMSxhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3NdKTtjYXNlIDExOnJldHVybiBjPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE1OnJldHVybiBlLnByZXY9MTUsZS50MD1lLmNhdGNoKDApLCgwLG4ud2FybikoJ19nZXRQYWdlSW5kZXg6ICInLmNvbmNhdChlLnQwLCciLicpKSxlLmFicnVwdCgicmV0dXJuIiwtMSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTVdXSl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZU5ld0Fubm90YXRpb25zIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhKXt2YXIgaSxjLHUsbCxmLGgsZCxwLGc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppPXQueHJlZix1PVtdLGw9W10sZj1BKGEpLGUucHJldj00LGYucygpO2Nhc2UgNjppZigoaD1mLm4oKSkuZG9uZSl7ZS5uZXh0PTE3O2JyZWFrfWQ9aC52YWx1ZSxlLnQwPWQuYW5ub3RhdGlvblR5cGUsZS5uZXh0PWUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUPzExOmUudDA9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSz8xNDoxNTticmVhaztjYXNlIDExOnJldHVybiBjfHwoKHA9bmV3IG8uRGljdChpKSkuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiSGVsdmV0aWNhIikpLHAuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGb250IikpLHAuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJUeXBlMSIpKSxwLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSxnPVtdLGM9aS5nZXROZXdUZW1wb3JhcnlSZWYoKSwoMCxzLndyaXRlT2JqZWN0KShjLHAsZyxudWxsKSx1LnB1c2goe3JlZjpjLGRhdGE6Zy5qb2luKCIiKX0pKSxsLnB1c2goSi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1LHtldmFsdWF0b3I6dCx0YXNrOnIsYmFzZUZvbnRSZWY6Y30pKSxlLmFicnVwdCgiYnJlYWsiLDE1KTtjYXNlIDE0OmwucHVzaChhZS5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCx1KSk7Y2FzZSAxNTplLm5leHQ9NjticmVhaztjYXNlIDE3OmUubmV4dD0yMjticmVhaztjYXNlIDE5OmUucHJldj0xOSxlLnQxPWUuY2F0Y2goNCksZi5lKGUudDEpO2Nhc2UgMjI6cmV0dXJuIGUucHJldj0yMixmLmYoKSxlLmZpbmlzaCgyMik7Y2FzZSAyNTpyZXR1cm4gZS5uZXh0PTI3LFByb21pc2UuYWxsKGwpO2Nhc2UgMjc6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9dSxlLmFicnVwdCgicmV0dXJuIix7YW5ub3RhdGlvbnM6ZS50MixkZXBlbmRlbmNpZXM6ZS50M30pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDE5LDIyLDI1XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InByaW50TmV3QW5ub3RhdGlvbnMiLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLG8scyxjLHUsbDtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGEpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDI6aT10LnhyZWYsbz1bXSxzPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJnQub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCxjPUEoYSksZS5wcmV2PTYsYy5zKCk7Y2FzZSA4OmlmKCh1PWMubigpKS5kb25lKXtlLm5leHQ9MTk7YnJlYWt9bD11LnZhbHVlLGUudDA9bC5hbm5vdGF0aW9uVHlwZSxlLm5leHQ9ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ/MTM6ZS50MD09PW4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LPzE1OjE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG8ucHVzaChKLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihpLGwse2V2YWx1YXRvcjp0LHRhc2s6cixpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTU6cmV0dXJuIG8ucHVzaChhZS5jcmVhdGVOZXdQcmludEFubm90YXRpb24oaSxsLHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpzfSkpLGUuYWJydXB0KCJicmVhayIsMTcpO2Nhc2UgMTc6ZS5uZXh0PTg7YnJlYWs7Y2FzZSAxOTplLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTplLnByZXY9MjEsZS50MT1lLmNhdGNoKDYpLGMuZShlLnQxKTtjYXNlIDI0OnJldHVybiBlLnByZXY9MjQsYy5mKCksZS5maW5pc2goMjQpO2Nhc2UgMjc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UuYWxsKG8pKTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNiwyMSwyNCwyN11dKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7ZnVuY3Rpb24gUihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O3ZhciByPXR8fG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2Nhc2UgMzpyZXR1cm4gZi5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDQ6cmV0dXJuIGYuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShlLDAsciwwKSxyO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIEFycmF5LmZyb20oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUvMjU1fSkpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmdldEFycmF5KCJRdWFkUG9pbnRzIik7aWYoIUFycmF5LmlzQXJyYXkocil8fDA9PT1yLmxlbmd0aHx8ci5sZW5ndGglOD4wKXJldHVybiBudWxsO2Zvcih2YXIgbj1bXSxhPTAsaT1yLmxlbmd0aC84O2E8aTthKyspe2Zvcih2YXIgbz0xLzAscz0tMS8wLGM9MS8wLHU9LTEvMCxsPTgqYSxmPTgqYSs4O2w8ZjtsKz0yKXt2YXIgaD1yW2xdLGQ9cltsKzFdO289TWF0aC5taW4oaCxvKSxzPU1hdGgubWF4KGgscyksYz1NYXRoLm1pbihkLGMpLHU9TWF0aC5tYXgoZCx1KX1pZihudWxsIT09dCYmKG88dFswXXx8cz50WzJdfHxjPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7bi5wdXNoKFt7eDpvLHk6dX0se3g6cyx5OnV9LHt4Om8seTpjfSx7eDpzLHk6Y31dKX1yZXR1cm4gbn1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgYT1UKG4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLDQpLGk9YVswXSxvPWFbMV0scz1hWzJdLGM9YVszXTtpZihpPT09c3x8bz09PWMpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgdT0oZVsyXS1lWzBdKS8ocy1pKSxsPShlWzNdLWVbMV0pLyhjLW8pO3JldHVyblt1LDAsMCxsLGVbMF0taSp1LGVbMV0tbypsXX10LkFubm90YXRpb25GYWN0b3J5PUw7dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2oodGhpcyxlKTt2YXIgcj10LmRpY3QsaT10LnhyZWY7dGhpcy5zZXRUaXRsZShyLmdldCgiVCIpKSx0aGlzLnNldENvbnRlbnRzKHIuZ2V0KCJDb250ZW50cyIpKSx0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5zZXRGbGFncyhyLmdldCgiRiIpKSx0aGlzLnNldFJlY3RhbmdsZShyLmdldEFycmF5KCJSZWN0IikpLHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLnNldEJvcmRlclN0eWxlKHIpLHRoaXMuc2V0QXBwZWFyYW5jZShyKSx0aGlzLnNldE9wdGlvbmFsQ29udGVudChyKTt2YXIgcz1yLmdldCgiTUsiKTtpZih0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMocyksdGhpcy5zZXRSb3RhdGlvbihzKSx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSksdGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOnQuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOnQuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9LHQuY29sbGVjdEZpZWxkcyl7dmFyIGM9ci5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdSxsPVtdLGY9QShjKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aCBpbnN0YW5jZW9mIG8uUmVmJiZsLnB1c2goaC50b1N0cmluZygpKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9MCE9PWwubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1sKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShyKSx0aGlzLmRhdGEucGFnZUluZGV4PXQucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdGhpcy5fZmFsbGJhY2tGb250RGljdD1udWxsLHRoaXMuX25lZWRBcHBlYXJhbmNlcz0hMX12YXIgdCxyLHM7cmV0dXJuIF8oZSxbe2tleToiX2hhc0ZsYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSZ0KX19LHtrZXk6Il9pc1ZpZXdhYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfX0se2tleToibXVzdEJlVmlld2VkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9fSx7a2V5OiJtdXN0QmVQcmludGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LnByaW50P3QucHJpbnQ6dGhpcy5wcmludGFibGV9fSx7a2V5OiJ2aWV3YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmKDA9PT10aGlzLmZsYWdzfHx0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpKX19LHtrZXk6InByaW50YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGEucXVhZFBvaW50cyYmMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpfX0se2tleToiX3BhcnNlU3RyaW5nSGVscGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLHUuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX19LHtrZXk6InNldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIHQ/dDoiIix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UpfX0se2tleToic2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3RpdGxlPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NvbnRlbnRzPXRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGUpfX0se2tleToic2V0TW9kaWZpY2F0aW9uRGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5tb2RpZmljYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9fSx7a2V5OiJzZXRGbGFncyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mbGFncz1OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjA/ZTowfX0se2tleToiaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxlKX19LHtrZXk6InNldFJlY3RhbmdsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoP3RoaXMucmVjdGFuZ2xlPW4uVXRpbC5ub3JtYWxpemVSZWN0KGUpOnRoaXMucmVjdGFuZ2xlPVswLDAsMCwwXX19LHtrZXk6InNldENvbG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNvbG9yPVIoZSl9fSx7a2V5OiJzZXRMaW5lRW5kaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl0sQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcih2YXIgdD0wO3Q8Mjt0Kyspe3ZhciByPWVbdF07aWYociBpbnN0YW5jZW9mIG8uTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPXIubmFtZTtjb250aW51ZX0oMCxuLndhcm4pKCJJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICIuY29uY2F0KHIpKX19fSx7a2V5OiJzZXRSb3RhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yb3RhdGlvbj0wLGUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB0PWUuZ2V0KCJSIil8fDA7TnVtYmVyLmlzSW50ZWdlcih0KSYmMCE9PXQmJigodCU9MzYwKTwwJiYodCs9MzYwKSx0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KSl9fX0se2tleToic2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIG8uRGljdD8odGhpcy5ib3JkZXJDb2xvcj1SKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9UihlLmdldEFycmF5KCJCRyIpLG51bGwpKTp0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9fSx7a2V5OiJzZXRCb3JkZXJTdHlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5ib3JkZXJTdHlsZT1uZXcgJCxlIGluc3RhbmNlb2Ygby5EaWN0KWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLG8uaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBuPWUuZ2V0KCJBUyIpO24gaW5zdGFuY2VvZiBvLk5hbWUmJnIuaGFzKG4ubmFtZSkmJih0aGlzLmFwcGVhcmFuY2U9ci5nZXQobi5uYW1lKSl9fX19LHtrZXk6InNldE9wdGlvbmFsQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vYz1udWxsO3ZhciB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIG8uRGljdCYmKHRoaXMub2M9dCl9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIG5ldyBkLk9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KHM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLHMpe3ZhciBjLHUsbCxmLGgsZCx2LHksbSxiO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz10aGlzLmRhdGEsdT10aGlzLmFwcGVhcmFuY2UsbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSx1KXtlLm5leHQ9ODticmVha31pZihsKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSA2Oih1PW5ldyBnLlN0cmluZ1N0cmVhbSgiIikpLmRpY3Q9bmV3IG8uRGljdDtjYXNlIDg6cmV0dXJuIGY9dS5kaWN0LGUubmV4dD0xMSx0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJDb2xvclNwYWNlIiwiUGF0dGVybiIsIlNoYWRpbmciLCJYT2JqZWN0IiwiRm9udCJdLHUpO2Nhc2UgMTE6aWYoaD1lLnNlbnQsZD1mLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx2PWYuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLHk9QihjLnJlY3QsZCx2KSxtPW5ldyBwLk9wZXJhdG9yTGlzdCwhdGhpcy5vYyl7ZS5uZXh0PTIwO2JyZWFrfXJldHVybiBlLm5leHQ9MTksdC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpO2Nhc2UgMTk6Yj1lLnNlbnQ7Y2FzZSAyMDpyZXR1cm4gdm9pZCAwIT09YiYmbS5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixiXSksbS5hZGRPcChuLk9QUy5iZWdpbkFubm90YXRpb24sW2MuaWQsYy5yZWN0LHksdixsXSksZS5uZXh0PTI0LHQuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dSx0YXNrOnIscmVzb3VyY2VzOmgsb3BlcmF0b3JMaXN0Om0sZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSk7Y2FzZSAyNDpyZXR1cm4gbS5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1iJiZtLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSxlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om0sc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9KTtjYXNlIDI4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LHIsbixhKXtyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2F2ZSIsdmFsdWU6KHI9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFzVGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiExfX0se2tleToiZXh0cmFjdFRleHRDb250ZW50Iix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgYSxpLG8scztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxpPVtdLG89W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1BKGUuaXRlbXMpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZTtvLnB1c2goYS5zdHIpLGEuaGFzRU9MJiYoaS5wdXNoKG8uam9pbigiIikpLG8ubGVuZ3RoPTApfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fSxlLm5leHQ9MTAsdC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnIscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsY29tYmluZVRleHRJdGVtczohMCxzaW5rOnMsdmlld0JveDpufSk7Y2FzZSAxMDp0aGlzLnJlc2V0KCksby5sZW5ndGgmJmkucHVzaChvLmpvaW4oIiIpKSxpLmxlbmd0aD4wJiYodGhpcy5kYXRhLnRleHRDb250ZW50PWkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PUEodGhpcy5fc3RyZWFtcyk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWUucmVzZXQoKX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX19fSx7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTt2YXIgcj1lLGE9bmV3IG8uUmVmU2V0O2ZvcihlLm9iaklkJiZhLnB1dChlLm9iaklkKTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSlpbnN0YW5jZW9mIG8uRGljdCYmKCFyLm9iaklkfHwhYS5oYXMoci5vYmpJZCkpOylyLm9iaklkJiZhLnB1dChyLm9iaklkKSxyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19XSksZX0oKTt0LkFubm90YXRpb249VTt2YXIgJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtqKHRoaXMsZSksdGhpcy53aWR0aD0xLHRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElELHRoaXMuZGFzaEFycmF5PVszXSx0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MCx0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9cmV0dXJuIF8oZSxbe2tleToic2V0V2lkdGgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbMCwwLDAsMF07aWYoZSBpbnN0YW5jZW9mIG8uTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dmFyIHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX19LHtrZXk6InNldFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fX0se2tleToic2V0RGFzaEFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe3ZhciByLG49ITAsYT0hMCxpPUEoZSk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKCEoK3M+PTApKXtuPSExO2JyZWFrfXM+MCYmKGE9ITEpfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1uJiYhYT8odGhpcy5kYXNoQXJyYXk9ZSx0JiZ0aGlzLnNldFN0eWxlKG8uTmFtZS5nZXQoIkQiKSkpOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT0kO3ZhciBYPWZ1bmN0aW9uKGUpe20oaSxlKTt2YXIgdCxyLGE9dyhpKTtmdW5jdGlvbiBpKGUpe3ZhciB0O2oodGhpcyxpKSx0PWEuY2FsbCh0aGlzLGUpO3ZhciByPWUuZGljdDtpZihyLmhhcygiSVJUIikpe3ZhciBzPXIuZ2V0UmF3KCJJUlQiKTt0LmRhdGEuaW5SZXBseVRvPXMgaW5zdGFuY2VvZiBvLlJlZj9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgYz1yLmdldCgiUlQiKTt0LmRhdGEucmVwbHlUeXBlPWMgaW5zdGFuY2VvZiBvLk5hbWU/Yy5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1pZih0LmRhdGEucmVwbHlUeXBlPT09bi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKXt2YXIgdT1yLmdldCgiSVJUIik7dC5zZXRUaXRsZSh1LmdldCgiVCIpKSx0LmRhdGEudGl0bGVPYmo9dC5fdGl0bGUsdC5zZXRDb250ZW50cyh1LmdldCgiQ29udGVudHMiKSksdC5kYXRhLmNvbnRlbnRzT2JqPXQuX2NvbnRlbnRzLHUuaGFzKCJDcmVhdGlvbkRhdGUiKT8odC5zZXRDcmVhdGlvbkRhdGUodS5nZXQoIkNyZWF0aW9uRGF0ZSIpKSx0LmRhdGEuY3JlYXRpb25EYXRlPXQuY3JlYXRpb25EYXRlKTp0LmRhdGEuY3JlYXRpb25EYXRlPW51bGwsdS5oYXMoIk0iKT8odC5zZXRNb2RpZmljYXRpb25EYXRlKHUuZ2V0KCJNIikpLHQuZGF0YS5tb2RpZmljYXRpb25EYXRlPXQubW9kaWZpY2F0aW9uRGF0ZSk6dC5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCx0LmRhdGEuaGFzUG9wdXA9dS5oYXMoIlBvcHVwIiksdS5oYXMoIkMiKT8odC5zZXRDb2xvcih1LmdldEFycmF5KCJDIikpLHQuZGF0YS5jb2xvcj10LmNvbG9yKTp0LmRhdGEuY29sb3I9bnVsbH1lbHNlIHQuZGF0YS50aXRsZU9iaj10Ll90aXRsZSx0LnNldENyZWF0aW9uRGF0ZShyLmdldCgiQ3JlYXRpb25EYXRlIikpLHQuZGF0YS5jcmVhdGlvbkRhdGU9dC5jcmVhdGlvbkRhdGUsdC5kYXRhLmhhc1BvcHVwPXIuaGFzKCJQb3B1cCIpLHIuaGFzKCJDIil8fCh0LmRhdGEuY29sb3I9bnVsbCk7cmV0dXJuIHIuaGFzKCJSQyIpJiYodC5kYXRhLnJpY2hUZXh0PXYuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChyLmdldCgiUkMiKSkpLHR9cmV0dXJuIF8oaSxbe2tleToic2V0Q3JlYXRpb25EYXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfX0se2tleToiX3NldERlZmF1bHRBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmV4dHJhLG49ZS5zdHJva2VDb2xvcixhPWUuZmlsbENvbG9yLGk9ZS5ibGVuZE1vZGUscz1lLnN0cm9rZUFscGhhLGM9ZS5maWxsQWxwaGEsdT1lLnBvaW50c0NhbGxiYWNrLGw9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFLGQ9TnVtYmVyLk1JTl9WQUxVRSxwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO3ZhciB2PXRoaXMuZGF0YS5xdWFkUG9pbnRzO3Z8fCh2PVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7dmFyIHksbT1BKHYpO3RyeXtmb3IobS5zKCk7ISh5PW0ubigpKS5kb25lOyl7dmFyIGI9VCh1KHAseS52YWx1ZSksNCksdz1iWzBdLGs9YlsxXSxTPWJbMl0seD1iWzNdO2w9TWF0aC5taW4obCx3KSxoPU1hdGgubWF4KGgsayksZj1NYXRoLm1pbihmLFMpLGQ9TWF0aC5tYXgoZCx4KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cC5wdXNoKCJRIik7dmFyIE89bmV3IG8uRGljdCh0KSxDPW5ldyBvLkRpY3QodCk7Qy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSk7dmFyIEY9bmV3IGcuU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTtGLmRpY3Q9QyxPLnNldCgiRm0wIixGKTt2YXIgUD1uZXcgby5EaWN0KHQpO2kmJlAuc2V0KCJCTSIsby5OYW1lLmdldChpKSksIm51bWJlciI9PXR5cGVvZiBzJiZQLnNldCgiQ0EiLHMpLCJudW1iZXIiPT10eXBlb2YgYyYmUC5zZXQoImNhIixjKTt2YXIgST1uZXcgby5EaWN0KHQpO0kuc2V0KCJHUzAiLFApO3ZhciBFPW5ldyBvLkRpY3QodCk7RS5zZXQoIkV4dEdTdGF0ZSIsSSksRS5zZXQoIlhPYmplY3QiLE8pO3ZhciBqPW5ldyBvLkRpY3QodCk7ai5zZXQoIlJlc291cmNlcyIsRSk7dmFyIE09dGhpcy5kYXRhLnJlY3Q9W2wsZixoLGRdO2ouc2V0KCJCQm94IixNKSx0aGlzLmFwcGVhcmFuY2U9bmV3IGcuU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKSx0aGlzLmFwcGVhcmFuY2UuZGljdD1qLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsRil9fV0sW3trZXk6ImNyZWF0ZU5ld0Fubm90YXRpb24iLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIGksbyxjLHUsbCxmLGg7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT10LmdldE5ld1RlbXBvcmFyeVJlZigpLGUubmV4dD0zLHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShyLHQsYSk7Y2FzZSAzOnJldHVybiBvPWUuc2VudCxjPVtdLG8/KGw9dC5nZXROZXdUZW1wb3JhcnlSZWYoKSx1PXRoaXMuY3JlYXRlTmV3RGljdChyLHQse2FwUmVmOmx9KSxmPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGwubnVtLGwuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGwsbyxjLGYpLG4ucHVzaCh7cmVmOmwsZGF0YTpjLmpvaW4oIiIpfSkpOnU9dGhpcy5jcmVhdGVOZXdEaWN0KHIsdCx7fSksYy5sZW5ndGg9MCxoPXQuZW5jcnlwdD90LmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsLCgwLHMud3JpdGVPYmplY3QpKGksdSxjLGgpLGUuYWJydXB0KCJyZXR1cm4iLHtyZWY6aSxkYXRhOmMuam9pbigiIil9KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbiIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIGEsaTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0ocix0LG4pO2Nhc2UgMjpyZXR1cm4gYT1lLnNlbnQsaT10aGlzLmNyZWF0ZU5ld0RpY3Qocix0LHthcDphfSksZS5hYnJ1cHQoInJldHVybiIsbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmkseHJlZjp0LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOm4uaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGl9KFUpO3QuTWFya3VwQW5ub3RhdGlvbj1YO3ZhciBIPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGMsdSxsPXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtqKHRoaXMsZiksdD1sLmNhbGwodGhpcyxlKTt2YXIgcj1lLmRpY3QsaT1lLnhyZWYscz10LmRhdGE7dC5yZWY9ZS5yZWYsdC5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLHMuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09cy5maWVsZE5hbWUmJihzLmZpZWxkTmFtZT10Ll9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLHZvaWQgMD09PXMuYWN0aW9ucyYmKHMuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShpLHIsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7dmFyIGM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiViIsZ2V0QXJyYXk6ITB9KTtzLmZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKGMpO3ZhciB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRWIixnZXRBcnJheTohMH0pO2lmKHMuZGVmYXVsdEZpZWxkVmFsdWU9dC5fZGVjb2RlRm9ybVZhbHVlKHUpLHZvaWQgMD09PWMmJmUueGZhRGF0YXNldHMpe3ZhciBoPXQuX3RpdGxlLnN0cjtoJiYodC5faGFzVmFsdWVGcm9tWEZBPSEwLHMuZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUoaCkpfXZvaWQgMD09PWMmJm51bGwhPT1zLmRlZmF1bHRGaWVsZFZhbHVlJiYocy5maWVsZFZhbHVlPXMuZGVmYXVsdEZpZWxkVmFsdWUpLHMuYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxzLmhhc0FwcGVhcmFuY2U9dC5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1zLmZpZWxkVmFsdWUmJm51bGwhPT1zLmZpZWxkVmFsdWV8fHMuaGFzQXBwZWFyYW5jZTt2YXIgZD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGVCJ9KTtzLmZpZWxkVHlwZT1kIGluc3RhbmNlb2Ygby5OYW1lP2QubmFtZTpudWxsO3ZhciBwPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGc9ZS5hY3JvRm9ybS5nZXQoIkRSIiksdj10LmFwcGVhcmFuY2UmJnQuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7cmV0dXJuIHQuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczpwLGFjcm9Gb3JtUmVzb3VyY2VzOmcsYXBwZWFyYW5jZVJlc291cmNlczp2LG1lcmdlZFJlc291cmNlczpvLkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W3AsdixnXSxtZXJnZVN1YkRpY3RzOiEwfSl9LHMuZmllbGRGbGFncz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJGZiJ9KSwoIU51bWJlci5pc0ludGVnZXIocy5maWVsZEZsYWdzKXx8cy5maWVsZEZsYWdzPDApJiYocy5maWVsZEZsYWdzPTApLHMucmVhZE9ubHk9dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKSxzLnJlcXVpcmVkPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRVFVSVJFRCkscy5oaWRkZW49dC5faGFzRmxhZyhzLmFubm90YXRpb25GbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTiksdH1yZXR1cm4gXyhmLFt7a2V5OiJfZGVjb2RlRm9ybVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9KSk6ZSBpbnN0YW5jZW9mIG8uTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfX0se2tleToiaGFzRmllbGRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX19LHtrZXk6ImdldFJvdGF0aW9uTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHI9dCYmdC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwwPT09cilyZXR1cm4gbi5JREVOVElUWV9NQVRSSVg7dmFyIGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGksbyl9fSx7a2V5OiJnZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDAscj10JiZ0LnJvdGF0aW9uO2lmKHZvaWQgMD09PXImJihyPXRoaXMucm90YXRpb24pLCF0aGlzLmJhY2tncm91bmRDb2xvciYmIXRoaXMuYm9yZGVyQ29sb3IpcmV0dXJuIiI7dmFyIG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxvPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIikscz0iIjtpZih0aGlzLmJhY2tncm91bmRDb2xvciYmKHM9IiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKSwiICIpLmNvbmNhdChvLCIgZiAiKSksdGhpcy5ib3JkZXJDb2xvcil7dmFyIGM9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MTtzKz0iIi5jb25jYXQoYywiIHcgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYm9yZGVyQ29sb3IsITEpLCIgIikuY29uY2F0KG8sIiBTICIpfXJldHVybiBzfX0se2tleToiZ2V0T3BlcmF0b3JMaXN0Iix2YWx1ZToodT1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixhLGksbyl7dmFyIHMsYyx1LGwsaCxkLHY7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighaXx8dGhpcyBpbnN0YW5jZW9mIFcpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITAsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDI6aWYodGhpcy5faGFzVGV4dCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsdGhpcy5fZ2V0QXBwZWFyYW5jZSh0LHIsYSxvKTtjYXNlIDY6aWYocz1lLnNlbnQsIXRoaXMuYXBwZWFyYW5jZXx8bnVsbCE9PXMpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pKTtjYXNlIDk6aWYoYz1uZXcgcC5PcGVyYXRvckxpc3QsdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UmJm51bGwhPT1zKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9KTtjYXNlIDEyOmlmKHU9WzEsMCwwLDEsMCwwXSxsPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGg9Qih0aGlzLmRhdGEucmVjdCxsLHUpLCF0aGlzLm9jKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xOCx0LnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCk7Y2FzZSAxODpkPWUuc2VudDtjYXNlIDE5OnJldHVybiB2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSxjLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LGgsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSwhMV0pLHY9bmV3IGcuU3RyaW5nU3RyZWFtKHMpLGUubmV4dD0yNCx0LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnYsdGFzazpyLHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmN9KTtjYXNlIDI0OnJldHVybiBjLmFkZE9wKG4uT1BTLmVuZEFubm90YXRpb24sW10pLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSksZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX0pO2Nhc2UgMjc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscixuLGEpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfZ2V0TUtEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgby5EaWN0KG51bGwpO3JldHVybiBlJiZ0LnNldCgiUiIsZSksdGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixOKHRoaXMuYm9yZGVyQ29sb3IpKSx0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixOKHRoaXMuYmFja2dyb3VuZENvbG9yKSksdC5zaXplPjA/dDpudWxsfX0se2tleToic2F2ZSIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsaSl7dmFyIGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4LE8sRixQLFQsSSxFLGosTSxfLEwsUj10aGlzO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYz1pP2kuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwLHU9YyYmYy52YWx1ZSxsPWMmJmMucm90YXRpb24sdSE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZ2b2lkIDAhPT11KXtlLm5leHQ9NzticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkF8fHZvaWQgMCE9PWwpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6dT11fHx0aGlzLmRhdGEuZmllbGRWYWx1ZTtjYXNlIDc6aWYodm9pZCAwIT09bHx8dGhpcy5faGFzVmFsdWVGcm9tWEZBfHwhQXJyYXkuaXNBcnJheSh1KXx8IUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLmZpZWxkVmFsdWUpfHx1Lmxlbmd0aCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aHx8IXUuZXZlcnkoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1SLmRhdGEuZmllbGRWYWx1ZVt0XX0pKSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgOTppZih2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKSxmPW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9MTk7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0aGlzLl9nZXRBcHBlYXJhbmNlKHQscixuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxpKTtjYXNlIDE0OmlmKG51bGwhPT0oZj1lLnNlbnQpKXtlLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMTc6ZS5uZXh0PTE5O2JyZWFrO2Nhc2UgMTk6aWYoaD0hMSxmJiZmLm5lZWRBcHBlYXJhbmNlcyYmKGg9ITAsZj1udWxsKSxkPXQueHJlZiwocD1kLmZldGNoSWZSZWYodGhpcy5yZWYpKWluc3RhbmNlb2Ygby5EaWN0KXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6dj1uZXcgby5EaWN0KGQpLHk9QShwLmdldEtleXMoKSk7dHJ5e2Zvcih5LnMoKTshKG09eS5uKCkpLmRvbmU7KSJBUCIhPT0oYj1tLnZhbHVlKSYmdi5zZXQoYixwLmdldFJhdyhiKSl9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIHc9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodi5nZXQoIlQiKXx8IiIpLHZhbHVlOnV9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsYS5pc0FzY2lpKShlKT9lOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCl9LHYuc2V0KCJWIixBcnJheS5pc0FycmF5KHUpP3UubWFwKGspOmsodSkpLChTPXRoaXMuX2dldE1LRGljdChsKSkmJnYuc2V0KCJNSyIsUykseD1kLmVuY3J5cHQsTz14P3guY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pOm51bGwsRj1bXSxQPVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOncsbmVlZEFwcGVhcmFuY2VzOmh9XSxudWxsIT09ZiYmKFQ9ZC5nZXROZXdUZW1wb3JhcnlSZWYoKSxJPW5ldyBvLkRpY3QoZCksdi5zZXQoIkFQIixJKSxJLnNldCgiTiIsVCksRT1udWxsLHgmJihFPXguY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKFQubnVtLFQuZ2VuKSxmPUUuZW5jcnlwdFN0cmluZyhmKSksaj10aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZCksTT1uZXcgZy5TdHJpbmdTdHJlYW0oZiksKF89TS5kaWN0PW5ldyBvLkRpY3QoZCkpLnNldCgiTGVuZ3RoIixmLmxlbmd0aCksXy5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksXy5zZXQoIlJlc291cmNlcyIsaiksXy5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKSwoTD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpKSE9PW4uSURFTlRJVFlfTUFUUklYJiZfLnNldCgiTWF0cml4IixMKSwoMCxzLndyaXRlT2JqZWN0KShULE0sRixFKSxQLnB1c2goe3JlZjpULGRhdGE6Ri5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxGLmxlbmd0aD0wKSx2LnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksKDAscy53cml0ZU9iamVjdCkodGhpcy5yZWYsdixGLE8pLFBbMF0uZGF0YT1GLmpvaW4oIiIpLGUuYWJydXB0KCJyZXR1cm4iLFApO2Nhc2UgNDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXRBcHBlYXJhbmNlIix2YWx1ZToocj1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixvLHMpe3ZhciBjLHUsbCxoLGQscCxnLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLEgscSxHLHosVyxWLFksSyxKLFosUSxlZSx0ZTtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKChjPXM/cy5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDApJiYodT1jLmZvcm1hdHRlZFZhbHVlfHxjLnZhbHVlLGw9Yy5yb3RhdGlvbiksdm9pZCAwIT09bHx8dm9pZCAwIT09dXx8dGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtlLm5leHQ9ODticmVha31pZih0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJiF0aGlzLmFwcGVhcmFuY2Upe2UubmV4dD04O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6aWYoaD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhzKSx2b2lkIDAhPT11KXtlLm5leHQ9MTM7YnJlYWt9aWYodT10aGlzLmRhdGEuZmllbGRWYWx1ZSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIikpO2Nhc2UgMTM6aWYoQXJyYXkuaXNBcnJheSh1KSYmMT09PXUubGVuZ3RoJiYodT11WzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB1LCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLHRoaXMuZGF0YS5jb21ibz8oZD10aGlzLmRhdGEub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydFZhbHVlO3JldHVybiB1PT09dH0pKXx8dGhpcy5kYXRhLm9wdGlvbnNbMF0sdT1kJiZkLmRpc3BsYXlWYWx1ZXx8IiIpOnU9dS50cmltKCksIiIhPT11KXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiUSBFTUMiKSk7Y2FzZSAxODpyZXR1cm4gdm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbikscD0tMSx0aGlzLmRhdGEubXVsdGlMaW5lPyhnPXUuc3BsaXQoL1xyXG4/fFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoIk5GQyIpfSkpLHA9Zy5sZW5ndGgpOmc9W3UucmVwbGFjZSgvXHJcbj98XG4vLCIiKS5ub3JtYWxpemUoIk5GQyIpXSx2PTEseT0yLG09dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYj10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSw5MCE9PWwmJjI3MCE9PWx8fChiPSh3PVttLGJdKVswXSxtPXdbMV0pLHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpLGUubmV4dD0yOSxmLl9nZXRGb250RGF0YSh0LHIsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2Nhc2UgMjk6az1lLnNlbnQsRj1bXSxQPSExLEk9QShnKTt0cnl7Zm9yKEkucygpOyEoRT1JLm4oKSkuZG9uZTspaj1FLnZhbHVlLChNPWsuZW5jb2RlU3RyaW5nKGopKS5sZW5ndGg+MSYmKFA9ITApLEYucHVzaChNLmpvaW4oIiIpKX1jYXRjaChlKXtJLmUoZSl9ZmluYWxseXtJLmYoKX1pZighKFAmJm8mbi5SZW5kZXJpbmdJbnRlbnRGbGFnLlNBVkUpKXtlLm5leHQ9MzY7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtuZWVkQXBwZWFyYW5jZXM6ITB9KTtjYXNlIDM2OmlmKCFQfHwhdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2UubmV4dD01ODticmVha31pZihfPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixMPW5ldyBpLkZha2VVbmljb2RlRm9udCh0LnhyZWYsXyksUj1MLmNyZWF0ZUZvbnRSZXNvdXJjZXMoZy5qb2luKCIiKSksTj1SLmdldFJhdygiRm9udCIpLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7RD10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250IiksQj1BKE4uZ2V0S2V5cygpKTt0cnl7Zm9yKEIucygpOyEoVT1CLm4oKSkuZG9uZTspJD1VLnZhbHVlLEQuc2V0KCQsTi5nZXRSYXcoJCkpfWNhdGNoKGUpe0IuZShlKX1maW5hbGx5e0IuZigpfX1lbHNlIHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5zZXQoIkZvbnQiLE4pO3JldHVybiBYPUwuZm9udE5hbWUubmFtZSxlLm5leHQ9NDUsZi5fZ2V0Rm9udERhdGEodCxyLHtmb250TmFtZTpYLGZvbnRTaXplOjB9LFIpO2Nhc2UgNDU6Zm9yKGs9ZS5zZW50LEg9MCxxPUYubGVuZ3RoO0g8cTtIKyspRltIXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGdbSF0pO0c9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPVgsej10aGlzLl9jb21wdXRlRm9udFNpemUobS0yKnYsYi0yKnksdSxrLHApLFc9VCh6LDMpLFM9V1swXSx4PVdbMV0sTz1XWzJdLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9RyxlLm5leHQ9NjQ7YnJlYWs7Y2FzZSA1ODp0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZHx8KDAsbi53YXJuKSgiX2dldEFwcGVhcmFuY2U6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKSxWPXRoaXMuX2NvbXB1dGVGb250U2l6ZShtLTIqdixiLTIqeSx1LGsscCksWT1UKFYsMyksUz1ZWzBdLHg9WVsxXSxPPVlbMl07Y2FzZSA2NDppZihLPWsuZGVzY2VudCxLPWlzTmFOKEspP24uQkFTRUxJTkVfRkFDVE9SKk86TWF0aC5tYXgobi5CQVNFTElORV9GQUNUT1IqTyxNYXRoLmFicyhLKSp4KSxKPU1hdGgubWluKE1hdGguZmxvb3IoKG0teCkvMiksdiksWj10aGlzLmRhdGEudGV4dEFsaWdubWVudCwhdGhpcy5kYXRhLm11bHRpTGluZSl7ZS5uZXh0PTcwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKFMsRixrLHgsYixtLFoseSxKLEssTyxzKSk7Y2FzZSA3MDppZighdGhpcy5kYXRhLmNvbWIpe2UubmV4dD03MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoUyxrLEZbMF0seCxiLG0seSxKLEssTyxzKSk7Y2FzZSA3MjppZihRPUorSywhKDA9PT1afHxaPjIpKXtlLm5leHQ9NzU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrUysiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUSksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShGWzBdKSwiKSBUaiIpKyIgRVQgUSBFTUMiKTtjYXNlIDc1OnJldHVybiBlZT17c2hpZnQ6MH0sdGU9dGhpcy5fcmVuZGVyVGV4dChGWzBdLGsseCxiLFosZWUseSxRKSxlLmFicnVwdCgicmV0dXJuIiwiL1R4IEJNQyBxICIuY29uY2F0KGgsIkJUICIpK1MrIiAxIDAgMCAxIDAgMCBUbSAiLmNvbmNhdCh0ZSkrIiBFVCBRIEVNQyIpO2Nhc2UgNzg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2dldFRleHRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFyc1RvR2x5cGhzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LndpZHRofSksMCkvMWUzfX0se2tleToiX2NvbXB1dGVGb250U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxvKXt2YXIgcz10aGlzLGM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSx1PShjfHwxMikqbi5MSU5FX0ZBQ1RPUixsPU1hdGgucm91bmQoZS91KTtpZighYyl7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoMTAwKmUpLzEwMH07aWYoLTE9PT1vKXt2YXIgaD10aGlzLl9nZXRUZXh0V2lkdGgocixhKTtjPWYoTWF0aC5taW4oZS9uLkxJTkVfRkFDVE9SLGg+dD90L2g6MS8wKSksbD0xfWVsc2V7dmFyIGQscD1yLnNwbGl0KC9cclxuP3xcbi8pLGc9W10sdj1BKHApO3RyeXtmb3Iodi5zKCk7IShkPXYubigpKS5kb25lOyl7dmFyIHk9ZC52YWx1ZSxtPWEuZW5jb2RlU3RyaW5nKHkpLmpvaW4oIiIpLGI9YS5jaGFyc1RvR2x5cGhzKG0pLHc9YS5nZXRDaGFyUG9zaXRpb25zKG0pO2cucHVzaCh7bGluZTptLGdseXBoczpiLHBvc2l0aW9uczp3fSl9fWNhdGNoKGUpe3YuZShlKX1maW5hbGx5e3YuZigpfXZhciBrPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wLGk9MCxvPWc7aTxvLmxlbmd0aDtpKyspe3ZhciBjPW9baV07aWYoKG4rPXMuX3NwbGl0TGluZShudWxsLGEscix0LGMpLmxlbmd0aCpyKT5lKXJldHVybiEwfXJldHVybiExfTtmb3IobD1NYXRoLm1heChsLG8pO2soYz1mKCh1PWUvbCkvbi5MSU5FX0ZBQ1RPUikpOylsKyt9dmFyIFM9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx4PVMuZm9udE5hbWUsTz1TLmZvbnRDb2xvcjt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6Yyxmb250TmFtZTp4LGZvbnRDb2xvcjpPfSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLGMsZS9sXX19LHtrZXk6Il9yZW5kZXJUZXh0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMpe3ZhciB1O3U9MT09PWk/KG4tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqcikvMjoyPT09aT9uLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKnItczpzO3ZhciBsPSgwLGEubnVtYmVyVG9TdHJpbmcpKHUtby5zaGlmdCk7cmV0dXJuIG8uc2hpZnQ9dSxjPSgwLGEubnVtYmVyVG9TdHJpbmcpKGMpLCIiLmNvbmNhdChsLCIgIikuY29uY2F0KGMsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShlKSwiKSBUaiIpfX0se2tleToiX2dldFNhdmVGaWVsZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmllbGRSZXNvdXJjZXMscj10LmxvY2FsUmVzb3VyY2VzLG49dC5hcHBlYXJhbmNlUmVzb3VyY2VzLGE9dC5hY3JvRm9ybVJlc291cmNlcyxpPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEmJnRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udE5hbWU7aWYoIWkpcmV0dXJuIHJ8fG8uRGljdC5lbXB0eTtmb3IodmFyIHM9MCxjPVtyLG5dO3M8Yy5sZW5ndGg7cysrKXt2YXIgdT1jW3NdO2lmKHUgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBsPXUuZ2V0KCJGb250Iik7aWYobCBpbnN0YW5jZW9mIG8uRGljdCYmbC5oYXMoaSkpcmV0dXJuIHV9fWlmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBmPWEuZ2V0KCJGb250Iik7aWYoZiBpbnN0YW5jZW9mIG8uRGljdCYmZi5oYXMoaSkpe3ZhciBoPW5ldyBvLkRpY3QoZSk7aC5zZXQoaSxmLmdldFJhdyhpKSk7dmFyIGQ9bmV3IG8uRGljdChlKTtyZXR1cm4gZC5zZXQoIkZvbnQiLGgpLG8uRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbZCxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxvLkRpY3QuZW1wdHl9fSx7a2V5OiJnZXRGaWVsZE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19XSxbe2tleToiX2dldEZvbnREYXRhIix2YWx1ZToodD1QKEMoKS5tYXJrKChmdW5jdGlvbiBlKHQscixuLGEpe3ZhciBpLHMsYyx1O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9bmV3IHAuT3BlcmF0b3JMaXN0LHM9e2ZvbnQ6bnVsbCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sYz1uLmZvbnROYW1lLHU9bi5mb250U2l6ZSxlLm5leHQ9NSx0LmhhbmRsZVNldEZvbnQoYSxbYyYmby5OYW1lLmdldChjKSx1XSxudWxsLGkscixzLG51bGwpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscy5mb250KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZn0oVSkscT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBpO2oodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlKSkuX2hhc1RleHQ9ITA7dmFyIG89ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgaS5kYXRhLmZpZWxkVmFsdWUmJihpLmRhdGEuZmllbGRWYWx1ZT0iIik7dmFyIHM9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpvLGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIocyl8fHM8MHx8cz4yKSYmKHM9bnVsbCksaS5kYXRhLnRleHRBbGlnbm1lbnQ9czt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJNYXhMZW4ifSk7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxjPDApJiYoYz0wKSxpLmRhdGEubWF4TGVuPWMsaS5kYXRhLm11bHRpTGluZT1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSxpLmRhdGEuY29tYj1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIWkuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiFpLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT1pLmRhdGEubWF4TGVuLGkuZGF0YS5kb05vdFNjcm9sbD1pLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpLGl9cmV0dXJuIF8ocixbe2tleToiX2dldENvbWJBcHBlYXJhbmNlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksbyxzLGMsdSxsLGYpe3ZhciBoLGQ9aS90aGlzLmRhdGEubWF4TGVuLHA9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoZiksZz1bXSx2PUEodC5nZXRDaGFyUG9zaXRpb25zKHIpKTt0cnl7Zm9yKHYucygpOyEoaD12Lm4oKSkuZG9uZTspe3ZhciB5PVQoaC52YWx1ZSwyKSxtPXlbMF0sYj15WzFdO2cucHVzaCgiKCIuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShyLnN1YnN0cmluZyhtLGIpKSwiKSBUaiIpKX19Y2F0Y2goZSl7di5lKGUpfWZpbmFsbHl7di5mKCl9dmFyIHc9Zy5qb2luKCIgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZCksIiAwIFRkICIpKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KHAsIkJUICIpK2UrIiAxIDAgMCAxICIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKHMpLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKGMrdSksIiBUbSAiKS5jb25jYXQodykrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixpLG8scyxjLHUsbCxmLGgpe2Zvcih2YXIgZD1bXSxwPWktMipjLGc9e3NoaWZ0OjB9LHY9MCx5PXQubGVuZ3RoO3Y8eTt2KyspZm9yKHZhciBtPXRbdl0sYj10aGlzLl9zcGxpdExpbmUobSxyLG4scCksdz0wLGs9Yi5sZW5ndGg7dzxrO3crKyl7dmFyIFM9Ylt3XSx4PTA9PT12JiYwPT09dz8tdS0oZi1sKTotZjtkLnB1c2godGhpcy5fcmVuZGVyVGV4dChTLHIsbixpLHMsZyxjLHgpKX12YXIgTz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhoKSxBPWQuam9pbigiXG4iKTtyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KE8sIkJUICIpK2UrIiAxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiBUbSAiKS5jb25jYXQoQSkrIiBFVCBRIEVNQyJ9fSx7a2V5OiJfc3BsaXRMaW5lIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1hLmxpbmV8fGU7dmFyIGk9YS5nbHlwaHN8fHQuY2hhcnNUb0dseXBocyhlKTtpZihpLmxlbmd0aDw9MSlyZXR1cm5bZV07Zm9yKHZhciBvPWEucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSkscz1yLzFlMyxjPVtdLHU9LTEsbD0tMSxmPS0xLGg9MCxkPTAscD0wLGc9aS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9VChvW3BdLDIpLHk9dlswXSxtPXZbMV0sYj1pW3BdLHc9Yi53aWR0aCpzOyIgIj09PWIudW5pY29kZT9kK3c+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcsdT0tMSxmPS0xKTooZCs9dyx1PXksbD1tLGY9cCk6ZCt3Pm4/LTEhPT11PyhjLnB1c2goZS5zdWJzdHJpbmcoaCxsKSksaD1sLHA9ZisxLHU9LTEsZD0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGgseSkpLGg9eSxkPXcpOmQrPXd9cmV0dXJuIGg8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhoLGUubGVuZ3RoKSksY319LHtrZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1dKSxyfShIKSxHPWZ1bmN0aW9uKGUpe20oZixlKTt2YXIgdCxyLGksYyx1PXcoZik7ZnVuY3Rpb24gZihlKXt2YXIgdDtyZXR1cm4gaih0aGlzLGYpLCh0PXUuY2FsbCh0aGlzLGUpKS5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsLHQuZGF0YS5jaGVja0JveD0hdC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucmFkaW9CdXR0b249dC5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0LmRhdGEucHVzaEJ1dHRvbj10Lmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksdC5kYXRhLmlzVG9vbHRpcE9ubHk9ITEsdC5kYXRhLmNoZWNrQm94P3QuX3Byb2Nlc3NDaGVja0JveChlKTp0LmRhdGEucmFkaW9CdXR0b24/dC5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnQuZGF0YS5wdXNoQnV0dG9uPyh0LmRhdGEuaGFzT3duQ2FudmFzPSEwLHQuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpKTooMCxuLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKSx0fXJldHVybiBfKGYsW3trZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6KGM9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxpLG8pe3ZhciBzLGMsdSxsLGgsZCxnO3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5wdXNoQnV0dG9uKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIseSh4KGYucHJvdG90eXBlKSwiZ2V0T3BlcmF0b3JMaXN0Iix0aGlzKS5jYWxsKHRoaXMsdCxyLGEsITEsbykpO2Nhc2UgMjppZihzPW51bGwsYz1udWxsLG8mJih1PW8uZ2V0KHRoaXMuZGF0YS5pZCkscz11P3UudmFsdWU6bnVsbCxjPXU/dS5yb3RhdGlvbjpudWxsKSxudWxsIT09c3x8IXRoaXMuYXBwZWFyYW5jZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHkoeChmLnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLHQscixhLGksbykpO2Nhc2UgNzppZihudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpLCEobD1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBoPXRoaXMuYXBwZWFyYW5jZSxkPWwuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYLGMmJmwuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChvKSksdGhpcy5hcHBlYXJhbmNlPWwsZz15KHgoZi5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyx0LHIsYSxpLG8pLHRoaXMuYXBwZWFyYW5jZT1oLGwuZGljdC5zZXQoIk1hdHJpeCIsZCksZS5hYnJ1cHQoInJldHVybiIsZyk7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InNhdmUiLHZhbHVlOihpPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuZGF0YS5jaGVja0JveCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3NhdmVDaGVja2JveCh0LHIsbikpO2Nhc2UgMjppZighdGhpcy5kYXRhLnJhZGlvQnV0dG9uKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKHQscixuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQscil7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlQ2hlY2tib3giLHZhbHVlOihyPVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2O3JldHVybiBDKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYSl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjppZihpPWEuZ2V0KHRoaXMuZGF0YS5pZCksYz1pJiZpLnJvdGF0aW9uLHU9aSYmaS52YWx1ZSx2b2lkIDAhPT1jKXtlLm5leHQ9MTE7YnJlYWt9aWYodm9pZCAwIT09dSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgODppZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSE9PXUpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxMTppZigobD10LnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZikpaW5zdGFuY2VvZiBvLkRpY3Qpe2UubmV4dD0xNDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAxNDpyZXR1cm4gdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09dSYmKHU9dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpLGY9e3BhdGg6KDAsbi5zdHJpbmdUb1BERlN0cmluZykobC5nZXQoIlQiKXx8IiIpLHZhbHVlOnU/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxoPW8uTmFtZS5nZXQodT90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpLGwuc2V0KCJWIixoKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoZD10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLGQpLHA9dC54cmVmLmVuY3J5cHQsZz1udWxsLHAmJihnPXAuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSx0aGlzLnJlZi5nZW4pKSx2PVsiIi5jb25jYXQodGhpcy5yZWYubnVtLCIgIikuY29uY2F0KHRoaXMucmVmLmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShsLHYsZyksdi5wdXNoKCJcbmVuZG9ialxuIiksZS5hYnJ1cHQoInJldHVybiIsW3tyZWY6dGhpcy5yZWYsZGF0YTp2LmpvaW4oIiIpLHhmYTpmfV0pO2Nhc2UgMzA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9zYXZlUmFkaW9CdXR0b24iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLGEpe3ZhciBpLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHc7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihhKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAyOmlmKGk9YS5nZXQodGhpcy5kYXRhLmlkKSxjPWkmJmkucm90YXRpb24sdT1pJiZpLnZhbHVlLHZvaWQgMCE9PWMpe2UubmV4dD0xMTticmVha31pZih2b2lkIDAhPT11KXtlLm5leHQ9ODticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSA4OmlmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlIT09dSl7ZS5uZXh0PTExO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDExOmlmKChsPXQueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKSlpbnN0YW5jZW9mIG8uRGljdCl7ZS5uZXh0PTE0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDE0OnJldHVybiB2b2lkIDA9PT11JiYodT10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbiksZj17cGF0aDooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6dT90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGg9by5OYW1lLmdldCh1P3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIiksZD1udWxsLHA9dC54cmVmLmVuY3J5cHQsdSYmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5SZWY/KGc9dC54cmVmLmZldGNoKHRoaXMucGFyZW50KSx2PW51bGwscCYmKHY9cC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpLGcuc2V0KCJWIixoKSxkPVsiIi5jb25jYXQodGhpcy5wYXJlbnQubnVtLCIgIikuY29uY2F0KHRoaXMucGFyZW50LmdlbiwiIG9ialxuIildLCgwLHMud3JpdGVEaWN0KShnLGQsdiksZC5wdXNoKCJcbmVuZG9ialxuIikpOnRoaXMucGFyZW50IGluc3RhbmNlb2Ygby5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpKSxsLnNldCgiQVMiLGgpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSwoeT10aGlzLl9nZXRNS0RpY3QoYykpJiZsLnNldCgiTUsiLHkpLG09bnVsbCxwJiYobT1wLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSksYj1bIiIuY29uY2F0KHRoaXMucmVmLm51bSwiICIpLmNvbmNhdCh0aGlzLnJlZi5nZW4sIiBvYmpcbiIpXSwoMCxzLndyaXRlRGljdCkobCxiLG0pLGIucHVzaCgiXG5lbmRvYmpcbiIpLHc9W3tyZWY6dGhpcy5yZWYsZGF0YTpiLmpvaW4oIiIpLHhmYTpmfV0sbnVsbCE9PWQmJncucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbH0pLGUuYWJydXB0KCJyZXR1cm4iLHcpO2Nhc2UgMzM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGM9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sdT1bMCwwLHMsY10sbD0uOCpNYXRoLm1pbihzLGMpOyJjaGVjayI9PT10PyhyPXt3aWR0aDouNzU1KmwsaGVpZ2h0Oi43MDUqbH0saT0iMyIpOiJkaXNjIj09PXQ/KHI9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfSxpPSJsIik6KDAsbi51bnJlYWNoYWJsZSkoIl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAiLmNvbmNhdCh0KSk7dmFyIGY9KDAsYS5udW1iZXJUb1N0cmluZykoKHMtci53aWR0aCkvMiksaD0oMCxhLm51bWJlclRvU3RyaW5nKSgoYy1yLmhlaWdodCkvMiksZD0icSBCVCAvUGRmSnNaYURiICIuY29uY2F0KGwsIiBUZiAwIGcgIikuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIFRkICgiKS5jb25jYXQoaSwiKSBUaiBFVCBRIikscD1uZXcgby5EaWN0KGUueHJlZik7cC5zZXQoIkZvcm1UeXBlIiwxKSxwLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiRm9ybSIpKSxwLnNldCgiVHlwZSIsby5OYW1lLmdldCgiWE9iamVjdCIpKSxwLnNldCgiQkJveCIsdSkscC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSkscC5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO3ZhciB2PW5ldyBvLkRpY3QoZS54cmVmKSx5PW5ldyBvLkRpY3QoZS54cmVmKTt5LnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpLHYuc2V0KCJGb250Iix5KSxwLnNldCgiUmVzb3VyY2VzIix2KSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBnLlN0cmluZ1N0cmVhbShkKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9cCx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9fSx7a2V5OiJfcHJvY2Vzc0NoZWNrQm94Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXQuZ2V0KCJOIik7aWYociBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIG49dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgbiYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPW4pO3ZhciBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle3ZhciBzPWkuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIk9mZiIhPT1lfSkpO2kubGVuZ3RoPTAsaS5wdXNoKCJPZmYiLHMpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpLHRoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9ci5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJjaGVjayIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9fX19LHtrZXk6Il9wcm9jZXNzUmFkaW9CdXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO3ZhciB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKHQgaW5zdGFuY2VvZiBvLkRpY3Qpe3RoaXMucGFyZW50PWUuZGljdC5nZXRSYXcoIlBhcmVudCIpO3ZhciByPXQuZ2V0KCJWIik7ciBpbnN0YW5jZW9mIG8uTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShyKSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZihuIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgYT1uLmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciBpLHM9QShhLmdldEtleXMoKSk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgYz1pLnZhbHVlO2lmKCJPZmYiIT09Yyl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTticmVha319fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXRoaXMuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKXx8bnVsbCx0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YS5nZXQoIk9mZiIpfHxudWxsLHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH19fX0se2tleToiX3Byb2Nlc3NQdXNoQnV0dG9uIix2YWx1ZTpmdW5jdGlvbihlKXtlLmRpY3QuaGFzKCJBIil8fGUuZGljdC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ/KHRoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSFlLmRpY3QuaGFzKCJBIikmJiFlLmRpY3QuaGFzKCJBQSIpLGwuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOmUuYXR0YWNobWVudHN9KSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX0se2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0iYnV0dG9uIjtyZXR1cm4gdGhpcy5kYXRhLmNoZWNrQm94Pyh0PSJjaGVja2JveCIsZT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbiYmKHQ9InJhZGlvYnV0dG9uIixlPXRoaXMuZGF0YS5idXR0b25WYWx1ZSkse2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8Ik9mZiIsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxleHBvcnRWYWx1ZXM6ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6dH19fSx7a2V5OiJmYWxsYmFja0ZvbnREaWN0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgby5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKSxlLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKSwoMCxuLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGZ9KEgpLHo9ZnVuY3Rpb24oZSl7bShvLGUpO3ZhciB0LHI9dyhvKTtmdW5jdGlvbiBvKGUpe3ZhciB0O2oodGhpcyxvKSx0PXIuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZjt0LmRhdGEub3B0aW9ucz1bXTt2YXIgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Omksa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MCxsPWMubGVuZ3RoO3U8bDt1Kyspe3ZhciBmPXMuZmV0Y2hJZlJlZihjW3VdKSxoPUFycmF5LmlzQXJyYXkoZik7dC5kYXRhLm9wdGlvbnNbdV09e2V4cG9ydFZhbHVlOnQuX2RlY29kZUZvcm1WYWx1ZShoP3MuZmV0Y2hJZlJlZihmWzBdKTpmKSxkaXNwbGF5VmFsdWU6dC5fZGVjb2RlRm9ybVZhbHVlKGg/cy5mZXRjaElmUmVmKGZbMV0pOmYpfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuZGF0YS5maWVsZFZhbHVlP3QuZGF0YS5maWVsZFZhbHVlPVt0LmRhdGEuZmllbGRWYWx1ZV06dC5kYXRhLmZpZWxkVmFsdWV8fCh0LmRhdGEuZmllbGRWYWx1ZT1bXSksdC5kYXRhLmNvbWJvPXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdC5kYXRhLm11bHRpU2VsZWN0PXQuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdC5faGFzVGV4dD0hMCx0fXJldHVybiBfKG8sW3trZXk6ImdldEZpZWxkT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19fSx7a2V5OiJfZ2V0QXBwZWFyYW5jZSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsYSxzKXt2YXIgYyx1LGwsZixoLGQscCxnLHYsbSxiLHcsayxTLE8sRixQLEksRSxqLE0sXyxMLFIsTixELEIsVSwkLFgscSxHLHosVyxWLFksSztyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLmRhdGEuY29tYm8pe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix5KHgoby5wcm90b3R5cGUpLCJfZ2V0QXBwZWFyYW5jZSIsdGhpcykuY2FsbCh0aGlzLHQscixhLHMpKTtjYXNlIDI6aWYoKGw9cz9zLmdldCh0aGlzLmRhdGEuaWQpOnZvaWQgMCkmJih1PWwucm90YXRpb24sYz1sLnZhbHVlKSx2b2lkIDAhPT11fHx2b2lkIDAhPT1jfHx0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDY6Zm9yKHZvaWQgMD09PWM/Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KGMpfHwoYz1bY10pLGY9MSxoPTIsZD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxwPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLDkwIT09dSYmMjcwIT09dXx8KHA9KGc9W2QscF0pWzBdLGQ9Z1sxXSksdj10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsbT1bXSxiPTA7Yjx2O2IrKyl3PXRoaXMuZGF0YS5vcHRpb25zW2JdLmV4cG9ydFZhbHVlLGMuaW5jbHVkZXModykmJm0ucHVzaChiKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSksZS5uZXh0PTE4LEguX2dldEZvbnREYXRhKHQscix0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y2FzZSAxODppZihrPWUuc2VudCxPPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUpUz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle0Y9KGQtZikvdixQPS0xLEU9QSh0aGlzLmRhdGEub3B0aW9ucyk7dHJ5e2ZvcihFLnMoKTshKGo9RS5uKCkpLmRvbmU7KU09ai52YWx1ZS5kaXNwbGF5VmFsdWUsKF89dGhpcy5fZ2V0VGV4dFdpZHRoKE0saykpPlAmJihQPV8sST1NKX1jYXRjaChlKXtFLmUoZSl9ZmluYWxseXtFLmYoKX1MPXRoaXMuX2NvbXB1dGVGb250U2l6ZShGLHAtMipoLEksaywtMSksUj1UKEwsMiksUz1SWzBdLE89UlsxXX1pZihOPU8qbi5MSU5FX0ZBQ1RPUixEPShOLU8pLzIsQj1NYXRoLmZsb29yKGQvTiksMT09PW0ubGVuZ3RoPygkPW1bMF0sVT0kLSQlQik6VT1tLmxlbmd0aD9tWzBdOjAsWD1NYXRoLm1pbihVK0IrMSx2KSxxPVsiL1R4IEJNQyBxIiwiMSAxICIuY29uY2F0KHAsIiAiKS5jb25jYXQoZCwiIHJlIFcgbiIpXSxtLmxlbmd0aCl7cS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpLEc9QShtKTt0cnl7Zm9yKEcucygpOyEoej1HLm4oKSkuZG9uZTspVz16LnZhbHVlLFU8PVcmJlc8WCYmcS5wdXNoKCIxICIuY29uY2F0KGQtKFctVSsxKSpOLCIgIikuY29uY2F0KHAsIiAiKS5jb25jYXQoTiwiIHJlIGYiKSl9Y2F0Y2goZSl7Ry5lKGUpfWZpbmFsbHl7Ry5mKCl9fWZvcihxLnB1c2goIkJUIixTLCIxIDAgMCAxIDAgIi5jb25jYXQoZCwiIFRtIikpLFY9e3NoaWZ0OjB9LGI9VTtiPFg7YisrKVk9dGhpcy5kYXRhLm9wdGlvbnNbYl0uZGlzcGxheVZhbHVlLEs9Yj09PVU/RDowLHEucHVzaCh0aGlzLl9yZW5kZXJUZXh0KFksayxPLHAsMCxWLGgsLU4rSykpO3JldHVybiBxLnB1c2goIkVUIFEgRU1DIiksZS5hYnJ1cHQoInJldHVybiIscS5qb2luKCJcbiIpKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksb30oSCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBqKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmRhdGEuZmllbGRWYWx1ZT1udWxsLG59cmV0dXJuIF8ocixbe2tleToiZ2V0RmllbGRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19XSkscn0oSCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdDtyZXR1cm4gYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxhLmRhdGEuaGFzQXBwZWFyYW5jZT9hLmRhdGEubmFtZT0iTm9JY29uIjooYS5kYXRhLnJlY3RbMV09YS5kYXRhLnJlY3RbM10tMjIsYS5kYXRhLnJlY3RbMl09YS5kYXRhLnJlY3RbMF0rMjIsYS5kYXRhLm5hbWU9aS5oYXMoIk5hbWUiKT9pLmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUiKSxpLmhhcygiU3RhdGUiKT8oYS5kYXRhLnN0YXRlPWkuZ2V0KCJTdGF0ZSIpfHxudWxsLGEuZGF0YS5zdGF0ZU1vZGVsPWkuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGwpOihhLmRhdGEuc3RhdGU9bnVsbCxhLmRhdGEuc3RhdGVNb2RlbD1udWxsKSxhfXJldHVybiBfKHIpfShYKSxZPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElOSzt2YXIgaT1EKGUuZGljdCxhLnJlY3RhbmdsZSk7cmV0dXJuIGkmJihhLmRhdGEucXVhZFBvaW50cz1pKSxhLmRhdGEuYm9yZGVyQ29sb3I9YS5kYXRhLmJvcmRlckNvbG9yfHxhLmRhdGEuY29sb3IsbC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6YS5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pLGF9cmV0dXJuIF8ocil9KFUpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Q7YS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVA7dmFyIHM9aS5nZXQoIlBhcmVudCIpO2lmKCFzKXJldHVybigwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpLGsoYSk7dmFyIGM9cy5nZXQoIlN1YnR5cGUiKTthLmRhdGEucGFyZW50VHlwZT1jIGluc3RhbmNlb2Ygby5OYW1lP2MubmFtZTpudWxsO3ZhciB1PWkuZ2V0UmF3KCJQYXJlbnQiKTthLmRhdGEucGFyZW50SWQ9dSBpbnN0YW5jZW9mIG8uUmVmP3UudG9TdHJpbmcoKTpudWxsO3ZhciBsPXMuZ2V0QXJyYXkoIlJlY3QiKTtBcnJheS5pc0FycmF5KGwpJiY0PT09bC5sZW5ndGg/YS5kYXRhLnBhcmVudFJlY3Q9bi5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6YS5kYXRhLnBhcmVudFJlY3Q9WzAsMCwwLDBdO3ZhciBmPXMuZ2V0KCJSVCIpO2lmKCgwLG8uaXNOYW1lKShmLG4uQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihzPXMuZ2V0KCJJUlQiKSkscy5oYXMoIk0iKT8oYS5zZXRNb2RpZmljYXRpb25EYXRlKHMuZ2V0KCJNIikpLGEuZGF0YS5tb2RpZmljYXRpb25EYXRlPWEubW9kaWZpY2F0aW9uRGF0ZSk6YS5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbCxzLmhhcygiQyIpPyhhLnNldENvbG9yKHMuZ2V0QXJyYXkoIkMiKSksYS5kYXRhLmNvbG9yPWEuY29sb3IpOmEuZGF0YS5jb2xvcj1udWxsLCFhLnZpZXdhYmxlKXt2YXIgaD1zLmdldCgiRiIpO2EuX2lzVmlld2FibGUoaCkmJmEuc2V0RmxhZ3MoaCl9cmV0dXJuIGEuc2V0VGl0bGUocy5nZXQoIlQiKSksYS5kYXRhLnRpdGxlT2JqPWEuX3RpdGxlLGEuc2V0Q29udGVudHMocy5nZXQoIkNvbnRlbnRzIikpLGEuZGF0YS5jb250ZW50c09iaj1hLl9jb250ZW50cyxzLmhhcygiUkMiKSYmKGEuZGF0YS5yaWNoVGV4dD12LlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwocy5nZXQoIlJDIikpKSxhfXJldHVybiBfKHIpfShVKTt0LlBvcHVwQW5ub3RhdGlvbj1LO3ZhciBKPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLnhyZWY7aWYodC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQsdC5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSwhdC5hcHBlYXJhbmNlJiZ0Ll9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7dmFyIG89bmV3IGkuRmFrZVVuaWNvZGVGb250KGEsInNhbnMtc2VyaWYiKSxjPXQuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dC5hcHBlYXJhbmNlPW8uY3JlYXRlQXBwZWFyYW5jZSh0Ll9jb250ZW50cy5zdHIsdC5yZWN0YW5nbGUsdC5yb3RhdGlvbixjLmZvbnRTaXplfHwxMCxjLmZvbnRDb2xvciksdC5fc3RyZWFtcy5wdXNoKHQuYXBwZWFyYW5jZSxpLkZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW0pfWVsc2UgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO3JldHVybiB0fXJldHVybiBfKHMsW3trZXk6Imhhc1RleHRDb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYXBwZWFyYW5jZX19XSxbe2tleToiY3JlYXRlTmV3RGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXIuYXBSZWYsYz1yLmFwLHU9ZS5jb2xvcixsPWUuZm9udFNpemUsZj1lLnJlY3QsaD1lLnJvdGF0aW9uLGQ9ZS51c2VyLHA9ZS52YWx1ZSxnPW5ldyBvLkRpY3QodCk7Zy5zZXQoIlR5cGUiLG8uTmFtZS5nZXQoIkFubm90IikpLGcuc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGcmVlVGV4dCIpKSxnLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxnLnNldCgiUmVjdCIsZik7dmFyIHY9Ii9IZWx2ICIuY29uY2F0KGwsIiBUZiAiKS5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodSwhMCkpO2lmKGcuc2V0KCJEQSIsdiksZy5zZXQoIkNvbnRlbnRzIiwoMCxhLmlzQXNjaWkpKHApP3A6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShwLCEwKSksZy5zZXQoIkYiLDQpLGcuc2V0KCJCb3JkZXIiLFswLDAsMF0pLGcuc2V0KCJSb3RhdGUiLGgpLGQmJmcuc2V0KCJUIiwoMCxhLmlzQXNjaWkpKGQpP2Q6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShkLCEwKSksc3x8Yyl7dmFyIHk9bmV3IG8uRGljdCh0KTtnLnNldCgiQVAiLHkpLHM/eS5zZXQoIk4iLHMpOnkuc2V0KCJOIixjKX1yZXR1cm4gZ319LHtrZXk6ImNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0iLHZhbHVlOih0PVAoQygpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLHMpe3ZhciBjLHUsbCxmLGgsZCxwLHYseSxtLGIsdyxrLFMseCxPLEYsUCxJLEUsaixNLF8sTCxSLE4sRCxCLFUsJCxYLHEsRyx6LFcsVixZLEssSixaLFEsZWUsdGUscmUsbmUsYWUsaWUsb2Usc2U7cmV0dXJuIEMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gYz1zLmJhc2VGb250UmVmLHU9cy5ldmFsdWF0b3IsbD1zLnRhc2ssZj10LmNvbG9yLGg9dC5mb250U2l6ZSxkPXQucmVjdCxwPXQucm90YXRpb24sdj10LnZhbHVlLHk9bmV3IG8uRGljdChyKSxtPW5ldyBvLkRpY3QociksYz9tLnNldCgiSGVsdiIsYyk6KChiPW5ldyBvLkRpY3QocikpLnNldCgiQmFzZUZvbnQiLG8uTmFtZS5nZXQoIkhlbHZldGljYSIpKSxiLnNldCgiVHlwZSIsby5OYW1lLmdldCgiRm9udCIpKSxiLnNldCgiU3VidHlwZSIsby5OYW1lLmdldCgiVHlwZTEiKSksYi5zZXQoIkVuY29kaW5nIixvLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksbS5zZXQoIkhlbHYiLGIpKSx5LnNldCgiRm9udCIsbSksZS5uZXh0PTgsSC5fZ2V0Rm9udERhdGEodSxsLHtmb250TmFtZToiSGVsdmV0aWNhIixmb250U2l6ZTpofSx5KTtjYXNlIDg6dz1lLnNlbnQsaz1UKGQsNCksUz1rWzBdLHg9a1sxXSxPPWtbMl0sRj1rWzNdLFA9Ty1TLEk9Ri14LHAlMTgwIT0wJiYoUD0oRT1bSSxQXSlbMF0sST1FWzFdKSxqPXYuc3BsaXQoIlxuIiksTT1oLzFlMyxfPS0xLzAsTD1bXSxSPUEoaiksZS5wcmV2PTE4LFIucygpO2Nhc2UgMjA6aWYoKE49Ui5uKCkpLmRvbmUpe2UubmV4dD0zNDticmVha31pZihEPU4udmFsdWUsISgoQj13LmVuY29kZVN0cmluZyhEKSkubGVuZ3RoPjEpKXtlLm5leHQ9MjU7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMjU6RD1CLmpvaW4oIiIpLEwucHVzaChEKSxVPTAsJD13LmNoYXJzVG9HbHlwaHMoRCksWD1BKCQpO3RyeXtmb3IoWC5zKCk7IShxPVgubigpKS5kb25lOylHPXEudmFsdWUsVSs9Ry53aWR0aCpNfWNhdGNoKGUpe1guZShlKX1maW5hbGx5e1guZigpfV89TWF0aC5tYXgoXyxVKTtjYXNlIDMyOmUubmV4dD0yMDticmVhaztjYXNlIDM0OmUubmV4dD0zOTticmVhaztjYXNlIDM2OmUucHJldj0zNixlLnQwPWUuY2F0Y2goMTgpLFIuZShlLnQwKTtjYXNlIDM5OnJldHVybiBlLnByZXY9MzksUi5mKCksZS5maW5pc2goMzkpO2Nhc2UgNDI6Zm9yKHo9MSxfPlAmJih6PVAvXyksVz0xLFY9bi5MSU5FX0ZBQ1RPUipoLFk9bi5MSU5FX0RFU0NFTlRfRkFDVE9SKmgsKEs9VipqLmxlbmd0aCk+SSYmKFc9SS9LKSxKPU1hdGgubWluKHosVyksWj1oKkosUT1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoUCksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSSksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoSStZKSwiIFRtIDAgVGMgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGYsITApKSwiL0hlbHYgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoWiksIiBUZiIpXSxlZT0oMCxhLm51bWJlclRvU3RyaW5nKShWKSx0ZT0wLHJlPUw7dGU8cmUubGVuZ3RoO3RlKyspbmU9cmVbdGVdLFEucHVzaCgiMCAtIi5jb25jYXQoZWUsIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShuZSksIikgVGoiKSk7cmV0dXJuIFEucHVzaCgiRVQiLCJRIiksYWU9US5qb2luKCJcbiIpLChpZT1uZXcgby5EaWN0KHIpKS5zZXQoIkZvcm1UeXBlIiwxKSxpZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZvcm0iKSksaWUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGllLnNldCgiQkJveCIsWzAsMCxQLEldKSxpZS5zZXQoIkxlbmd0aCIsYWUubGVuZ3RoKSxpZS5zZXQoIlJlc291cmNlcyIseSkscCYmKG9lPSgwLGEuZ2V0Um90YXRpb25NYXRyaXgpKHAsUCxJKSxpZS5zZXQoIk1hdHJpeCIsb2UpKSwoc2U9bmV3IGcuU3RyaW5nU3RyZWFtKGFlKSkuZGljdD1pZSxlLmFicnVwdCgicmV0dXJuIixzZSk7Y2FzZSA2NzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE4LDM2LDM5LDQyXV0pfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksc30oWCksWj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5FO3ZhciBzPWkuZ2V0QXJyYXkoIkwiKTtpZihhLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KHMpLGEuc2V0TGluZUVuZGluZ3MoaS5nZXRBcnJheSgiTEUiKSksYS5kYXRhLmxpbmVFbmRpbmdzPWEubGluZUVuZGluZ3MsIWEuYXBwZWFyYW5jZSl7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sdT1pLmdldCgiQ0EiKSxsPVIoaS5nZXRBcnJheSgiSUMiKSxudWxsKSxmPWw/TihsKTpudWxsLGg9Zj91Om51bGwsZD1hLmJvcmRlclN0eWxlLndpZHRofHwxLHA9MipkLGc9W2EuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tcCxhLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLXAsYS5kYXRhLmxpbmVDb29yZGluYXRlc1syXStwLGEuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rcF07bi5VdGlsLmludGVyc2VjdChhLnJlY3RhbmdsZSxnKXx8KGEucmVjdGFuZ2xlPWcpLGEuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOm8sZXh0cmE6IiIuY29uY2F0KGQsIiB3Iiksc3Ryb2tlQ29sb3I6YyxmaWxsQ29sb3I6ZixzdHJva2VBbHBoYTp1LGZpbGxBbHBoYTpoLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoc1swXSwiICIpLmNvbmNhdChzWzFdLCIgbSIpLCIiLmNvbmNhdChzWzJdLCIgIikuY29uY2F0KHNbM10sIiBsIiksIlMiKSxbdFswXS54LWQsdFsxXS54K2QsdFszXS55LWQsdFsxXS55K2RdfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSxRPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUFSRSwhYS5hcHBlYXJhbmNlKXt2YXIgcz1hLmNvbG9yP04oYS5jb2xvcik6WzAsMCwwXSxjPWkuZ2V0KCJDQSIpLHU9UihpLmdldEFycmF5KCJJQyIpLG51bGwpLGw9dT9OKHUpOm51bGwsZj1sP2M6bnVsbDtpZigwPT09YS5ib3JkZXJTdHlsZS53aWR0aCYmIWwpcmV0dXJuIGsoYSk7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoYS5ib3JkZXJTdHlsZS53aWR0aCwiIHciKSxzdHJva2VDb2xvcjpzLGZpbGxDb2xvcjpsLHN0cm9rZUFscGhhOmMsZmlsbEFscGhhOmYscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzJdLngrYS5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K2EuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtYS5ib3JkZXJTdHlsZS53aWR0aCxvPXRbMV0ueS10WzNdLnktYS5ib3JkZXJTdHlsZS53aWR0aDtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChyLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoaSwiICIpLmNvbmNhdChvLCIgcmUiKSksbD9lLnB1c2goIkIiKTplLnB1c2goIlMiKSxbdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX1yZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIiksdT1SKGkuZ2V0QXJyYXkoIklDIiksbnVsbCksbD11P04odSk6bnVsbCxmPWw/YzpudWxsO2lmKDA9PT1hLmJvcmRlclN0eWxlLndpZHRoJiYhbClyZXR1cm4gayhhKTt2YXIgaD00LzMqTWF0aC50YW4oTWF0aC5QSS84KTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiIiLmNvbmNhdChhLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOnMsZmlsbENvbG9yOmwsc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6Zixwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0ueCthLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktYS5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LWEuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSthLmJvcmRlclN0eWxlLndpZHRoLzIscz1yKyhpLXIpLzIsYz1uKyhvLW4pLzIsdT0oaS1yKS8yKmgsZj0oby1uKS8yKmg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQocywiICIpLmNvbmNhdChvLCIgbSIpLCIiLmNvbmNhdChzK3UsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChpLCIgIikuY29uY2F0KGMsIiBjIiksIiIuY29uY2F0KGksIiAiKS5jb25jYXQoYy1mLCIgIikuY29uY2F0KHMrdSwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiIGMiKSwiIi5jb25jYXQocy11LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLWYsIiAiKS5jb25jYXQociwiICIpLmNvbmNhdChjLCIgYyIpLCIiLmNvbmNhdChyLCIgIikuY29uY2F0KGMrZiwiICIpLmNvbmNhdChzLXUsIiAiKS5jb25jYXQobywiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiBjIiksImgiKSxsP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfXJldHVybiBhfXJldHVybiBfKHIpfShYKSx0ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjthLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORSxhLmRhdGEudmVydGljZXM9W10sUyhhKWluc3RhbmNlb2YgcmV8fChhLnNldExpbmVFbmRpbmdzKGkuZ2V0QXJyYXkoIkxFIikpLGEuZGF0YS5saW5lRW5kaW5ncz1hLmxpbmVFbmRpbmdzKTt2YXIgcz1pLmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBrKGEpO2Zvcih2YXIgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrPTIpYS5kYXRhLnZlcnRpY2VzLnB1c2goe3g6c1tjXSx5OnNbYysxXX0pO2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBsLGY9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0saD1pLmdldCgiQ0EiKSxkPWEuYm9yZGVyU3R5bGUud2lkdGh8fDEscD0yKmQsZz1bMS8wLDEvMCwtMS8wLC0xLzBdLHY9QShhLmRhdGEudmVydGljZXMpO3RyeXtmb3Iodi5zKCk7IShsPXYubigpKS5kb25lOyl7dmFyIHk9bC52YWx1ZTtnWzBdPU1hdGgubWluKGdbMF0seS54LXApLGdbMV09TWF0aC5taW4oZ1sxXSx5LnktcCksZ1syXT1NYXRoLm1heChnWzJdLHkueCtwKSxnWzNdPU1hdGgubWF4KGdbM10seS55K3ApfX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1uLlV0aWwuaW50ZXJzZWN0KGEucmVjdGFuZ2xlLGcpfHwoYS5yZWN0YW5nbGU9ZyksYS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiIi5jb25jYXQoZCwiIHciKSxzdHJva2VDb2xvcjpmLHN0cm9rZUFscGhhOmgscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9YS5kYXRhLnZlcnRpY2VzLG49MCxpPXIubGVuZ3RoO248aTtuKyspZS5wdXNoKCIiLmNvbmNhdChyW25dLngsIiAiKS5jb25jYXQocltuXS55LCIgIikuY29uY2F0KDA9PT1uPyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLHJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlHT04sYX1yZXR1cm4gXyhyKX0odGUpLG5lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIGoodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNBUkVULGF9cmV0dXJuIF8ocil9KFgpLGFlPWZ1bmN0aW9uKGUpe20ocyxlKTt2YXIgdCxyPXcocyk7ZnVuY3Rpb24gcyhlKXt2YXIgdDtqKHRoaXMscyksdD1yLmNhbGwodGhpcyxlKTt2YXIgYT1lLmRpY3QsaT1lLnhyZWY7dC5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHQuZGF0YS5pbmtMaXN0cz1bXTt2YXIgbz1hLmdldEFycmF5KCJJbmtMaXN0Iik7aWYoIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGsodCk7Zm9yKHZhciBjPTAsdT1vLmxlbmd0aDtjPHU7KytjKXt0LmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBsPTAsZj1vW2NdLmxlbmd0aDtsPGY7bCs9Mil0LmRhdGEuaW5rTGlzdHNbY10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tjXVtsXSkseTppLmZldGNoSWZSZWYob1tjXVtsKzFdKX0pfWlmKCF0LmFwcGVhcmFuY2Upe3ZhciBoLGQ9dC5jb2xvcj9OKHQuY29sb3IpOlswLDAsMF0scD1hLmdldCgiQ0EiKSxnPXQuYm9yZGVyU3R5bGUud2lkdGh8fDEsdj0yKmcseT1bMS8wLDEvMCwtMS8wLC0xLzBdLG09QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOyl7dmFyIGIsdz1BKGgudmFsdWUpO3RyeXtmb3Iody5zKCk7IShiPXcubigpKS5kb25lOyl7dmFyIFM9Yi52YWx1ZTt5WzBdPU1hdGgubWluKHlbMF0sUy54LXYpLHlbMV09TWF0aC5taW4oeVsxXSxTLnktdikseVsyXT1NYXRoLm1heCh5WzJdLFMueCt2KSx5WzNdPU1hdGgubWF4KHlbM10sUy55K3YpfX1jYXRjaChlKXt3LmUoZSl9ZmluYWxseXt3LmYoKX19fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfW4uVXRpbC5pbnRlcnNlY3QodC5yZWN0YW5nbGUseSl8fCh0LnJlY3RhbmdsZT15KSx0Ll9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiIiLmNvbmNhdChnLCIgdyIpLHN0cm9rZUNvbG9yOmQsc3Ryb2tlQWxwaGE6cCxwb2ludHNDYWxsYmFjazpmdW5jdGlvbihlLHIpe3ZhciBuLGE9QSh0LmRhdGEuaW5rTGlzdHMpO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyl7Zm9yKHZhciBpPW4udmFsdWUsbz0wLHM9aS5sZW5ndGg7bzxzO28rKyllLnB1c2goIiIuY29uY2F0KGlbb10ueCwiICIpLmNvbmNhdChpW29dLnksIiAiKS5jb25jYXQoMD09PW8/Im0iOiJsIikpO2UucHVzaCgiUyIpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm5bclswXS54LHJbMV0ueCxyWzNdLnksclsxXS55XX19KX1yZXR1cm4gdH1yZXR1cm4gXyhzLG51bGwsW3trZXk6ImNyZWF0ZU5ld0RpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1yLmFwUmVmLGk9ci5hcCxzPWUucGF0aHMsYz1lLnJlY3QsdT1lLnJvdGF0aW9uLGw9bmV3IG8uRGljdCh0KTtsLnNldCgiVHlwZSIsby5OYW1lLmdldCgiQW5ub3QiKSksbC5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkluayIpKSxsLnNldCgiQ3JlYXRpb25EYXRlIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKSxsLnNldCgiUmVjdCIsYyksbC5zZXQoIklua0xpc3QiLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb2ludHN9KSkpLGwuc2V0KCJGIiw0KSxsLnNldCgiQm9yZGVyIixbMCwwLDBdKSxsLnNldCgiUm90YXRlIix1KTt2YXIgZj1uZXcgby5EaWN0KHQpO3JldHVybiBsLnNldCgiQVAiLGYpLGE/Zi5zZXQoIk4iLGEpOmYuc2V0KCJOIixpKSxsfX0se2tleToiY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbSIsdmFsdWU6KHQ9UChDKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIHMsYyx1LGwsZixoLGQscCx2LHksbSxiLHcsayxTLHgsTyxGLFAsSSxFLGosTSxfLEwsUixOLEQsQjtyZXR1cm4gQygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnM9dC5jb2xvcixjPXQucmVjdCx1PXQucm90YXRpb24sbD10LnBhdGhzLGY9dC50aGlja25lc3MsaD10Lm9wYWNpdHksZD1UKGMsNCkscD1kWzBdLHY9ZFsxXSx5PWRbMl0sbT1kWzNdLGI9eS1wLHc9bS12LHUlMTgwIT0wJiYoYj0oaz1bdyxiXSlbMF0sdz1rWzFdKSxTPVsiIi5jb25jYXQoZiwiIHcgMSBKIDEgaiIpLCIiLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKShzLCExKSldLDEhPT1oJiZTLnB1c2goIi9SMCBncyIpLHg9W10sTz1BKGwpO3RyeXtmb3IoTy5zKCk7IShGPU8ubigpKS5kb25lOyl7Zm9yKFA9Ri52YWx1ZS5iZXppZXIseC5sZW5ndGg9MCx4LnB1c2goIiIuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMF0pLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKFBbMV0pLCIgbSIpKSxJPTIsRT1QLmxlbmd0aDtJPEU7SSs9NilqPVAuc2xpY2UoSSxJKzYpLm1hcChhLm51bWJlclRvU3RyaW5nKS5qb2luKCIgIikseC5wdXNoKCIiLmNvbmNhdChqLCIgYyIpKTt4LnB1c2goIlMiKSxTLnB1c2goeC5qb2luKCJcbiIpKX19Y2F0Y2goZSl7Ty5lKGUpfWZpbmFsbHl7Ty5mKCl9cmV0dXJuIE09Uy5qb2luKCJcbiIpLChfPW5ldyBvLkRpY3QocikpLnNldCgiRm9ybVR5cGUiLDEpLF8uc2V0KCJTdWJ0eXBlIixvLk5hbWUuZ2V0KCJGb3JtIikpLF8uc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJYT2JqZWN0IikpLF8uc2V0KCJCQm94IixbMCwwLGIsd10pLF8uc2V0KCJMZW5ndGgiLE0ubGVuZ3RoKSx1JiYoTD0oMCxhLmdldFJvdGF0aW9uTWF0cml4KSh1LGIsdyksXy5zZXQoIk1hdHJpeCIsTCkpLDEhPT1oJiYoUj1uZXcgby5EaWN0KHIpLE49bmV3IG8uRGljdChyKSwoRD1uZXcgby5EaWN0KHIpKS5zZXQoIkNBIixoKSxELnNldCgiVHlwZSIsby5OYW1lLmdldCgiRXh0R1N0YXRlIikpLE4uc2V0KCJSMCIsRCksUi5zZXQoIkV4dEdTdGF0ZSIsTiksXy5zZXQoIlJlc291cmNlcyIsUikpLChCPW5ldyBnLlN0cmluZ1N0cmVhbShNKSkuZGljdD1fLGUuYWJydXB0KCJyZXR1cm4iLEIpO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLHN9KFgpLGllPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe3ZhciBzPWEuYXBwZWFyYW5jZSYmYS5hcHBlYXJhbmNlLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtpZighYS5hcHBlYXJhbmNlfHwhc3x8IXMuaGFzKCJFeHRHU3RhdGUiKSl7YS5hcHBlYXJhbmNlJiYoMCxuLndhcm4pKCJIaWdobGlnaHRBbm5vdGF0aW9uIC0gaWdub3JpbmcgYnVpbHQtaW4gYXBwZWFyYW5jZSBzdHJlYW0uIik7dmFyIGM9YS5jb2xvcj9OKGEuY29sb3IpOlsxLDEsMF0sdT1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGZpbGxDb2xvcjpjLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTp1LHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQodFswXS54LCIgIikuY29uY2F0KHRbMF0ueSwiIG0iKSwiIi5jb25jYXQodFsxXS54LCIgIikuY29uY2F0KHRbMV0ueSwiIGwiKSwiIi5jb25jYXQodFszXS54LCIgIikuY29uY2F0KHRbM10ueSwiIGwiKSwiIi5jb25jYXQodFsyXS54LCIgIikuY29uY2F0KHRbMl0ueSwiIGwiKSwiZiIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIGEuZGF0YS5oYXNQb3B1cD0hMTtyZXR1cm4gYX1yZXR1cm4gXyhyKX0oWCksb2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtqKHRoaXMsciksYT10LmNhbGwodGhpcyxlKTt2YXIgaT1lLmRpY3Qsbz1lLnhyZWY7aWYoYS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLGEuZGF0YS5xdWFkUG9pbnRzPUQoaSxudWxsKSl7aWYoIWEuYXBwZWFyYW5jZSl7dmFyIHM9YS5jb2xvcj9OKGEuY29sb3IpOlswLDAsMF0sYz1pLmdldCgiQ0EiKTthLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpvLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjpzLHN0cm9rZUFscGhhOmMscG9pbnRzQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxvPWUueHJlZjtpZihhLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHRbMF0ueS10WzJdLnkpLzYsbj1yLGE9dFsyXS54LGk9dFsyXS55LG89dFszXS54O2UucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBtIikpO2Rve2ErPTIsbj0wPT09bj9yOjAsZS5wdXNoKCIiLmNvbmNhdChhLCIgIikuY29uY2F0KGkrbiwiIGwiKSl9d2hpbGUoYTxvKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMl0ueCxvLGktMipyLGkrMipyXX19KX19ZWxzZSBhLmRhdGEuaGFzUG9wdXA9ITE7cmV0dXJuIGF9cmV0dXJuIF8ocil9KFgpLGNlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7aih0aGlzLHIpLGE9dC5jYWxsKHRoaXMsZSk7dmFyIGk9ZS5kaWN0LG89ZS54cmVmO2lmKGEuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxhLmRhdGEucXVhZFBvaW50cz1EKGksbnVsbCkpe2lmKCFhLmFwcGVhcmFuY2Upe3ZhciBzPWEuY29sb3I/TihhLmNvbG9yKTpbMCwwLDBdLGM9aS5nZXQoIkNBIik7YS5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6byxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6cyxzdHJva2VBbHBoYTpjLHBvaW50c0NhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQoKHRbMF0ueCt0WzJdLngpLzIsIiAiKSsiIi5jb25jYXQoKHRbMF0ueSt0WzJdLnkpLzIsIiBtIiksIiIuY29uY2F0KCh0WzFdLngrdFszXS54KS8yLCIgIikrIiIuY29uY2F0KCh0WzFdLnkrdFszXS55KS8yLCIgbCIpLCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgYS5kYXRhLmhhc1BvcHVwPSExO3JldHVybiBhfXJldHVybiBfKHIpfShYKSx1ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiBqKHRoaXMsciksKGE9dC5jYWxsKHRoaXMsZSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCxhfXJldHVybiBfKHIpfShYKSxsZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO2oodGhpcyxyKSxhPXQuY2FsbCh0aGlzLGUpO3ZhciBpPWUuZGljdCxzPWUueHJlZixjPW5ldyBoLkZpbGVTcGVjKGkuZ2V0KCJGUyIpLHMpO2EuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULGEuZGF0YS5maWxlPWMuc2VyaWFsaXphYmxlO3ZhciB1PWkuZ2V0KCJOYW1lIik7cmV0dXJuIGEuZGF0YS5uYW1lPXUgaW5zdGFuY2VvZiBvLk5hbWU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodS5uYW1lKToiUHVzaFBpbiIsYX1yZXR1cm4gXyhyKX0oWCl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbnRTaXplLHI9ZS5mb250TmFtZSxuPWUuZm9udENvbG9yO3JldHVybiIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KHcobiwhMCkpfSx0LmdldFBkZkNvbG9yPXcsdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKS5wYXJzZSgpfTt2YXIgYT1yKDEzNCksaT1yKDEzNSksbz1yKDIpLHM9cigxNDMpLGM9cigxNDQpLHU9cigxMzkpO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWgoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2QoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtyZXR1cm4geT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHkoZSx0KX1mdW5jdGlvbiBtKGUpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxtKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ5KGUsdCl9KGMsZSk7dmFyIHQscixpPSh0PWMscj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSxhPW0odCk7aWYocil7dmFyIGk9bSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2UgZT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gcCh0aGlzLGMpLGkuY2FsbCh0aGlzLG5ldyB1LlN0cmluZ1N0cmVhbShlKSl9cmV0dXJuIHYoYyxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOylpZigwPT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKXt2YXIgcj1lLmZuLG49ZS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugby5PUFMuc2V0Rm9udDp2YXIgaT1mKG4sMiksYz1pWzBdLHU9aVsxXTtjIGluc3RhbmNlb2YgYS5OYW1lJiYodC5mb250TmFtZT1jLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgdSYmdT4wJiYodC5mb250U2l6ZT11KTticmVhaztjYXNlIG8uT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShuLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBvLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2Ugby5PUFMuc2V0RmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLG8ud2FybikoJ3BhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4gdH19XSksY30oYy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IpO2Z1bmN0aW9uIHcoZSx0KXtpZihlWzBdPT09ZVsxXSYmZVsxXT09PWVbMl0pe3ZhciByPWVbMF0vMjU1O3JldHVybiIiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShyKSwiICIpLmNvbmNhdCh0PyJnIjoiRyIpfXJldHVybiBBcnJheS5mcm9tKGUsKGZ1bmN0aW9uKGUpe3JldHVybigwLGkubnVtYmVyVG9TdHJpbmcpKGUvMjU1KX0pKS5qb2luKCIgIikrIiAiLmNvbmNhdCh0PyJyZyI6IlJHIil9dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMueHJlZj10LHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9cjt2YXIgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSk7dGhpcy5jdHhNZWFzdXJlPW4uZ2V0Q29udGV4dCgiMmQiKSxlLl9mb250TmFtZUlkfHwoZS5fZm9udE5hbWVJZD0xKSx0aGlzLmZvbnROYW1lPWEuTmFtZS5nZXQoIkludmFsaWRQREZqc0ZvbnRfIi5jb25jYXQociwiXyIpLmNvbmNhdChlLl9mb250TmFtZUlkKyspKX1yZXR1cm4gdihlLFt7a2V5OiJ0b1VuaWNvZGVSZWYiLGdldDpmdW5jdGlvbigpe2lmKCFlLl90b1VuaWNvZGVSZWYpe3ZhciB0PWUudG9Vbmljb2RlU3RyZWFtPW5ldyB1LlN0cmluZ1N0cmVhbSgiL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIikscj1uZXcgYS5EaWN0KHRoaXMueHJlZik7dC5kaWN0PXIsci5zZXQoIkxlbmd0aCIsMzQ2KSxlLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX3RvVW5pY29kZVJlZn19LHtrZXk6ImZvbnREZXNjcmlwdG9yUmVmIixnZXQ6ZnVuY3Rpb24oKXtpZighZS5fZm9udERlc2NyaXB0b3JSZWYpe3ZhciB0PW5ldyBhLkRpY3QodGhpcy54cmVmKTt0LnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSksdC5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKSx0LnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIiksdC5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pLHQuc2V0KCJGb250U3RyZXRjaCIsYS5OYW1lLmdldCgiTm9ybWFsIikpLHQuc2V0KCJGb250V2VpZ2h0Iiw0MDApLHQuc2V0KCJJdGFsaWNBbmdsZSIsMCksZS5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGUuX2ZvbnREZXNjcmlwdG9yUmVmfX0se2tleToiZGVzY2VuZGFudEZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJGb250IikpLGUuc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJDSURGb250VHlwZTAiKSksZS5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxlLnNldCgiRmlyc3RDaGFyIix0aGlzLmZpcnN0Q2hhciksZS5zZXQoIkxhc3RDaGFyIix0aGlzLmxhc3RDaGFyKSxlLnNldCgiRm9udERlc2NyaXB0b3IiLHRoaXMuZm9udERlc2NyaXB0b3JSZWYpLGUuc2V0KCJEVyIsMWUzKTt2YXIgdCxyLG49W10saT1udWxsLG89bnVsbCxzPWwoKHI9dGhpcy53aWR0aHMuZW50cmllcygpLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGQoZSl9KHIpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHIpfHxoKHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKS5zb3J0KCkpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9Zih0LnZhbHVlLDIpLHU9Y1swXSxwPWNbMV07aT91PT09aStvLmxlbmd0aD9vLnB1c2gocCk6KG4ucHVzaChpLG8pLGk9dSxvPVtwXSk6KGk9dSxvPVtwXSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWkmJm4ucHVzaChpLG8pLGUuc2V0KCJXIixuKTt2YXIgZz1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIGcuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksZy5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxnLnNldCgiU3VwcGxlbWVudCIsMCksZS5zZXQoIkNJRFN5c3RlbUluZm8iLGcpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToiYmFzZUZvbnRSZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBhLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixhLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5EaWN0KHRoaXMueHJlZiksdD1uZXcgYS5EaWN0KHRoaXMueHJlZik7cmV0dXJuIHQuc2V0KHRoaXMuZm9udE5hbWUubmFtZSx0aGlzLmJhc2VGb250UmVmKSxlLnNldCgiRm9udCIsdCksZX19LHtrZXk6Il9jcmVhdGVDb250ZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRocz1uZXcgTWFwLHRoaXMuY3R4TWVhc3VyZS5mb250PSIxMDAwcHggIi5jb25jYXQodGhpcy5mb250RmFtaWx5KSx0aGlzLmN0eE1lYXN1cmV9fSx7a2V5OiJjcmVhdGVGb250UmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxuPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYSxpPWwodC52YWx1ZS5zcGxpdCgiIikpO3RyeXtmb3IoaS5zKCk7IShhPWkubigpKS5kb25lOyl7dmFyIG89YS52YWx1ZSxzPW8uY2hhckNvZGVBdCgwKTtpZighdGhpcy53aWR0aHMuaGFzKHMpKXt2YXIgYz1yLm1lYXN1cmVUZXh0KG8pLHU9TWF0aC5jZWlsKGMud2lkdGgpO3RoaXMud2lkdGhzLnNldChzLHUpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKHMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgocyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHRoaXMucmVzb3VyY2VzfX0se2tleToiY3JlYXRlQXBwZWFyYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixzKXt2YXIgYyxoPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxkPVtdLHA9LTEvMCxnPWwoZS5zcGxpdCgvXHJcbj98XG4vKSk7dHJ5e2ZvcihnLnMoKTshKGM9Zy5uKCkpLmRvbmU7KXt2YXIgdj1jLnZhbHVlO2QucHVzaCh2KTt2YXIgeT1oLm1lYXN1cmVUZXh0KHYpLndpZHRoO3A9TWF0aC5tYXgocCx5KTt2YXIgbSxiPWwodi5zcGxpdCgiIikpO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIGs9bS52YWx1ZSxTPWsuY2hhckNvZGVBdCgwKSx4PXRoaXMud2lkdGhzLmdldChTKTtpZih2b2lkIDA9PT14KXt2YXIgTz1oLm1lYXN1cmVUZXh0KGspO3g9TWF0aC5jZWlsKE8ud2lkdGgpLHRoaXMud2lkdGhzLnNldChTLHgpLHRoaXMuZmlyc3RDaGFyPU1hdGgubWluKFMsdGhpcy5maXJzdENoYXIpLHRoaXMubGFzdENoYXI9TWF0aC5tYXgoUyx0aGlzLmxhc3RDaGFyKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9cCo9bi8xZTM7dmFyIEE9Zih0LDQpLEM9QVswXSxGPUFbMV0sUD1BWzJdLUMsVD1BWzNdLUY7aWYociUxODAhPTApe3ZhciBJPVtULFBdO1A9SVswXSxUPUlbMV19dmFyIEU9MTtwPlAmJihFPVAvcCk7dmFyIGo9MSxNPW8uTElORV9GQUNUT1IqbixfPW8uTElORV9ERVNDRU5UX0ZBQ1RPUipuLEw9TSpkLmxlbmd0aDtMPlQmJihqPVQvTCk7Zm9yKHZhciBSPW4qTWF0aC5taW4oRSxqKSxOPVsicSIsIjAgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShQKSwiICIpLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUKSwiIHJlIFcgbiIpLCJCVCIsIjEgMCAwIDEgMCAiLmNvbmNhdCgoMCxpLm51bWJlclRvU3RyaW5nKShUK18pLCIgVG0gMCBUYyAiKS5jb25jYXQodyhzLCEwKSksIi8iLmNvbmNhdCh0aGlzLmZvbnROYW1lLm5hbWUsIiAiKS5jb25jYXQoKDAsaS5udW1iZXJUb1N0cmluZykoUiksIiBUZiIpXSxEPSgwLGkubnVtYmVyVG9TdHJpbmcpKE0pLEI9MCxVPWQ7QjxVLmxlbmd0aDtCKyspe3ZhciAkPVVbQl07Ti5wdXNoKCIwIC0iLmNvbmNhdChELCIgVGQgPCIpLmNvbmNhdCgoMCxpLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKCQpLCI+IFRqIikpfU4ucHVzaCgiRVQiLCJRIik7dmFyIFg9Ti5qb2luKCJcbiIpLEg9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2lmKEguc2V0KCJTdWJ0eXBlIixhLk5hbWUuZ2V0KCJGb3JtIikpLEguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYT2JqZWN0IikpLEguc2V0KCJCQm94IixbMCwwLFAsVF0pLEguc2V0KCJMZW5ndGgiLFgubGVuZ3RoKSxILnNldCgiUmVzb3VyY2VzIix0aGlzLnJlc291cmNlcykscil7dmFyIHE9KDAsaS5nZXRSb3RhdGlvbk1hdHJpeCkocixQLFQpO0guc2V0KCJNYXRyaXgiLHEpfXZhciBHPW5ldyB1LlN0cmluZ1N0cmVhbShYKTtyZXR1cm4gRy5kaWN0PUgsR319XSksZX0oKTt0LkZha2VVbmljb2RlRm9udD1rfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29sb3JTcGFjZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3AodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIiksdGhpcy5uYW1lPXQsdGhpcy5udW1Db21wcz1yfXZhciB0LHI7cmV0dXJuIHYoZSxbe2tleToiZ2V0UmdiIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtyZXR1cm4gdGhpcy5nZXRSZ2JJdGVtKGUsdCxyLDApLHJ9fSx7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixhLGksbyxzKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuaXNEZWZhdWx0RGVjb2RlKHQsdGhpcy5udW1Db21wcyl9fSx7a2V5OiJmaWxsUmdiIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9dCpyLGw9bnVsbCxmPTE8PG8saD1yIT09YXx8dCE9PW47aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG8pKWw9cztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZ1PmYmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2Zvcih2YXIgZD1vPD04P25ldyBVaW50OEFycmF5KGYpOm5ldyBVaW50MTZBcnJheShmKSxwPTA7cDxmO3ArKylkW3BdPXA7dmFyIGc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqZik7aWYodGhpcy5nZXRSZ2JCdWZmZXIoZCwwLGYsZywwLG8sMCksaCl7bD1uZXcgVWludDhBcnJheSgzKnUpO2Zvcih2YXIgdj0wLHk9MDt5PHU7Kyt5KXt2YXIgbT0zKnNbeV07bFt2KytdPWdbbV0sbFt2KytdPWdbbSsxXSxsW3YrK109Z1ttKzJdfX1lbHNlIGZvcih2YXIgYj0wLHc9MDt3PHU7Kyt3KXt2YXIgaz0zKnNbd107ZVtiKytdPWdba10sZVtiKytdPWdbaysxXSxlW2IrK109Z1trKzJdLGIrPWN9fWVsc2UgaD8obD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KSx0aGlzLmdldFJnYkJ1ZmZlcihzLDAsdSxsLDAsbywwKSk6dGhpcy5nZXRSZ2JCdWZmZXIocywwLG4qaSxlLDAsbyxjKTtpZihsKWlmKGgpIWZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe289MSE9PW8/MDpvO2Zvcih2YXIgcyxjPXIvYSx1PW4vaSxsPTAsZj1uZXcgVWludDE2QXJyYXkoYSksaD0zKnIsZD0wO2Q8YTtkKyspZltkXT0zKk1hdGguZmxvb3IoZCpjKTtmb3IodmFyIHA9MDtwPGk7cCsrKWZvcih2YXIgZz1NYXRoLmZsb29yKHAqdSkqaCx2PTA7djxhO3YrKylzPWcrZlt2XSx0W2wrK109ZVtzKytdLHRbbCsrXT1lW3MrK10sdFtsKytdPWVbcysrXSxsKz1vfShsLGUsdCxyLG4sYSxjKTtlbHNlIGZvcih2YXIgUz0wLHg9MCxPPTAsQT1uKmk7TzxBO08rKyllW1MrK109bFt4KytdLGVbUysrXT1sW3grK10sZVtTKytdPWxbeCsrXSxTKz1jfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9fV0sW3trZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTt2YXIgaSxvO2UgaW5zdGFuY2VvZiBhLlJlZiYmKG89ZSxlPXQuZmV0Y2goZSkpLGUgaW5zdGFuY2VvZiBhLk5hbWUmJihpPWUubmFtZSksKGl8fG8pJiZyLnNldChpLG8sbil9fSx7a2V5OiJnZXRDYWNoZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe3ZhciBuPXIuZ2V0QnlSZWYoZSk7aWYobilyZXR1cm4gbjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBhLk5hbWUpe3ZhciBpPXIuZ2V0QnlOYW1lKGUubmFtZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LHtrZXk6InBhcnNlQXN5bmMiLHZhbHVlOih0PWgoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sYSxpLG8scyxjO3JldHVybiBoKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9dC5jcyxuPXQueHJlZixhPXQucmVzb3VyY2VzLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LnBkZkZ1bmN0aW9uRmFjdG9yeSxzPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsYz10aGlzLl9wYXJzZShyLG4saSxvKSx0aGlzLl9jYWNoZShyLG4scyxjKSxlLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNzLHI9ZS54cmVmLG49ZS5yZXNvdXJjZXMsYT12b2lkIDA9PT1uP251bGw6bixpPWUucGRmRnVuY3Rpb25GYWN0b3J5LG89ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxzPXRoaXMuZ2V0Q2FjaGVkKHQscixvKTtpZihzKXJldHVybiBzO3ZhciBjPXRoaXMuX3BhcnNlKHQscixhLGkpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsbyxjKSxjfX0se2tleToiX3BhcnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBiKG51bGwpO2RlZmF1bHQ6aWYociBpbnN0YW5jZW9mIGEuRGljdCl7dmFyIG89ci5nZXQoIkNvbG9yU3BhY2UiKTtpZihvIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcz1vLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGMsdSxsLGYsaCxkLHA9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7c3dpdGNoKHApe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIGY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXQoIkdhbW1hIiksbmV3IE8oZixoLGQpO2Nhc2UiQ2FsUkdCIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxkPWMuZ2V0QXJyYXkoIkdhbW1hIik7dmFyIGc9Yy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBBKGYsaCxkLGcpO2Nhc2UiSUNDQmFzZWQiOnZhciB2PXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O3U9di5nZXQoIk4iKTt2YXIgeT12LmdldCgiQWx0ZXJuYXRlIik7aWYoeSl7dmFyIGs9dGhpcy5fcGFyc2UoeSx0LHIsaSk7aWYoay5udW1Db21wcz09PXUpcmV0dXJuIGs7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT11KXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09dSlyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4obD1lWzFdfHxudWxsKSYmKGw9dGhpcy5fcGFyc2UobCx0LHIsaSkpLG5ldyBiKGwpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpsPXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO3ZhciBTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHg9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgdyhsLFMseCk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciBGPXQuZmV0Y2hJZlJlZihlWzFdKTt1PUFycmF5LmlzQXJyYXkoRik/Ri5sZW5ndGg6MSxsPXRoaXMuX3BhcnNlKGVbMl0sdCxyLGkpO3ZhciBQPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgbSh1LGwsUCk7Y2FzZSJMYWIiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3ZhciBUPWMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBDKGYsaCxUKTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAiLmNvbmNhdChwKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGUpKX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKHZhciByPTAsYT1lLmxlbmd0aDtyPGE7cis9MilpZigwIT09ZVtyXXx8MSE9PWVbcisxXSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNpbmdsZXRvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJzaW5nbGV0b25zIix7Z2V0IGdyYXkoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZ3JheSIsbmV3IGspfSxnZXQgcmdiKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IFMpfSxnZXQgY215aygpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjbXlrIixuZXcgeCl9fSl9fV0pLGV9KCk7dC5Db2xvclNwYWNlPXk7dmFyIG09ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHAodGhpcyxyKSwoaT10LmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkuYmFzZT1uLGkudGludEZuPWEsaS50bXBCdWY9bmV3IEZsb2F0MzJBcnJheShuLm51bUNvbXBzKSxpfXJldHVybiB2KHIsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxhLDApLHRoaXMuYmFzZS5nZXRSZ2JJdGVtKGEsMCxyLG4pfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU9dGhpcy50aW50Rm4sbD10aGlzLmJhc2UsZj0xLygoMTw8aSktMSksaD1sLm51bUNvbXBzLGQ9bC51c2VzWmVyb1RvT25lUmFuZ2UscD0obC5pc1Bhc3N0aHJvdWdoKDgpfHwhZCkmJjA9PT1vLGc9cD9hOjAsdj1wP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikseT10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheSh5KSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7Zm9yKHM9MDtzPHI7cysrKXtmb3IoYz0wO2M8eTtjKyspbVtjXT1lW3QrK10qZjtpZih1KG0sMCxiLDApLGQpZm9yKGM9MDtjPGg7YysrKXZbZysrXT0yNTUqYltjXTtlbHNlIGwuZ2V0UmdiSXRlbShiLDAsdixnKSxnKz1ofXB8fGwuZ2V0UmdiQnVmZmVyKHYsMCxyLG4sYSw4LG8pfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fV0pLHJ9KHkpLGI9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gcCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkuYmFzZT1lLG59cmV0dXJuIHYocixbe2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1dKSxyfSh5KSx3PWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLG8pe3ZhciBzO3AodGhpcyxyKSwocz10LmNhbGwodGhpcywiSW5kZXhlZCIsMSkpLmJhc2U9ZSxzLmhpZ2hWYWw9YTt2YXIgYz1lLm51bUNvbXBzKmE7aWYocy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYyksbyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSl7dmFyIHU9by5nZXRCeXRlcyhjKTtzLmxvb2t1cC5zZXQodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KG8pKTtmb3IodmFyIGw9MDtsPGM7KytsKXMubG9va3VwW2xdPTI1NSZvLmNoYXJDb2RlQXQobCl9cmV0dXJuIHN9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGM9cy5udW1Db21wcyx1PXMuZ2V0T3V0cHV0TGVuZ3RoKGMsbyksbD10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmM7cy5nZXRSZ2JCdWZmZXIobCxoLDEsbixhLDgsbyksYSs9dX19fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSkscn0oeSksaz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlR3JheSIsMSl9cmV0dXJuIHYocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxjPXQsdT1hLGw9MDtsPHI7KytsKXt2YXIgZj1zKmVbYysrXTtuW3UrK109ZixuW3UrK109ZixuW3UrK109Zix1Kz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSkscn0oeSksUz1mdW5jdGlvbihlKXtzKHIsZSk7dmFyIHQ9dShyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmNhbGwodGhpcywiRGV2aWNlUkdCIiwzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGM9dCx1PWEsbD0wO2w8cjsrK2wpblt1KytdPXMqZVtjKytdLG5bdSsrXT1zKmVbYysrXSxuW3UrK109cyplW2MrK10sdSs9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSxyfSh5KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsYz1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtzKG4sdCk7dmFyIHI9dShuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHAodGhpcyxuKSxyLmNhbGwodGhpcywiRGV2aWNlQ01ZSyIsNCl9cmV0dXJuIHYobixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGM9MS8oKDE8PG8pLTEpLHU9MDt1PG47dSsrKWUodCxyLGMsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLG59KHkpfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksYz1lLllXKnMsdT1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhjLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09dSxuW2ErMV09dSxuW2ErMl09dX1yZXR1cm4gZnVuY3Rpb24odCl7cyhhLHQpO3ZhciByPXUoYSk7ZnVuY3Rpb24gYShlLHQsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89ci5jYWxsKHRoaXMsIkNhbEdyYXkiLDEpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheSIpO2lmKHQ9dHx8WzAsMCwwXSxpPWl8fDEsby5YVz1lWzBdLG8uWVc9ZVsxXSxvLlpXPWVbMl0sby5YQj10WzBdLG8uWUI9dFsxXSxvLlpCPXRbMl0sby5HPWksby5YVzwwfHxvLlpXPDB8fDEhPT1vLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgIi5jb25jYXQoby5uYW1lKSsiLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtyZXR1cm4oby5YQjwwfHxvLllCPDB8fG8uWkI8MCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICIuY29uY2F0KG8ubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksby5YQj1vLllCPW8uWkI9MCksMD09PW8uWEImJjA9PT1vLllCJiYwPT09by5aQnx8KDAsbi53YXJuKSgiIi5jb25jYXQoby5uYW1lLCIsIEJsYWNrUG9pbnQ6IFhCOiAiKS5jb25jYXQoby5YQiwiLCBZQjogIikuY29uY2F0KG8uWUIsIiwgIikrIlpCOiAiLmNvbmNhdChvLlpCLCIsIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4iKSksby5HPDEmJigoMCxuLmluZm8pKCJJbnZhbGlkIEdhbW1hOiAiLmNvbmNhdChvLkcsIiBmb3IgIikuY29uY2F0KG8ubmFtZSwiLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksby5HPTEpLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgYz0xLygoMTw8byktMSksdT0wO3U8bjsrK3UpZSh0aGlzLHQscixhLGksYykscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLGF9KHkpfSgpLEE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksbz1uZXcgRmxvYXQzMkFycmF5KDMpLGM9bmV3IEZsb2F0MzJBcnJheSgzKSxsPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIGYoZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2QoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmQoMCwxLDEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MD8tZygtZSk6ZT44P01hdGgucG93KChlKzE2KS8xMTYsMyk6ZSpsfWZ1bmN0aW9uIG0obixzLHUsbCxwLHYpe3ZhciB5PWQoMCwxLHNbdV0qdiksbT1kKDAsMSxzW3UrMV0qdiksYj1kKDAsMSxzW3UrMl0qdiksdz0xPT09eT8xOk1hdGgucG93KHksbi5HUiksaz0xPT09bT8xOk1hdGgucG93KG0sbi5HRyksUz0xPT09Yj8xOk1hdGgucG93KGIsbi5HQikseD1uLk1YQSp3K24uTVhCKmsrbi5NWEMqUyxPPW4uTVlBKncrbi5NWUIqaytuLk1ZQypTLEE9bi5NWkEqdytuLk1aQiprK24uTVpDKlMsQz1vO0NbMF09eCxDWzFdPU8sQ1syXT1BO3ZhciBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO3ZhciBvPWE7ZihlLG4sbyk7dmFyIHM9aTshZnVuY3Rpb24oZSx0LHIpe3JbMF09MSp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEqdFsyXS9lWzJdfShyLG8scyksZih0LHMsYSl9KG4ud2hpdGVQb2ludCxDLEYpO3ZhciBQPW87IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTt2YXIgbj1nKDApLGE9KDEtbikvKDEtZyhlWzBdKSksaT0xLWEsbz0oMS1uKS8oMS1nKGVbMV0pKSxzPTEtbyxjPSgxLW4pLygxLWcoZVsyXSkpLHU9MS1jO3JbMF09dFswXSphK2ksclsxXT10WzFdKm8rcyxyWzJdPXRbMl0qYyt1fShuLmJsYWNrUG9pbnQsRixQKTt2YXIgVD1jOyFmdW5jdGlvbihyLG4sYSl7dmFyIG89YTtmKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0uOTUwNDcqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xLjA4ODgzKnRbMl0vZVsyXX0ocixvLHMpLGYodCxzLGEpfShhLFAsVCk7dmFyIEk9bztmKHIsVCxJKSxsW3BdPTI1NSpoKElbMF0pLGxbcCsxXT0yNTUqaChJWzFdKSxsW3ArMl09MjU1KmgoSVsyXSl9cmV0dXJuIGZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSxhLGksbyl7dmFyIHM7aWYocCh0aGlzLHIpLHM9dC5jYWxsKHRoaXMsIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTthPWF8fG5ldyBGbG9hdDMyQXJyYXkoMyksaT1pfHxuZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLG89b3x8bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDAsMCwwLDFdKTt2YXIgYz1lWzBdLHU9ZVsxXSxsPWVbMl07cy53aGl0ZVBvaW50PWU7dmFyIGY9YVswXSxoPWFbMV0sZD1hWzJdO2lmKHMuYmxhY2tQb2ludD1hLHMuR1I9aVswXSxzLkdHPWlbMV0scy5HQj1pWzJdLHMuTVhBPW9bMF0scy5NWUE9b1sxXSxzLk1aQT1vWzJdLHMuTVhCPW9bM10scy5NWUI9b1s0XSxzLk1aQj1vWzVdLHMuTVhDPW9bNl0scy5NWUM9b1s3XSxzLk1aQz1vWzhdLGM8MHx8bDwwfHwxIT09dSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICIuY29uY2F0KHMubmFtZSkrIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGY8MHx8aDwwfHxkPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50IGZvciAiLmNvbmNhdChzLm5hbWUsIiBbIikuY29uY2F0KGYsIiwgIikuY29uY2F0KGgsIiwgIikuY29uY2F0KGQsIl0sICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKSksKHMuR1I8MHx8cy5HRzwwfHxzLkdCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBHYW1tYSBbIi5jb25jYXQocy5HUiwiLCAiKS5jb25jYXQocy5HRywiLCAiKS5jb25jYXQocy5HQiwiXSBmb3IgIikrIiIuY29uY2F0KHMubmFtZSwiLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSkscy5HUj1zLkdHPXMuR0I9MSksc31yZXR1cm4gdihyLFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXttKHRoaXMsZSx0LHIsbiwxKX19LHtrZXk6ImdldFJnYkJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7Zm9yKHZhciBzPTEvKCgxPDxpKS0xKSxjPTA7YzxyOysrYyltKHRoaXMsZSx0LG4sYSxzKSx0Kz0zLGErPTMrb319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fV0pLHJ9KHkpfSgpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj02LzI5P01hdGgucG93KGUsMyk6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgYz1uW2FdLHU9blthKzFdLGw9blthKzJdOyExIT09aSYmKGM9dChjLGksMCwxMDApLHU9dCh1LGksci5hbWluLHIuYW1heCksbD10KGwsaSxyLmJtaW4sci5ibWF4KSksdT5yLmFtYXg/dT1yLmFtYXg6dTxyLmFtaW4mJih1PXIuYW1pbiksbD5yLmJtYXg/bD1yLmJtYXg6bDxyLmJtaW4mJihsPXIuYm1pbik7dmFyIGYsaCxkLHA9KGMrMTYpLzExNixnPXArdS81MDAsdj1wLWwvMjAwLHk9ci5YVyplKGcpLG09ci5ZVyplKHApLGI9ci5aVyplKHYpO3IuWlc8MT8oZj0zLjEzMzkqeSstMS42MTcqbSstLjQ5MDYqYixoPS0uOTc4NSp5KzEuOTE2Km0rLjAzMzMqYixkPS4wNzIqeSstLjIyOSptKzEuNDA1NypiKTooZj0zLjI0MDYqeSstMS41MzcyKm0rLS40OTg2KmIsaD0tLjk2ODkqeSsxLjg3NTgqbSsuMDQxNSpiLGQ9LjA1NTcqeSstLjIwNCptKzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PXUoYSk7ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG87aWYocCh0aGlzLGEpLG89dC5jYWxsKHRoaXMsIkxhYiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtpZihyPXJ8fFswLDAsMF0saT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdLG8uWFc9ZVswXSxvLllXPWVbMV0sby5aVz1lWzJdLG8uYW1pbj1pWzBdLG8uYW1heD1pWzFdLG8uYm1pbj1pWzJdLG8uYm1heD1pWzNdLG8uWEI9clswXSxvLllCPXJbMV0sby5aQj1yWzJdLG8uWFc8MHx8by5aVzwwfHwxIT09by5ZVyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihvLlhCPDB8fG8uWUI8MHx8by5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQiKSxvLlhCPW8uWUI9by5aQj0wKSwoby5hbWluPm8uYW1heHx8by5ibWluPm8uYm1heCkmJigoMCxuLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKSxvLmFtaW49LTEwMCxvLmFtYXg9MTAwLG8uYm1pbj0tMTAwLG8uYm1heD0xMDApLG99cmV0dXJuIHYoYSxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGM9KDE8PG8pLTEsdT0wO3U8bjt1Kyspcih0aGlzLGUsdCxjLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLGF9KHkpfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJ0aWFsRXZhbHVhdG9yPXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxNDUpLG89cigxMzQpLHM9cigxNjMpLGM9cigxNjcpLHU9cigxNjYpLGw9cigxNzApLGY9cigxNzkpLGg9cigxODApLGQ9cigxNzEpLHA9cigxODYpLGc9cigxNDYpLHY9cigxODgpLHk9cigxMzkpLG09cigxMzYpLGI9cigxODkpLHc9cigxNDMpLGs9cigxNDgpLFM9cigxNjgpLHg9cigxMzUpLE89cigxNzQpLEE9cigxNjkpLEM9cigxOTApLEY9cigxOTEpLFA9cigxOTIpO2Z1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8RChlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQihlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fEQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRSgpe0U9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBsKGUsdCxyLG4pe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZD90OmQsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBDKG58fFtdKTtyZXR1cm4gYShvLCJfaW52b2tlIix7dmFsdWU6UyhlLHIscyl9KSxvfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9bDt2YXIgaD17fTtmdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe312YXIgdj17fTt1KHYsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT15JiZ5KHkoRihbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sbykmJih2PW0pO3ZhciBiPWcucHJvdG90eXBlPWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gayhlLHQpe2Z1bmN0aW9uIGkoYSxvLHMsYyl7dmFyIHU9ZihlW2FdLGUsbyk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsaD1sLnZhbHVlO3JldHVybiBoJiYib2JqZWN0Ij09bihoKSYmci5jYWxsKGgsIl9fYXdhaXQiKT90LnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtpKCJuZXh0IixlLHMsYyl9KSwoZnVuY3Rpb24oZSl7aSgidGhyb3ciLGUscyxjKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLHMobCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoInRocm93IixlLHMsYyl9KSl9Yyh1LmFyZyl9dmFyIG87YSh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2koZSxyLHQsbil9KSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPXgobyxyKTtpZihzKXtpZihzPT09aCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWYoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLHgoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksaDt2YXIgYT1mKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxoKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGgpfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gQyhlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKE8sdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gRihlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpQfX1mdW5jdGlvbiBQKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gcC5wcm90b3R5cGU9ZyxhKGIsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxhKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6cCxjb25maWd1cmFibGU6ITB9KSxwLmRpc3BsYXlOYW1lPXUoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09cHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsdShlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYiksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sdyhrLnByb3RvdHlwZSksdShrLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgayhsKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LHcoYiksdShiLGMsIkdlbmVyYXRvciIpLHUoYixvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHUoYiwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1GLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxofSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksaH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6RihlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksaH19LGV9ZnVuY3Rpb24gaihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7aihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7aihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIF8oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gUihlLHQscil7cmV0dXJuIHQmJkwoZS5wcm90b3R5cGUsdCksciYmTChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gTihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gRChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gQihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP0IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIEIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgVT1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITAsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksJD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBYKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHIsbj1OKGUpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGk9WChyLnZhbHVlLCEwKTtpZihpKXJldHVybiBpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4oMCxhLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBvLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLGEud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIEgoZSl7ZS5mbj09PWEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdJiZlLmFyZ3NbMF0uY291bnQ+MCYmZS5hcmdzWzBdLmNvdW50Kyt9dmFyIHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gUihlLFt7a2V5OiJjaGVjayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCsrdGhpcy5jaGVja2VkPGUuQ0hFQ0tfVElNRV9FVkVSWSkmJih0aGlzLmNoZWNrZWQ9MCx0aGlzLmVuZFRpbWU8PURhdGUubm93KCkpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrZS5USU1FX1NMT1RfRFVSQVRJT05fTVMsdGhpcy5jaGVja2VkPTB9fV0sW3trZXk6IlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApfX0se2tleToiQ0hFQ0tfVElNRV9FVkVSWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9fV0pLGV9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLG49dC5oYW5kbGVyLGE9dC5wYWdlSW5kZXgsaT10LmlkRmFjdG9yeSxvPXQuZm9udENhY2hlLHM9dC5idWlsdEluQ01hcENhY2hlLGM9dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsdT10Lmdsb2JhbEltYWdlQ2FjaGUsbD10Lm9wdGlvbnMsZj12b2lkIDA9PT1sP251bGw6bDtfKHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5oYW5kbGVyPW4sdGhpcy5wYWdlSW5kZXg9YSx0aGlzLmlkRmFjdG9yeT1pLHRoaXMuZm9udENhY2hlPW8sdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yyx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLm9wdGlvbnM9Znx8VSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITEsdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfXZhciB0LHIsbixnLHgsaixMLEQ7cmV0dXJuIFIoZSxbe2tleToiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bmV3IHAuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gdC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSksdH19LHtrZXk6Imhhc0JsZW5kTW9kZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2Ygby5EaWN0KSlyZXR1cm4hMTtpZihlLm9iaklkJiZ0LmhhcyhlLm9iaklkKSlyZXR1cm4hMTt2YXIgcj1uZXcgby5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Zm9yKHZhciBuPVtlXSxpPXRoaXMueHJlZjtuLmxlbmd0aDspe3ZhciBzPW4uc2hpZnQoKSxjPXMuZ2V0KCJFeHRHU3RhdGUiKTtpZihjIGluc3RhbmNlb2Ygby5EaWN0KXt2YXIgdSxsPU4oYy5nZXRSYXdWYWx1ZXMoKSk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlO2lmKGYgaW5zdGFuY2VvZiBvLlJlZil7aWYoci5oYXMoZikpY29udGludWU7dHJ5e2Y9aS5mZXRjaChmKX1jYXRjaChlKXtyLnB1dChmKSwoMCxhLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKGYgaW5zdGFuY2VvZiBvLkRpY3Qpe2Yub2JqSWQmJnIucHV0KGYub2JqSWQpO3ZhciBoPWYuZ2V0KCJCTSIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpe2lmKCJOb3JtYWwiIT09aC5uYW1lKXJldHVybiEwfWVsc2UgaWYodm9pZCAwIT09aCYmQXJyYXkuaXNBcnJheShoKSl7dmFyIGQscD1OKGgpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lJiYiTm9ybWFsIiE9PWcubmFtZSlyZXR1cm4hMH19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfX12YXIgdj1zLmdldCgiWE9iamVjdCIpO2lmKHYgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciB5LGI9Tih2LmdldFJhd1ZhbHVlcygpKTt0cnl7Zm9yKGIucygpOyEoeT1iLm4oKSkuZG9uZTspe3ZhciB3PXkudmFsdWU7aWYodyBpbnN0YW5jZW9mIG8uUmVmKXtpZihyLmhhcyh3KSljb250aW51ZTt0cnl7dz1pLmZldGNoKHcpfWNhdGNoKGUpe3IucHV0KHcpLCgwLGEuaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7Y29udGludWV9fWlmKHcgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe3cuZGljdC5vYmpJZCYmci5wdXQody5kaWN0Lm9iaklkKTt2YXIgaz13LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTtrIGluc3RhbmNlb2Ygby5EaWN0JiYoay5vYmpJZCYmci5oYXMoay5vYmpJZCl8fChuLnB1c2goayksay5vYmpJZCYmci5wdXQoay5vYmpJZCkpKX19fWNhdGNoKGUpe2IuZShlKX1maW5hbGx5e2IuZigpfX19dmFyIFMseD1OKHIpO3RyeXtmb3IoeC5zKCk7IShTPXgubigpKS5kb25lOyl7dmFyIE89Uy52YWx1ZTt0LnB1dChPKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9cmV0dXJuITF9fSx7a2V5OiJmZXRjaEJ1aWx0SW5DTWFwIix2YWx1ZTooRD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscik7Y2FzZSAzOmlmKG51bGw9PT10aGlzLm9wdGlvbnMuY01hcFVybCl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBpPSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KHQsIi5iY21hcCIpLGUubmV4dD03LGZldGNoKGkpO2Nhc2UgNzppZigobz1lLnNlbnQpLm9rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoby5zdGF0dXNUZXh0LCciLicpKTtjYXNlIDEwOnJldHVybiBlLnQwPVVpbnQ4QXJyYXksZS5uZXh0PTEzLG8uYXJyYXlCdWZmZXIoKTtjYXNlIDEzOmUudDE9ZS5zZW50LGUudDI9bmV3IGUudDAoZS50MSksZS50Mz1hLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZLG49e2NNYXBEYXRhOmUudDIsY29tcHJlc3Npb25UeXBlOmUudDN9LGUubmV4dD0yMjticmVhaztjYXNlIDE5OnJldHVybiBlLm5leHQ9MjEsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6dH0pO2Nhc2UgMjE6bj1lLnNlbnQ7Y2FzZSAyMjpyZXR1cm4gbi5jb21wcmVzc2lvblR5cGUhPT1hLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSYmdGhpcy5idWlsdEluQ01hcENhY2hlLnNldCh0LG4pLGUuYWJydXB0KCJyZXR1cm4iLG4pO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hTdGFuZGFyZEZvbnREYXRhIix2YWx1ZTooTD1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxvLHMsYztyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEocj10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQodCkpKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IHkuU3RyZWFtKHIpKTtjYXNlIDM6aWYoIXRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250c3x8IlN5bWJvbCI9PT10fHwiWmFwZkRpbmdiYXRzIj09PXQpe2UubmV4dD01O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDU6aWYobj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpLGk9blt0XSxudWxsPT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2UubmV4dD0yMDticmVha31yZXR1cm4gcz0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChpKSxlLm5leHQ9MTAsZmV0Y2gocyk7Y2FzZSAxMDppZigoYz1lLnNlbnQpLm9rKXtlLm5leHQ9MTU7YnJlYWt9KDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQocywnIiB3aXRoICInKS5jb25jYXQoYy5zdGF0dXNUZXh0LCciLicpKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGMuYXJyYXlCdWZmZXIoKTtjYXNlIDE3Om89ZS5zZW50O2Nhc2UgMTg6ZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjA6cmV0dXJuIGUucHJldj0yMCxlLm5leHQ9MjMsdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pO2Nhc2UgMjM6bz1lLnNlbnQsZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMjY6ZS5wcmV2PTI2LGUudDA9ZS5jYXRjaCgyMCksKDAsYS53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoaSwnIiB3aXRoICInKS5jb25jYXQoZS50MCwnIi4nKSk7Y2FzZSAyOTppZihvKXtlLm5leHQ9MzE7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzE6cmV0dXJuIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldCh0LG8pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5LlN0cmVhbShvKSk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIwLDI2XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiYnVpbGRGb3JtWE9iamVjdCIsdmFsdWU6KGo9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0LHIsbixpLHMsYyx1KXt2YXIgbCxmLGgsZCxwLGcsdix5LG0sYixrO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobD1yLmRpY3QsZj1sLmdldEFycmF5KCJNYXRyaXgiKSxoPWwuZ2V0QXJyYXkoIkJCb3giKSxoPUFycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9hLlV0aWwubm9ybWFsaXplUmVjdChoKTpudWxsLCFsLmhhcygiT0MiKSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD03LHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksdCk7Y2FzZSA3OmQ9ZS5zZW50O2Nhc2UgODppZih2b2lkIDAhPT1kJiZpLmFkZE9wKGEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKSwhKGc9bC5nZXQoIkdyb3VwIikpKXtlLm5leHQ9Mjk7YnJlYWt9aWYocD17bWF0cml4OmYsYmJveDpoLHNtYXNrOm4saXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9LHY9Zy5nZXQoIlMiKSx5PW51bGwsISgwLG8uaXNOYW1lKSh2LCJUcmFuc3BhcmVuY3kiKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHAuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEscC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSwhZy5oYXMoIkNTIikpe2UubmV4dD0yNzticmVha31pZihtPWcuZ2V0UmF3KCJDUyIpLCEoYj13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKG0sdGhpcy54cmVmLHUpKSl7ZS5uZXh0PTI0O2JyZWFrfXk9YixlLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gZS5uZXh0PTI2LHRoaXMucGFyc2VDb2xvclNwYWNlKHtjczptLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KTtjYXNlIDI2Onk9ZS5zZW50O2Nhc2UgMjc6biYmbi5iYWNrZHJvcCYmKHk9eXx8dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLG4uYmFja2Ryb3A9eS5nZXRSZ2Iobi5iYWNrZHJvcCwwKSksaS5hZGRPcChhLk9QUy5iZWdpbkdyb3VwLFtwXSk7Y2FzZSAyOTpyZXR1cm4gaz1nP1tmLG51bGxdOltmLGhdLGkuYWRkT3AoYS5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLGspLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8dCxvcGVyYXRvckxpc3Q6aSxpbml0aWFsU3RhdGU6Y30pLnRoZW4oKGZ1bmN0aW9uKCl7aS5hZGRPcChhLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZpLmFkZE9wKGEuT1BTLmVuZEdyb3VwLFtwXSksdm9pZCAwIT09ZCYmaS5hZGRPcChhLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfc2VuZEltZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPXQ/W3QuYml0bWFwfHx0LmRhdGEuYnVmZmVyXTpudWxsO3JldHVybiB0aGlzLnBhcnNpbmdUeXBlM0ZvbnR8fHI/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2UsIkltYWdlIix0XSxuKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbZSx0aGlzLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLG4pfX0se2tleToiYnVpbGRQYWludEltYWdlWE9iamVjdCIsdmFsdWU6KHg9TShFKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLGksbyxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiLHcsUyx4LE8sQSxDLEYsVCxJLGosTT10aGlzO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj10LnJlc291cmNlcyxuPXQuaW1hZ2UsaT10LmlzSW5saW5lLG89dm9pZCAwIT09aSYmaSxzPXQub3BlcmF0b3JMaXN0LGM9dC5jYWNoZUtleSx1PXQubG9jYWxJbWFnZUNhY2hlLGw9dC5sb2NhbENvbG9yU3BhY2VDYWNoZSxmPW4uZGljdCxoPWYub2JqSWQsZD1mLmdldCgiVyIsIldpZHRoIikscD1mLmdldCgiSCIsIkhlaWdodCIpLGQmJiJudW1iZXIiPT10eXBlb2YgZCYmcCYmIm51bWJlciI9PXR5cGVvZiBwKXtlLm5leHQ9ODticmVha31yZXR1cm4oMCxhLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA4OmlmKCEoLTEhPT0oZz10aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplKSYmZCpwPmcpKXtlLm5leHQ9MTU7YnJlYWt9aWYodj0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiIsIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe2UubmV4dD0xNDticmVha31yZXR1cm4oMCxhLndhcm4pKHYpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcih2KTtjYXNlIDE1OmlmKCFmLmhhcygiT0MiKSl7ZS5uZXh0PTE5O2JyZWFrfXJldHVybiBlLm5leHQ9MTgsdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhmLmdldCgiT0MiKSxyKTtjYXNlIDE4Onk9ZS5zZW50O2Nhc2UgMTk6aWYoIWYuZ2V0KCJJTSIsIkltYWdlTWFzayIpKXtlLm5leHQ9NDQ7YnJlYWt9aWYodz1mLmdldCgiSSIsIkludGVycG9sYXRlIiksUz1kKzc+PjMseD1uLmdldEJ5dGVzKFMqcCksTz1mLmdldEFycmF5KCJEIiwiRGVjb2RlIiksIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7ZS5uZXh0PTMyO2JyZWFrfXJldHVybihtPVAuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6eCx3aWR0aDpkLGhlaWdodDpwLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOm4gaW5zdGFuY2VvZiBrLkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhTyYmT1swXT4wLGludGVycG9sYXRlOnd9KSkuY2FjaGVkPSEhYyxiPVttXSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxiLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6YixvcHRpb25hbENvbnRlbnQ6eX0pLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDMyOmlmKCEobT1QLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5Ongsd2lkdGg6ZCxoZWlnaHQ6cCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpuIGluc3RhbmNlb2Ygay5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIU8mJk9bMF0+MCxpbnRlcnBvbGF0ZTp3LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZH0pKS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtlLm5leHQ9Mzc7YnJlYWt9cmV0dXJuIHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLHkpLGMmJnUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Onl9KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzNzpyZXR1cm4gQT0ibWFza18iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxzLmFkZERlcGVuZGVuY3koQSksdGhpcy5fc2VuZEltZ0RhdGEoQSxtKSxiPVt7ZGF0YTpBLHdpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LGludGVycG9sYXRlOm0uaW50ZXJwb2xhdGUsY291bnQ6MX1dLHMuYWRkSW1hZ2VPcHMoYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGIseSksYyYmdS5zZXQoYyxoLHtmbjphLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDQ6aWYoQz1mLmdldCgiU00iLCJTTWFzayIpfHwhMSxGPWYuZ2V0KCJNYXNrIil8fCExLCFvfHxDfHxGfHwhKGQrcDwyMDApKXtlLm5leHQ9NTI7YnJlYWt9cmV0dXJuIFQ9bmV3IFAuUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KSxtPVQuY3JlYXRlSW1hZ2VEYXRhKCEwKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFttXSx5KSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA1MjpJPSJpbWdfIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksaj0hMSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/ST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChJKTpoJiYoaj10aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaCx0aGlzLnBhZ2VJbmRleCkpJiYoST0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiXyIpLmNvbmNhdChJKSkscy5hZGREZXBlbmRlbmN5KEkpLGI9W0ksZCxwXSxQLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczpyLGltYWdlOm4saXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbT1lLmNyZWF0ZUltYWdlRGF0YSghMSksYyYmaCYmaiYmTS5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsbS5kYXRhLmxlbmd0aCksTS5fc2VuZEltZ0RhdGEoSSxtLGopfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxhLndhcm4pKCdVbmFibGUgdG8gZGVjb2RlIGltYWdlICInLmNvbmNhdChJLCciOiAiJykuY29uY2F0KGUsJyIuJykpLE0uX3NlbmRJbWdEYXRhKEksbnVsbCxqKX0pKSxzLmFkZEltYWdlT3BzKGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGIseSksYyYmKHUuc2V0KGMsaCx7Zm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5fSksaCYmKCgwLGEuYXNzZXJ0KSghbywiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGgsdGhpcy5wYWdlSW5kZXgpLGomJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOkksZm46YS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpiLG9wdGlvbmFsQ29udGVudDp5LGJ5dGVTaXplOjB9KSkpO2Nhc2UgNTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4geC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiaGFuZGxlU01hc2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1lLmdldCgiRyIpLHM9e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLHAuaXNQREZGdW5jdGlvbikoYykpe2Zvcih2YXIgdT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLGw9bmV3IFVpbnQ4QXJyYXkoMjU2KSxmPW5ldyBGbG9hdDMyQXJyYXkoMSksaD0wO2g8MjU2O2grKylmWzBdPWgvMjU1LHUoZiwwLGYsMCksbFtoXT0yNTUqZlswXXwwO3MudHJhbnNmZXJNYXA9bH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbyxzLHIsbixhLnN0YXRlLmNsb25lKCksaSl9fSx7a2V5OiJoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfXZhciByLG49W10sYT0wLGk9MCxzPU4odCk7dHJ5e2ZvcihzLnMoKTshKHI9cy5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoYSsrLCgwLG8uaXNOYW1lKSh1LCJJZGVudGl0eSIpKW4ucHVzaChudWxsKTtlbHNle2lmKCEoMCxwLmlzUERGRnVuY3Rpb24pKHUpKXJldHVybiBudWxsO2Zvcih2YXIgbD10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHUpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPW5ldyBGbG9hdDMyQXJyYXkoMSksZD0wO2Q8MjU2O2QrKyloWzBdPWQvMjU1LGwoaCwwLGgsMCksZltkXT0yNTUqaFswXXwwO24ucHVzaChmKSxpKyt9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09aT9udWxsOm59fSx7a2V5OiJoYW5kbGVUaWxpbmdUeXBlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGkscyxjLHUpe3ZhciBsPXRoaXMsaD1uZXcgRi5PcGVyYXRvckxpc3QsZD1vLkRpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbaS5nZXQoIlJlc291cmNlcyIpLHJdfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bix0YXNrOmMscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Omh9KS50aGVuKChmdW5jdGlvbigpe3ZhciByPWguZ2V0SVIoKSxuPSgwLGYuZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7cy5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpLHMuYWRkT3AoZSxuKSxpLm9iaklkJiZ1LnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihsLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBsLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSksdm9pZCgwLGEud2FybikoJ2hhbmRsZVRpbGluZ1R5cGUgLSBpZ25vcmluZyBwYXR0ZXJuOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSl9fSx7a2V5OiJoYW5kbGVTZXRGb250Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGksYyl7dmFyIHU9dGhpcyxsPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD10JiZ0WzBdaW5zdGFuY2VvZiBvLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsbCxmKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh1LGUsaSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyksdH0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHUuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkVHlwZTN9KSxuZXcgeih7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp1Lm9wdGlvbnN9KX0pKTp0fSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjLmZvbnQ9ZS5mb250LGUuc2VuZCh1LmhhbmRsZXIpLGUubG9hZGVkTmFtZX0pKX19LHtrZXk6ImhhbmRsZVRleHQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49ci5mb250LGk9bi5jaGFyc1RvR2x5cGhzKHQpO3JldHVybiBuLmRhdGEmJihyLnRleHRSZW5kZXJpbmdNb2RlJmEuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09ci5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJmUuYnVpbGRGb250UGF0aHMobixpLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGl9fSx7a2V5OiJlbnN1cmVTdGF0ZUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmZvbnQpe3ZhciB0PW5ldyBhLkZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSksdm9pZCgwLGEud2FybikoJ2Vuc3VyZVN0YXRlRm9udDogIicuY29uY2F0KHQsJyIuJykpO3Rocm93IHR9fX0se2tleToic2V0R1N0YXRlIix2YWx1ZTooZz1NKEUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4saSxzLGMsdSxsLGYsaCxkLHAsZyx2LHksbSxiPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPXQucmVzb3VyY2VzLG49dC5nU3RhdGUsaT10Lm9wZXJhdG9yTGlzdCxzPXQuY2FjaGVLZXksYz10LnRhc2ssdT10LnN0YXRlTWFuYWdlcixsPXQubG9jYWxHU3RhdGVDYWNoZSxmPXQubG9jYWxDb2xvclNwYWNlQ2FjaGUsaD1uLm9iaklkLGQ9ITAscD1bXSxnPVByb21pc2UucmVzb2x2ZSgpLHY9TihuLmdldEtleXMoKSk7dHJ5e2ZvcihtPWZ1bmN0aW9uKCl7dmFyIGU9eS52YWx1ZSx0PW4uZ2V0KGUpO3N3aXRjaChlKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6cC5wdXNoKFtlLHRdKTticmVhaztjYXNlIkZvbnQiOmQ9ITEsZz1nLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGIuaGFuZGxlU2V0Rm9udChyLG51bGwsdFswXSxpLGMsdS5zdGF0ZSkudGhlbigoZnVuY3Rpb24ocil7aS5hZGREZXBlbmRlbmN5KHIpLHAucHVzaChbZSxbcix0WzFdXV0pfSkpfSkpO2JyZWFrO2Nhc2UiQk0iOnAucHVzaChbZSxYKHQpXSk7YnJlYWs7Y2FzZSJTTWFzayI6aWYoKDAsby5pc05hbWUpKHQsIk5vbmUiKSl7cC5wdXNoKFtlLCExXSk7YnJlYWt9dCBpbnN0YW5jZW9mIG8uRGljdD8oZD0hMSxnPWcudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYi5oYW5kbGVTTWFzayh0LHIsaSxjLHUsZil9KSkscC5wdXNoKFtlLCEwXSkpOigwLGEud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjp2YXIgcz1iLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odCk7cC5wdXNoKFtlLHNdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsYS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsYS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fSx2LnMoKTshKHk9di5uKCkpLmRvbmU7KW0oKX1jYXRjaChlKXt2LmUoZSl9ZmluYWxseXt2LmYoKX1yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZy50aGVuKChmdW5jdGlvbigpe3AubGVuZ3RoPjAmJmkuYWRkT3AoYS5PUFMuc2V0R1N0YXRlLFtwXSksZCYmbC5zZXQocyxoLHApfSkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImxvYWRGb250Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGksdT10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVsbCxoPWZ1bmN0aW9uKCl7dmFyIGU9TShFKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB6KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KCdGb250ICInLmNvbmNhdCh0LCciIGlzIG5vdCBhdmFpbGFibGUuJykpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPXRoaXMueHJlZjtpZihyKXIgaW5zdGFuY2VvZiBvLlJlZiYmKGk9cik7ZWxzZXt2YXIgcD1uLmdldCgiRm9udCIpO3AmJihpPXAuZ2V0UmF3KHQpKX1pZighaSl7dmFyIGc9J0ZvbnQgIicuY29uY2F0KHR8fHImJnIudG9TdHJpbmcoKSwnIiBpcyBub3QgYXZhaWxhYmxlJyk7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsYS53YXJuKSgiIi5jb25jYXQoZywiLiIpKSxoKCk7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KSwoMCxhLndhcm4pKCIiLmNvbmNhdChnLCIgLS0gYXR0ZW1wdGluZyB0byBmYWxsYmFjayB0byBhIGRlZmF1bHQgZm9udC4iKSksaT1sfHxlLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGkpKXJldHVybiBoKCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoaSk7aWYoISgocj1kLmZldGNoSWZSZWYoaSkpaW5zdGFuY2VvZiBvLkRpY3QpKXJldHVybiBoKCk7aWYoci5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHIuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoci5jYWNoZUtleSk7dmFyIHYseT0oMCxhLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RyeXsodj10aGlzLnByZUV2YWx1YXRlRm9udChyKSkuY3NzRm9udEluZm89Zn1jYXRjaChlKXtyZXR1cm4oMCxhLndhcm4pKCdsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICInLmNvbmNhdChlLCciLicpKSxoKCl9dmFyIG0sYj12LHc9Yi5kZXNjcmlwdG9yLGs9Yi5oYXNoLFM9aSBpbnN0YW5jZW9mIG8uUmVmO2lmKFMmJihtPSJmIi5jb25jYXQoaS50b1N0cmluZygpKSksayYmdyBpbnN0YW5jZW9mIG8uRGljdCl7dy5mb250QWxpYXNlc3x8KHcuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHg9dy5mb250QWxpYXNlcztpZih4W2tdKXt2YXIgTz14W2tdLmFsaWFzUmVmO2lmKFMmJk8mJnRoaXMuZm9udENhY2hlLmhhcyhPKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaSxPKSx0aGlzLmZvbnRDYWNoZS5nZXQoaSl9ZWxzZSB4W2tdPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O1MmJih4W2tdLmFsaWFzUmVmPWkpLG09eFtrXS5mb250SUR9cmV0dXJuIFM/dGhpcy5mb250Q2FjaGUucHV0KGkseS5wcm9taXNlKToobXx8KG09dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCkpLHIuY2FjaGVLZXk9ImNhY2hlS2V5XyIuY29uY2F0KG0pLHRoaXMuZm9udENhY2hlLnB1dChyLmNhY2hlS2V5LHkucHJvbWlzZSkpLCgwLGEuYXNzZXJ0KShtJiZtLnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKSxyLmxvYWRlZE5hbWU9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl8iKS5jb25jYXQobSksdGhpcy50cmFuc2xhdGVGb250KHYpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUuZm9udFR5cGUmJmQuc3RhdHMuYWRkRm9udFR5cGUoZS5mb250VHlwZSkseS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250OmUsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6dS5vcHRpb25zfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt1LmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VHJhbnNsYXRlfSksKDAsYS53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpO3RyeXt2YXIgdD13JiZ3LmdldCgiRm9udEZpbGUzIiksbj10JiZ0LmdldCgiU3VidHlwZSIpLGk9KDAsYy5nZXRGb250VHlwZSkodi50eXBlLG4mJm4ubmFtZSk7dm9pZCAwIT09aSYmZC5zdGF0cy5hZGRGb250VHlwZShpKX1jYXRjaChlKXt9eS5yZXNvbHZlKG5ldyB6KHtsb2FkZWROYW1lOnIubG9hZGVkTmFtZSxmb250Om5ldyBzLkVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6cixldmFsdWF0b3JPcHRpb25zOnUub3B0aW9uc30pKX0pKSx5LnByb21pc2V9fSx7a2V5OiJidWlsZFBhdGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9ZS5sZW5ndGgtMTtpZihyfHwocj1bXSksaTwwfHxlLmZuQXJyYXlbaV0hPT1hLk9QUy5jb25zdHJ1Y3RQYXRoKXt2YXIgbztzd2l0Y2gobiYmKCgwLGEud2FybikoJ0VuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIicuY29uY2F0KHQsJyIgaW5zaWRlIG9mIGEgdGV4dCBvYmplY3QuJykpLGUuYWRkT3AoYS5PUFMuc2F2ZSxudWxsKSksdCl7Y2FzZSBhLk9QUy5yZWN0YW5nbGU6dmFyIHM9clswXStyWzJdLGM9clsxXStyWzNdO289W01hdGgubWluKHJbMF0scyksTWF0aC5tYXgoclswXSxzKSxNYXRoLm1pbihyWzFdLGMpLE1hdGgubWF4KHJbMV0sYyldO2JyZWFrO2Nhc2UgYS5PUFMubW92ZVRvOmNhc2UgYS5PUFMubGluZVRvOm89W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6bz1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3AoYS5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsb10pLG4mJmUuYWRkT3AoYS5PUFMucmVzdG9yZSxudWxsKX1lbHNle3ZhciB1LGw9ZS5hcmdzQXJyYXlbaV07bFswXS5wdXNoKHQpLCh1PWxbMV0pLnB1c2guYXBwbHkodSxJKHIpKTt2YXIgZj1sWzJdO3N3aXRjaCh0KXtjYXNlIGEuT1BTLnJlY3RhbmdsZTp2YXIgaD1yWzBdK3JbMl0sZD1yWzFdK3JbM107ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0saCksZlsxXT1NYXRoLm1heChmWzFdLHJbMF0saCksZlsyXT1NYXRoLm1pbihmWzJdLHJbMV0sZCksZlszXT1NYXRoLm1heChmWzNdLHJbMV0sZCk7YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86ZlswXT1NYXRoLm1pbihmWzBdLHJbMF0pLGZbMV09TWF0aC5tYXgoZlsxXSxyWzBdKSxmWzJdPU1hdGgubWluKGZbMl0sclsxXSksZlszXT1NYXRoLm1heChmWzNdLHJbMV0pfX19fSx7a2V5OiJwYXJzZUNvbG9yU3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmNzLG49ZS5yZXNvdXJjZXMsaT1lLmxvY2FsQ29sb3JTcGFjZUNhY2hlO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6cix4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29sb3JTcGFjZX0pLCgwLGEud2FybikoJ3BhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICInLmNvbmNhdChlLCciLicpKSxudWxsO3Rocm93IGV9KSl9fSx7a2V5OiJwYXJzZVNoYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2hhZGluZyxyPWUucmVzb3VyY2VzLG49ZS5sb2NhbENvbG9yU3BhY2VDYWNoZSxhPWUubG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLGk9YS5nZXQodCk7aWYoIWkpe3ZhciBvPWYuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYscix0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LG4pLmdldElSKCk7aT0icGF0dGVybl8iLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSxhLnNldCh0LGkpLHRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtpLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixvXSl9cmV0dXJuIGl9fSx7a2V5OiJoYW5kbGVDb2xvck4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsdSxsLGgpe3ZhciBkPXIucG9wKCk7aWYoZCBpbnN0YW5jZW9mIG8uTmFtZSl7dmFyIHA9aS5nZXRSYXcoZC5uYW1lKSxnPXAgaW5zdGFuY2VvZiBvLlJlZiYmbC5nZXRCeVJlZihwKTtpZihnKXRyeXt2YXIgdj1uLmJhc2U/bi5iYXNlLmdldFJnYihyLDApOm51bGwseT0oMCxmLmdldFRpbGluZ1BhdHRlcm5JUikoZy5vcGVyYXRvckxpc3RJUixnLmRpY3Qsdik7cmV0dXJuIHZvaWQgZS5hZGRPcCh0LHkpfWNhdGNoKGUpe312YXIgYj10aGlzLnhyZWYuZmV0Y2hJZlJlZihwKTtpZihiKXt2YXIgdz1iIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2IuZGljdDpiLGs9dy5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWspe3ZhciBTPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsUyxzLGIsdyxlLGMsbCl9aWYoMj09PWspe3ZhciB4PXcuZ2V0KCJTaGFkaW5nIiksTz13LmdldEFycmF5KCJNYXRyaXgiKSxBPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOngscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6aH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLEEsT10pfXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChrKSl9fXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChkKSl9fSx7a2V5OiJfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKCsrdD4xMCkoMCxhLndhcm4pKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtlbHNle3ZhciBuPWUubGVuZ3RoLGk9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZpIGluc3RhbmNlb2Ygby5OYW1lKXtzd2l0Y2goaS5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOnIucHVzaChpLm5hbWUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQoMCxhLndhcm4pKCJJbnZhbGlkIG9wZXJhdG9yICIuY29uY2F0KGkubmFtZSwiIGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpKX1mb3IodmFyIHM9MTtzPG47cysrKXt2YXIgYz1lW3NdLHU9dGhpcy54cmVmLmZldGNoSWZSZWYoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9W107ci5wdXNoKGwpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24odSx0LGwpfWVsc2UgYyBpbnN0YW5jZW9mIG8uUmVmJiZyLnB1c2goYy50b1N0cmluZygpKX19ZWxzZSgwLGEud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9fX0se2tleToicGFyc2VNYXJrZWRDb250ZW50UHJvcHMiLHZhbHVlOihuPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpLHMsYyx1LGwsZixoLGQscDtyZXR1cm4gRSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCEodCBpbnN0YW5jZW9mIG8uTmFtZSkpe2UubmV4dD01O2JyZWFrfWk9ci5nZXQoIlByb3BlcnRpZXMiKSxuPWkuZ2V0KHQubmFtZSksZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNTppZighKHQgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9OTticmVha31uPXQsZS5uZXh0PTEwO2JyZWFrO2Nhc2UgOTp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtjYXNlIDEwOmlmKCJPQ0ciIT09KHM9bi5nZXQoIlR5cGUiKS5uYW1lKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOm4ub2JqSWR9KTtjYXNlIDE1OmlmKCJPQ01EIiE9PXMpe2UubmV4dD0zMTticmVha31pZihjPW4uZ2V0KCJWRSIpLCFBcnJheS5pc0FycmF5KGMpKXtlLm5leHQ9MjI7YnJlYWt9aWYodT1bXSx0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGMsMCx1KSwhKHUubGVuZ3RoPjApKXtlLm5leHQ9MjI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOiJPQ01EIixleHByZXNzaW9uOnV9KTtjYXNlIDIyOmlmKGw9bi5nZXQoIk9DR3MiKSwhKEFycmF5LmlzQXJyYXkobCl8fGwgaW5zdGFuY2VvZiBvLkRpY3QpKXtlLm5leHQ9Mjk7YnJlYWt9aWYoZj1bXSxBcnJheS5pc0FycmF5KGwpKXtoPU4obCk7dHJ5e2ZvcihoLnMoKTshKGQ9aC5uKCkpLmRvbmU7KXA9ZC52YWx1ZSxmLnB1c2gocC50b1N0cmluZygpKX1jYXRjaChlKXtoLmUoZSl9ZmluYWxseXtoLmYoKX19ZWxzZSBmLnB1c2gobC5vYmpJZCk7cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt0eXBlOnMsaWRzOmYscG9saWN5Om4uZ2V0KCJQIilpbnN0YW5jZW9mIG8uTmFtZT9uLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9KTtjYXNlIDI5OmlmKCEobCBpbnN0YW5jZW9mIG8uUmVmKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dHlwZTpzLGlkOmwudG9TdHJpbmcoKX0pO2Nhc2UgMzE6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG51bGwpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLnN0cmVhbSxuPWUudGFzayxpPWUucmVzb3VyY2VzLHM9ZS5vcGVyYXRvckxpc3QsYz1lLmluaXRpYWxTdGF0ZSx1PXZvaWQgMD09PWM/bnVsbDpjLGw9ZS5mYWxsYmFja0ZvbnREaWN0LGY9dm9pZCAwPT09bD9udWxsOmw7aWYoaT1pfHxvLkRpY3QuZW1wdHksdT11fHxuZXcgWSwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgaD10aGlzLGQ9dGhpcy54cmVmLHA9ITEsZz1uZXcgdi5Mb2NhbEltYWdlQ2FjaGUseT1uZXcgdi5Mb2NhbENvbG9yU3BhY2VDYWNoZSxiPW5ldyB2LkxvY2FsR1N0YXRlQ2FjaGUsaz1uZXcgdi5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSxTPW5ldyBNYXAseD1pLmdldCgiWE9iamVjdCIpfHxvLkRpY3QuZW1wdHksTz1pLmdldCgiUGF0dGVybiIpfHxvLkRpY3QuZW1wdHksQT1uZXcgVyh1KSxDPW5ldyBLKHIsZCxBKSxGPW5ldyBxO2Z1bmN0aW9uIFAoZSl7Zm9yKHZhciB0PTAscj1DLnNhdmVkU3RhdGVzRGVwdGg7dDxyO3QrKylzLmFkZE9wKGEuT1BTLnJlc3RvcmUsW10pfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBjPWZ1bmN0aW9uKG4pe1Byb21pc2UuYWxsKFtuLHMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07bi5lbnN1cmVOb3RUZXJtaW5hdGVkKCksRi5yZXNldCgpO2Zvcih2YXIgdSxsLHYsVCxFLGosTT17fTshKHU9Ri5jaGVjaygpKSYmKE0uYXJncz1udWxsLEMucmVhZChNKSk7KXt2YXIgXz1NLmFyZ3MsTD1NLmZuO3N3aXRjaCgwfEwpe2Nhc2UgYS5PUFMucGFpbnRYT2JqZWN0OmlmKGo9X1swXWluc3RhbmNlb2Ygby5OYW1lLEU9X1swXS5uYW1lLGope3ZhciBSPWcuZ2V0QnlOYW1lKEUpO2lmKFIpe3MuYWRkSW1hZ2VPcHMoUi5mbixSLmFyZ3MsUi5vcHRpb25hbENvbnRlbnQpLEgoUiksXz1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBjKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFqKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj14LmdldFJhdyhFKTtpZihyIGluc3RhbmNlb2Ygby5SZWYpe3ZhciBjPWcuZ2V0QnlSZWYocik7aWYoYylyZXR1cm4gcy5hZGRJbWFnZU9wcyhjLmZuLGMuYXJncyxjLm9wdGlvbmFsQ29udGVudCksSChjKSx2b2lkIGUoKTt2YXIgdT1oLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLGgucGFnZUluZGV4KTtpZih1KXJldHVybiBzLmFkZERlcGVuZGVuY3kodS5vYmpJZCkscy5hZGRJbWFnZU9wcyh1LmZuLHUuYXJncyx1Lm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7cj1kLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7dmFyIGw9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEobCBpbnN0YW5jZW9mIG8uTmFtZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSI9PT1sLm5hbWUpcmV0dXJuIEEuc2F2ZSgpLHZvaWQgaC5idWlsZEZvcm1YT2JqZWN0KGkscixudWxsLHMsbixBLnN0YXRlLmNsb25lKCkseSkudGhlbigoZnVuY3Rpb24oKXtBLnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bC5uYW1lKXtpZigiUFMiIT09bC5uYW1lKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGwubmFtZSkpOygwLGEuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KSx2b2lkKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9fSkpKTtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIEQ9X1sxXTtyZXR1cm4gdm9pZCBjKGguaGFuZGxlU2V0Rm9udChpLF8sbnVsbCxzLG4sQS5zdGF0ZSxmKS50aGVuKChmdW5jdGlvbihlKXtzLmFkZERlcGVuZGVuY3koZSkscy5hZGRPcChhLk9QUy5zZXRGb250LFtlLERdKX0pKSk7Y2FzZSBhLk9QUy5iZWdpblRleHQ6cD0hMDticmVhaztjYXNlIGEuT1BTLmVuZFRleHQ6cD0hMTticmVhaztjYXNlIGEuT1BTLmVuZElubGluZUltYWdlOnZhciBCPV9bMF0uY2FjaGVLZXk7aWYoQil7dmFyIFU9Zy5nZXRCeU5hbWUoQik7aWYoVSl7cy5hZGRJbWFnZU9wcyhVLmZuLFUuYXJncyxVLm9wdGlvbmFsQ29udGVudCksSChVKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMoaC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6aSxpbWFnZTpfWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkIsbG9jYWxJbWFnZUNhY2hlOmcsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pKTtjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFBLnN0YXRlLmZvbnQpe2guZW5zdXJlU3RhdGVGb250KEEuc3RhdGUpO2NvbnRpbnVlfV9bMF09aC5oYW5kbGVUZXh0KF9bMF0sQS5zdGF0ZSk7YnJlYWs7Y2FzZSBhLk9QUy5zaG93U3BhY2VkVGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX12YXIgWCxxPVtdLEc9QS5zdGF0ZSx6PU4oX1swXSk7dHJ5e2Zvcih6LnMoKTshKFg9ei5uKCkpLmRvbmU7KXt2YXIgVyxWPVgudmFsdWU7InN0cmluZyI9PXR5cGVvZiBWPyhXPXEpLnB1c2guYXBwbHkoVyxJKGguaGFuZGxlVGV4dChWLEcpKSk6Im51bWJlciI9PXR5cGVvZiBWJiZxLnB1c2goVil9fWNhdGNoKGUpe3ouZShlKX1maW5hbGx5e3ouZigpfV9bMF09cSxMPWEuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgYS5PUFMubmV4dExpbmVTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighQS5zdGF0ZS5mb250KXtoLmVuc3VyZVN0YXRlRm9udChBLnN0YXRlKTtjb250aW51ZX1zLmFkZE9wKGEuT1BTLm5leHRMaW5lKSxzLmFkZE9wKGEuT1BTLnNldFdvcmRTcGFjaW5nLFtfLnNoaWZ0KCldKSxzLmFkZE9wKGEuT1BTLnNldENoYXJTcGFjaW5nLFtfLnNoaWZ0KCldKSxfWzBdPWguaGFuZGxlVGV4dChfWzBdLEEuc3RhdGUpLEw9YS5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpBLnN0YXRlLnRleHRSZW5kZXJpbmdNb2RlPV9bMF07YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp2YXIgWT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihZKXtBLnN0YXRlLmZpbGxDb2xvclNwYWNlPVk7Y29udGludWV9cmV0dXJuIHZvaWQgYyhoLnBhcnNlQ29sb3JTcGFjZSh7Y3M6X1swXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5fSkudGhlbigoZnVuY3Rpb24oZSl7ZSYmKEEuc3RhdGUuZmlsbENvbG9yU3BhY2U9ZSl9KSkpO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp2YXIgSz13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKF9bMF0sZCx5KTtpZihLKXtBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Sztjb250aW51ZX1yZXR1cm4gdm9pZCBjKGgucGFyc2VDb2xvclNwYWNlKHtjczpfWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnl9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoQS5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWUpfSkpKTtjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpfPShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz0oVD1BLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpLmdldFJnYihfLDApLEw9YS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsR3JheTpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlR3JheTpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6QS5zdGF0ZS5maWxsQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLF89dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpBLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKF8sMCksTD1hLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpBLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixfPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoXywwKTticmVhaztjYXNlIGEuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsXz13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKF8sMCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgYyhoLmhhbmRsZUNvbG9yTihzLGEuT1BTLnNldEZpbGxDb2xvck4sXyxULE8saSxuLHksayxTKSk7Xz1ULmdldFJnYihfLDApLEw9YS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShUPUEuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBjKGguaGFuZGxlQ29sb3JOKHMsYS5PUFMuc2V0U3Ryb2tlQ29sb3JOLF8sVCxPLGksbix5LGssUykpO189VC5nZXRSZ2IoXywwKSxMPWEuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgYS5PUFMuc2hhZGluZ0ZpbGw6dmFyIEo9aS5nZXQoIlNoYWRpbmciKTtpZighSil0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBaPUouZ2V0KF9bMF0ubmFtZSk7aWYoIVopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7Xz1baC5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6WixyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTp5LGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpTfSldLEw9YS5PUFMuc2hhZGluZ0ZpbGw7YnJlYWs7Y2FzZSBhLk9QUy5zZXRHU3RhdGU6aWYoaj1fWzBdaW5zdGFuY2VvZiBvLk5hbWUsRT1fWzBdLm5hbWUsail7dmFyIFE9Yi5nZXRCeU5hbWUoRSk7aWYoUSl7US5sZW5ndGg+MCYmcy5hZGRPcChhLk9QUy5zZXRHU3RhdGUsW1FdKSxfPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIGMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBjPXIuZ2V0KEUpO2lmKCEoYyBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2guc2V0R1N0YXRlKHtyZXNvdXJjZXM6aSxnU3RhdGU6YyxvcGVyYXRvckxpc3Q6cyxjYWNoZUtleTpFLHRhc2s6bixzdGF0ZU1hbmFnZXI6QSxsb2NhbEdTdGF0ZUNhY2hlOmIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6eX0pLnRoZW4oZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgYS5BYm9ydEV4Y2VwdGlvbikpe2lmKGgub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIGguaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pLHZvaWQoMCxhLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKTt0aHJvdyBlfX0pKSk7Y2FzZSBhLk9QUy5tb3ZlVG86Y2FzZSBhLk9QUy5saW5lVG86Y2FzZSBhLk9QUy5jdXJ2ZVRvOmNhc2UgYS5PUFMuY3VydmVUbzI6Y2FzZSBhLk9QUy5jdXJ2ZVRvMzpjYXNlIGEuT1BTLmNsb3NlUGF0aDpjYXNlIGEuT1BTLnJlY3RhbmdsZTpoLmJ1aWxkUGF0aChzLEwsXyxwKTtjb250aW51ZTtjYXNlIGEuT1BTLm1hcmtQb2ludDpjYXNlIGEuT1BTLm1hcmtQb2ludFByb3BzOmNhc2UgYS5PUFMuYmVnaW5Db21wYXQ6Y2FzZSBhLk9QUy5lbmRDb21wYXQ6Y29udGludWU7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZighKF9bMF1pbnN0YW5jZW9mIG8uTmFtZSkpeygwLGEud2FybikoIkV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9Ii5jb25jYXQoX1swXSkpO2NvbnRpbnVlfWlmKCJPQyI9PT1fWzBdLm5hbWUpcmV0dXJuIHZvaWQgYyhoLnBhcnNlTWFya2VkQ29udGVudFByb3BzKF9bMV0saSkudGhlbigoZnVuY3Rpb24oZSl7cy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZihoLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBoLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmEuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSksdm9pZCgwLGEud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19KSkpO189W19bMF0ubmFtZSxfWzFdaW5zdGFuY2VvZiBvLkRpY3Q/X1sxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIGEuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09Xyl7Zm9yKGw9MCx2PV8ubGVuZ3RoO2w8diYmIShfW2xdaW5zdGFuY2VvZiBvLkRpY3QpO2wrKyk7aWYobDx2KXsoMCxhLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIitMKTtjb250aW51ZX19fXMuYWRkT3AoTCxfKX11P2MoJCk6KFAoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0fSksKDAsYS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQobi5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBQKCk7dGhyb3cgZX19KSl9fSx7a2V5OiJnZXRUZXh0Q29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLG49ZS50YXNrLGk9ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5jb21iaW5lVGV4dEl0ZW1zLGw9dm9pZCAwIT09dSYmdSxmPWUuaW5jbHVkZU1hcmtlZENvbnRlbnQsaD12b2lkIDAhPT1mJiZmLGQ9ZS5zaW5rLHA9ZS5zZWVuU3R5bGVzLGc9dm9pZCAwPT09cD9uZXcgU2V0OnAseT1lLnZpZXdCb3gsdz1lLm1hcmtlZENvbnRlbnREYXRhLGs9dm9pZCAwPT09dz9udWxsOnc7aT1pfHxvLkRpY3QuZW1wdHksYz1jfHxuZXcgVyhuZXcgViksaCYmKGs9a3x8e2xldmVsOjB9KTt2YXIgUz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHg9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sTz1bIiAiLCIgIl0sQT0wO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9KEErMSklMixyPSIgIiE9PU9bQV0mJiIgIj09PU9bdF07cmV0dXJuIE9bQV09ZSxBPXQscn1mdW5jdGlvbiBGKCl7T1swXT1PWzFdPSIgIixBPTB9dmFyIFAsST0uMSxFPS4wMyxqPS0uMixNPS4xLF89LjYsTD10aGlzLFI9dGhpcy54cmVmLE49W10sRD1udWxsLEI9bmV3IHYuTG9jYWxJbWFnZUNhY2hlLFU9bmV3IHYuTG9jYWxHU3RhdGVDYWNoZSxYPW5ldyBLKHIsUixjKTtmdW5jdGlvbiBIKCl7dmFyIGU9UC5mb250LHQ9W1AuZm9udFNpemUqUC50ZXh0SFNjYWxlLDAsMCxQLmZvbnRTaXplLDAsUC50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKFAuZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxhLmlzQXJyYXlFcXVhbCkoUC5mb250TWF0cml4LGEuRk9OVF9JREVOVElUWV9NQVRSSVgpKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHRbM10qPXIqUC5mb250TWF0cml4WzNdKX1yZXR1cm4gYS5VdGlsLnRyYW5zZm9ybShQLmN0bSxhLlV0aWwudHJhbnNmb3JtKFAudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gRygpe2lmKHguaW5pdGlhbGl6ZWQpcmV0dXJuIHg7dmFyIGU9UCx0PWUuZm9udCxyPWUubG9hZGVkTmFtZTtnLmhhcyhyKXx8KGcuYWRkKHIpLFMuc3R5bGVzW3JdPXtmb250RmFtaWx5OnQuZmFsbGJhY2tOYW1lLGFzY2VudDp0LmFzY2VudCxkZXNjZW50OnQuZGVzY2VudCx2ZXJ0aWNhbDp0LnZlcnRpY2FsfSkseC5mb250TmFtZT1yO3ZhciBuPXgudHJhbnNmb3JtPUgoKTt0LnZlcnRpY2FsPyh4LndpZHRoPXgudG90YWxXaWR0aD1NYXRoLmh5cG90KG5bMF0sblsxXSkseC5oZWlnaHQ9eC50b3RhbEhlaWdodD0wLHgudmVydGljYWw9ITApOih4LndpZHRoPXgudG90YWxXaWR0aD0wLHguaGVpZ2h0PXgudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChuWzJdLG5bM10pLHgudmVydGljYWw9ITEpO3ZhciBhPU1hdGguaHlwb3QoUC50ZXh0TGluZU1hdHJpeFswXSxQLnRleHRMaW5lTWF0cml4WzFdKSxpPU1hdGguaHlwb3QoUC5jdG1bMF0sUC5jdG1bMV0pO3JldHVybiB4LnRleHRBZHZhbmNlU2NhbGU9aSphLHgudHJhY2tpbmdTcGFjZU1pbj1QLmZvbnRTaXplKkkseC5ub3RBU3BhY2U9UC5mb250U2l6ZSpFLHgubmVnYXRpdmVTcGFjZU1heD1QLmZvbnRTaXplKmoseC5zcGFjZUluRmxvd01pbj1QLmZvbnRTaXplKk0seC5zcGFjZUluRmxvd01heD1QLmZvbnRTaXplKl8seC5oYXNFT0w9ITEseC5pbml0aWFsaXplZD0hMCx4fWZ1bmN0aW9uIHooKXtpZih4LmluaXRpYWxpemVkKXt2YXIgZT1NYXRoLmh5cG90KFAudGV4dExpbmVNYXRyaXhbMF0sUC50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KFAuY3RtWzBdLFAuY3RtWzFdKSplO3QhPT14LnRleHRBZHZhbmNlU2NhbGUmJih4LnZlcnRpY2FsPyh4LnRvdGFsSGVpZ2h0Kz14LmhlaWdodCp4LnRleHRBZHZhbmNlU2NhbGUseC5oZWlnaHQ9MCk6KHgudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUseC53aWR0aD0wKSx4LnRleHRBZHZhbmNlU2NhbGU9dCl9fWZ1bmN0aW9uIFkoZSx0KXtyZXR1cm4gTC5sb2FkRm9udChlLHQsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoTCxpLG4pLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7UC5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxQLmZvbnQ9ZS5mb250LFAuZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8YS5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBKKGUsdCxyKXt2YXIgbj1NYXRoLmh5cG90KHJbMF0sclsxXSk7cmV0dXJuWyhyWzBdKmUrclsxXSp0KS9uLChyWzJdKmUrclszXSp0KS9uXX1mdW5jdGlvbiBaKCl7dmFyIGU9SCgpLHQ9ZVs0XSxyPWVbNV0sbj10LXlbMF0sYT1yLXlbMV07aWYobjwwfHxuPnlbMl18fGE8MHx8YT55WzNdKXJldHVybiExO2lmKCFsfHwhUC5mb250fHwheC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO3ZhciBpPXgucHJldlRyYW5zZm9ybVs0XSxvPXgucHJldlRyYW5zZm9ybVs1XTtpZihpPT09dCYmbz09PXIpcmV0dXJuITA7dmFyIHM9LTE7c3dpdGNoKGVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXT9zPWVbMF0+MD8wOjE4MDplWzFdJiYwPT09ZVswXSYmMD09PWVbM10mJihzPWVbMV0+MD85MDoyNzApLHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOnZhciBjPVtyLHRdO3Q9Y1swXSxyPWNbMV07dmFyIHU9W28saV07aT11WzBdLG89dVsxXTticmVhaztjYXNlIDE4MDp2YXIgZj1bLXQsLXIsLWksLW9dO3Q9ZlswXSxyPWZbMV0saT1mWzJdLG89ZlszXTticmVhaztjYXNlIDI3MDp2YXIgaD1bLXIsLXRdO3Q9aFswXSxyPWhbMV07dmFyIGQ9Wy1vLC1pXTtpPWRbMF0sbz1kWzFdO2JyZWFrO2RlZmF1bHQ6dmFyIHA9VChKKHQscixlKSwyKTt0PXBbMF0scj1wWzFdO3ZhciBnPVQoSihpLG8seC5wcmV2VHJhbnNmb3JtKSwyKTtpPWdbMF0sbz1nWzFdfWlmKFAuZm9udC52ZXJ0aWNhbCl7dmFyIHY9KG8tcikveC50ZXh0QWR2YW5jZVNjYWxlLG09dC1pLGI9TWF0aC5zaWduKHguaGVpZ2h0KTtyZXR1cm4gdjxiKngubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhtKT4uNSp4LndpZHRoPyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKG0pPngud2lkdGg/KGVlKCksITApOih2PD1iKngubm90QVNwYWNlJiZGKCksdjw9Yip4LnRyYWNraW5nU3BhY2VNaW4/eC5oZWlnaHQrPXY6dGUodix4LnByZXZUcmFuc2Zvcm0sYil8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDpNYXRoLmFicyh2KSx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOnguaGVpZ2h0Kz12KSwhMCl9dmFyIHc9KHQtaSkveC50ZXh0QWR2YW5jZVNjYWxlLGs9ci1vLE89TWF0aC5zaWduKHgud2lkdGgpO3JldHVybiB3PE8qeC5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKGspPi41KnguaGVpZ2h0PyhlZSgpLCEwKTooRigpLHJlKCksITApOk1hdGguYWJzKGspPnguaGVpZ2h0PyhlZSgpLCEwKToodzw9Typ4Lm5vdEFTcGFjZSYmRigpLHc8PU8qeC50cmFja2luZ1NwYWNlTWluP3gud2lkdGgrPXc6dGUodyx4LnByZXZUcmFuc2Zvcm0sTyl8fCgwPT09eC5zdHIubGVuZ3RoPyhGKCksUy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyh3KSxoZWlnaHQ6MCx0cmFuc2Zvcm06eC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnguZm9udE5hbWUsaGFzRU9MOiExfSkpOngud2lkdGgrPXcpLCEwKX1mdW5jdGlvbiBRKGUpe3ZhciB0PWUuY2hhcnMscj1lLmV4dHJhU3BhY2luZyxuPVAuZm9udDtpZih0KWZvcih2YXIgYT1uLmNoYXJzVG9HbHlwaHModCksaT1QLmZvbnRNYXRyaXhbMF0qUC5mb250U2l6ZSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1hW29dLHU9Yy5jYXRlZ29yeTtpZighdS5pc0ludmlzaWJsZUZvcm1hdE1hcmspe3ZhciBsPVAuY2hhclNwYWNpbmcrKG8rMT09PXM/cjowKSxmPWMud2lkdGg7bi52ZXJ0aWNhbCYmKGY9Yy52bWV0cmljP2Mudm1ldHJpY1swXTotZik7dmFyIGg9ZippO2lmKHUuaXNXaGl0ZXNwYWNlKW4udmVydGljYWw/KGwrPS1oK1Aud29yZFNwYWNpbmcsUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWwpKToobCs9aCtQLndvcmRTcGFjaW5nLFAudHJhbnNsYXRlVGV4dE1hdHJpeChsKlAudGV4dEhTY2FsZSwwKSksQygiICIpO2Vsc2UgaWYoWigpKXt2YXIgZD1HKCk7dS5pc1plcm9XaWR0aERpYWNyaXRpYyYmKGg9MCksbi52ZXJ0aWNhbD8oUC50cmFuc2xhdGVUZXh0TWF0cml4KDAsaCksaD1NYXRoLmFicyhoKSxkLmhlaWdodCs9aCk6KGgqPVAudGV4dEhTY2FsZSxQLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCwwKSxkLndpZHRoKz1oKSxoJiYoZC5wcmV2VHJhbnNmb3JtPUgoKSk7dmFyIHA9Yy5ub3JtYWxpemVkVW5pY29kZTtDKHApJiZkLnN0ci5wdXNoKCIgIiksZC5zdHIucHVzaChwKSxsJiYobi52ZXJ0aWNhbD9QLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtbCk6UC50cmFuc2xhdGVUZXh0TWF0cml4KGwqUC50ZXh0SFNjYWxlLDApKX19fWVsc2V7dmFyIGc9UC5jaGFyU3BhY2luZytyO2cmJihuLnZlcnRpY2FsP1AudHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1nKTpQLnRyYW5zbGF0ZVRleHRNYXRyaXgoZypQLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBlZSgpe0YoKSx4LmluaXRpYWxpemVkPyh4Lmhhc0VPTD0hMCxyZSgpKTpTLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06SCgpLGZvbnROYW1lOlAubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiB0ZShlLHQscil7aWYocip4LnNwYWNlSW5GbG93TWluPD1lJiZlPD1yKnguc3BhY2VJbkZsb3dNYXgpcmV0dXJuIHguaW5pdGlhbGl6ZWQmJihGKCkseC5zdHIucHVzaCgiICIpKSwhMTt2YXIgbj14LmZvbnROYW1lLGE9MDtyZXR1cm4geC52ZXJ0aWNhbCYmKGE9ZSxlPTApLHJlKCksRigpLFMuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6TWF0aC5hYnMoZSksaGVpZ2h0Ok1hdGguYWJzKGEpLHRyYW5zZm9ybTp0fHxIKCksZm9udE5hbWU6bixoYXNFT0w6ITF9KSwhMH1mdW5jdGlvbiByZSgpe3ZhciBlLHQscjt4LmluaXRpYWxpemVkJiZ4LnN0ciYmKHgudmVydGljYWw/eC50b3RhbEhlaWdodCs9eC5oZWlnaHQqeC50ZXh0QWR2YW5jZVNjYWxlOngudG90YWxXaWR0aCs9eC53aWR0aCp4LnRleHRBZHZhbmNlU2NhbGUsUy5pdGVtcy5wdXNoKCh0PShlPXgpLnN0ci5qb2luKCIiKSx7c3RyOihyPSgwLGIuYmlkaSkodCwtMSxlLnZlcnRpY2FsKSkuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9KSkseC5pbml0aWFsaXplZD0hMSx4LnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gbmUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9Uy5pdGVtcy5sZW5ndGg7MCE9PXQmJihlJiZ0PDEwfHwoZC5lbnF1ZXVlKFMsdCksUy5pdGVtcz1bXSxTLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpKSl9dmFyIGFlPW5ldyBxO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWZ1bmN0aW9uKG4pe25lKCEwKSxQcm9taXNlLmFsbChbbixkLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O24uZW5zdXJlTm90VGVybWluYXRlZCgpLGFlLnJlc2V0KCk7Zm9yKHZhciB1LGY9e30scD1bXTshKHU9YWUuY2hlY2soKSkmJihwLmxlbmd0aD0wLGYuYXJncz1wLFgucmVhZChmKSk7KXtQPWMuc3RhdGU7dmFyIHY9Zi5mbjtzd2l0Y2gocD1mLmFyZ3MsMHx2KXtjYXNlIGEuT1BTLnNldEZvbnQ6dmFyIGI9cFswXS5uYW1lLHc9cFsxXTtpZihQLmZvbnQmJmI9PT1QLmZvbnROYW1lJiZ3PT09UC5mb250U2l6ZSlicmVhaztyZXR1cm4gcmUoKSxQLmZvbnROYW1lPWIsUC5mb250U2l6ZT13LHZvaWQgcyhZKGIsbnVsbCkpO2Nhc2UgYS5PUFMuc2V0VGV4dFJpc2U6UC50ZXh0UmlzZT1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0SFNjYWxlOlAudGV4dEhTY2FsZT1wWzBdLzEwMDticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmc6UC5sZWFkaW5nPXBbMF07YnJlYWs7Y2FzZSBhLk9QUy5tb3ZlVGV4dDpQLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHBbMF0scFsxXSksUC50ZXh0TWF0cml4PVAudGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpQLmxlYWRpbmc9LXBbMV0sUC50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0pLFAudGV4dE1hdHJpeD1QLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBhLk9QUy5uZXh0TGluZTpQLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBhLk9QUy5zZXRUZXh0TWF0cml4OlAuc2V0VGV4dE1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSksUC5zZXRUZXh0TGluZU1hdHJpeChwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XSkseigpO2JyZWFrO2Nhc2UgYS5PUFMuc2V0Q2hhclNwYWNpbmc6UC5jaGFyU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuc2V0V29yZFNwYWNpbmc6UC53b3JkU3BhY2luZz1wWzBdO2JyZWFrO2Nhc2UgYS5PUFMuYmVnaW5UZXh0OlAudGV4dE1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLFAudGV4dExpbmVNYXRyaXg9YS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGEuT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfWZvcih2YXIgeD0oUC5mb250LnZlcnRpY2FsPzE6LTEpKlAuZm9udFNpemUvMWUzLE89cFswXSxBPTAsQz1PLmxlbmd0aDtBPEMtMTtBKyspe3ZhciBGPU9bQV07aWYoInN0cmluZyI9PXR5cGVvZiBGKU4ucHVzaChGKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgRiYmMCE9PUYpe3ZhciBUPU4uam9pbigiIik7Ti5sZW5ndGg9MCxRKHtjaGFyczpULGV4dHJhU3BhY2luZzpGKnh9KX19dmFyIEk9Ty5hdCgtMSk7aWYoInN0cmluZyI9PXR5cGVvZiBJJiZOLnB1c2goSSksTi5sZW5ndGg+MCl7dmFyIEU9Ti5qb2luKCIiKTtOLmxlbmd0aD0wLFEoe2NoYXJzOkUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIGEuT1BTLnNob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIWMuc3RhdGUuZm9udCl7TC5lbnN1cmVTdGF0ZUZvbnQoYy5zdGF0ZSk7Y29udGludWV9UC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFjLnN0YXRlLmZvbnQpe0wuZW5zdXJlU3RhdGVGb250KGMuc3RhdGUpO2NvbnRpbnVlfVAud29yZFNwYWNpbmc9cFswXSxQLmNoYXJTcGFjaW5nPXBbMV0sUC5jYXJyaWFnZVJldHVybigpLFEoe2NoYXJzOnBbMl0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIGEuT1BTLnBhaW50WE9iamVjdDpyZSgpLER8fChEPWkuZ2V0KCJYT2JqZWN0Iil8fG8uRGljdC5lbXB0eSk7dmFyIGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lO2lmKGomJkIuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO3ZhciByPUQuZ2V0UmF3KE0pO2lmKHIgaW5zdGFuY2VvZiBvLlJlZil7aWYoQi5nZXRCeVJlZihyKSlyZXR1cm4gdm9pZCBlKCk7aWYoTC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixMLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO3I9Ui5mZXRjaChyKX1pZighKHIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBzPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKHMgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09cy5uYW1lKXJldHVybiBCLnNldChNLHIuZGljdC5vYmpJZCwhMCksdm9pZCBlKCk7dmFyIHU9Yy5zdGF0ZS5jbG9uZSgpLGY9bmV3IFcodSkscD1yLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpO0FycmF5LmlzQXJyYXkocCkmJjY9PT1wLmxlbmd0aCYmZi50cmFuc2Zvcm0ocCksbmUoKTt2YXIgdj17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZC5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBkLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZC5yZWFkeX19O0wuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6bixyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmYsY29tYmluZVRleHRJdGVtczpsLGluY2x1ZGVNYXJrZWRDb250ZW50Omgsc2luazp2LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OnksbWFya2VkQ29udGVudERhdGE6a30pLnRoZW4oKGZ1bmN0aW9uKCl7di5lbnF1ZXVlSW52b2tlZHx8Qi5zZXQoTSxyLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYoIUwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmlmKGo9cFswXWluc3RhbmNlb2Ygby5OYW1lLE09cFswXS5uYW1lLGomJlUuZ2V0QnlOYW1lKE0pKWJyZWFrO3JldHVybiB2b2lkIHMobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIWopdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEociBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBuPXIuZ2V0KE0pO2lmKCEobiBpbnN0YW5jZW9mIG8uRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO3ZhciBzPW4uZ2V0KCJGb250Iik7aWYoIXMpcmV0dXJuIFUuc2V0KE0sbi5vYmpJZCwhMCksdm9pZCBlKCk7cmUoKSxQLmZvbnROYW1lPW51bGwsUC5mb250U2l6ZT1zWzFdLFkobnVsbCxzWzBdKS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pKXtpZighTC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtjYXNlIGEuT1BTLmJlZ2luTWFya2VkQ29udGVudDpyZSgpLGgmJihrLmxldmVsKyssUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpwWzBdaW5zdGFuY2VvZiBvLk5hbWU/cFswXS5uYW1lOm51bGx9KSk7YnJlYWs7Y2FzZSBhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczppZihyZSgpLGgpe2subGV2ZWwrKzt2YXIgXz1udWxsO3BbMV1pbnN0YW5jZW9mIG8uRGljdCYmKF89cFsxXS5nZXQoIk1DSUQiKSksUy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihfKT8iIi5jb25jYXQoTC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tY2lkIikuY29uY2F0KF8pOm51bGwsdGFnOnBbMF1pbnN0YW5jZW9mIG8uTmFtZT9wWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgYS5PUFMuZW5kTWFya2VkQ29udGVudDppZihyZSgpLGgpe2lmKDA9PT1rLmxldmVsKWJyZWFrO2subGV2ZWwtLSxTLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9fWlmKFMuaXRlbXMubGVuZ3RoPj1kLmRlc2lyZWRTaXplKXt1PSEwO2JyZWFrfX11P3MoJCk6KHJlKCksbmUoKSx0KCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBhLkFib3J0RXhjZXB0aW9uKSl7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4oMCxhLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KG4ubmFtZSwnIiAnKSsndGFzazogIicuY29uY2F0KGUsJyIuJykpLHJlKCksdm9pZCBuZSgpO3Rocm93IGV9fSkpfX0se2tleToiZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLHM9dGhpcy54cmVmLGw9dGhpcy5yZWFkVG9Vbmljb2RlKHIudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7ZiBpbnN0YW5jZW9mIG8uRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGYuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmYuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7dmFyIGg9ZS5nZXQoIkNJRFRvR0lETWFwIik7aCBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSYmKG49aC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGEud2FybikoJ2V4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICInLmNvbmNhdChlLCciLicpKX19dmFyIGQscD1bXSxnPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKChkPWUuZ2V0KCJFbmNvZGluZyIpKWluc3RhbmNlb2Ygby5EaWN0KXtpZihnPShnPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSlpbnN0YW5jZW9mIG8uTmFtZT9nLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSl7dmFyIHYseT0wLGI9TihkLmdldCgiRGlmZmVyZW5jZXMiKSk7dHJ5e2ZvcihiLnMoKTshKHY9Yi5uKCkpLmRvbmU7KXt2YXIgdz12LnZhbHVlLGs9cy5mZXRjaElmUmVmKHcpO2lmKCJudW1iZXIiPT10eXBlb2Ygayl5PWs7ZWxzZXtpZighKGsgaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KGspKTtwW3krK109ay5uYW1lfX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9fX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBvLk5hbWUpZz1kLm5hbWU7ZWxzZXt2YXIgUz0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcihTKTsoMCxhLndhcm4pKFMpfSJNYWNSb21hbkVuY29kaW5nIiE9PWcmJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1nJiYiV2luQW5zaUVuY29kaW5nIiE9PWcmJihnPW51bGwpfWlmKGcpci5kZWZhdWx0RW5jb2Rpbmc9KDAsdS5nZXRFbmNvZGluZykoZyk7ZWxzZXt2YXIgeD0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxPPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fE98fChkPXUuV2luQW5zaUVuY29kaW5nKSx4JiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlJiYhci5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KHIubmFtZSk/ZD11LlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KHIubmFtZSkmJihkPXUuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKSksci5kZWZhdWx0RW5jb2Rpbmc9ZH1yZXR1cm4gci5kaWZmZXJlbmNlcz1wLHIuYmFzZUVuY29kaW5nTmFtZT1nLHIuaGFzRW5jb2Rpbmc9ISFnfHxwLmxlbmd0aD4wLHIuZGljdD1lLGwudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUsaS5idWlsZFRvVW5pY29kZShyKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci50b1VuaWNvZGU9ZSxuJiYoci5jaWRUb0dpZE1hcD1pLnJlYWRDaWRUb0dpZE1hcChuLGUpKSxyfSkpfX0se2tleToiX3NpbXBsZUZvbnRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsYS5hc3NlcnQpKCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO3ZhciByPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxvPWUuZGlmZmVyZW5jZXM7Zm9yKHZhciBzIGluIG8pe3ZhciBjPW9bc107Ii5ub3RkZWYiIT09YyYmKG5bc109Yyl9dmFyIGw9KDAsUy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgZiBpbiBuKXt2YXIgaD1uW2ZdO2lmKCIiIT09aCl7dmFyIGQ9bFtoXTtpZih2b2lkIDA9PT1kKXt2YXIgcD0wO3N3aXRjaChoWzBdKXtjYXNlIkciOjM9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1oLmxlbmd0aCYmKHA9cGFyc2VJbnQoaC5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYoaC5sZW5ndGg+PTMmJmgubGVuZ3RoPD00KXt2YXIgZz1oLnN1YnN0cmluZygxKTtpZih0KXtwPXBhcnNlSW50KGcsMTYpO2JyZWFrfWlmKHA9K2csTnVtYmVyLmlzTmFOKHApJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGcsMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOi0xIT09KGQ9KDAsQS5nZXRVbmljb2RlRm9yR2x5cGgpKGgsbCkpJiYocD1kKX1pZihwPjAmJnA8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIocCkpe2lmKGkmJnA9PT0rZil7dmFyIHY9KDAsdS5nZXRFbmNvZGluZykoaSk7aWYodiYmKGg9dltmXSkpe3JbZl09U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtjb250aW51ZX19cltmXT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKX19ZWxzZSByW2ZdPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fXJldHVybiByfX0se2tleToiYnVpbGRUb1VuaWNvZGUiLHZhbHVlOihyPU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbixzLGMsdSxsO3JldHVybiBFKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIXQudG9Vbmljb2RlJiZ0LnRvVW5pY29kZS5sZW5ndGg+MCwhdC5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIXQuY29tcG9zaXRlJiZ0Lmhhc0VuY29kaW5nJiYodC5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHQpKSxlLmFicnVwdCgicmV0dXJuIix0LnRvVW5pY29kZSk7Y2FzZSA0OmlmKHQuY29tcG9zaXRlKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGQuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUodCkpKTtjYXNlIDY6aWYoIXQuY29tcG9zaXRlfHwoIXQuY01hcC5idWlsdEluQ01hcHx8dC5jTWFwIGluc3RhbmNlb2YgaS5JZGVudGl0eUNNYXApJiYoIkFkb2JlIiE9PXQuY2lkU3lzdGVtSW5mby5yZWdpc3RyeXx8IkdCMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJDTlMxIiE9PXQuY2lkU3lzdGVtSW5mby5vcmRlcmluZyYmIkphcGFuMSIhPT10LmNpZFN5c3RlbUluZm8ub3JkZXJpbmcmJiJLb3JlYTEiIT09dC5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSl7ZS5uZXh0PTE1O2JyZWFrfXJldHVybiByPXQuY2lkU3lzdGVtSW5mbyxuPXIucmVnaXN0cnkscz1yLm9yZGVyaW5nLGM9by5OYW1lLmdldCgiIi5jb25jYXQobiwiLSIpLmNvbmNhdChzLCItVUNTMiIpKSxlLm5leHQ9MTEsaS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7Y2FzZSAxMTpyZXR1cm4gdT1lLnNlbnQsbD1bXSx0LmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9dS5sb29rdXAodCk7ciYmKGxbZV09U3RyaW5nLmZyb21DaGFyQ29kZSgoci5jaGFyQ29kZUF0KDApPDw4KStyLmNoYXJDb2RlQXQoMSkpKX0pKSxlLmFicnVwdCgicmV0dXJuIixuZXcgZC5Ub1VuaWNvZGVNYXAobCkpO2Nhc2UgMTU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKHQuZmlyc3RDaGFyLHQubGFzdENoYXIpKTtjYXNlIDE2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlYWRUb1VuaWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIG8uTmFtZT9pLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuSWRlbnRpdHlDTWFwP25ldyBkLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBkLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtP2kuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBpLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCJudW1iZXIiIT10eXBlb2Ygcil7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErPTIpe3ZhciBpPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtpZig1NTI5Nj09KDYzNDg4JmkpKXthKz0yO3ZhciBvPXIuY2hhckNvZGVBdChhKTw8OHxyLmNoYXJDb2RlQXQoYSsxKTtuLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmbykrNjU1MzYpfWVsc2Ugbi5wdXNoKGkpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLG4pfWVsc2UgdFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodC5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pLCgwLGEud2FybikoJ3JlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfX0se2tleToicmVhZENpZFRvR2lkTWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1lW24rK108PDh8ZVtuXSxvPW4+PjE7KDAhPT1pfHx0LmhhcyhvKSkmJihyW29dPWkpfXJldHVybiByfX0se2tleToiZXh0cmFjdFdpZHRocyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzLHUsbCxmLGgsZD10aGlzLnhyZWYscD1bXSxnPTAsdj1bXTtpZihyLmNvbXBvc2l0ZSl7aWYoZz1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKGw9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iocz0wLHU9Zi5sZW5ndGg7czx1O3MrKylwW2wrK109ZC5mZXRjaElmUmVmKGZbc10pO2Vsc2V7dmFyIHk9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKHM9bDtzPD1mO3MrKylwW3NdPXl9aWYoci52ZXJ0aWNhbCl7dmFyIG09ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1bbVsxXSwuNSpnLG1bMF1dLG09ZS5nZXQoIlcyIikpZm9yKGE9MCxpPW0ubGVuZ3RoO2E8aTthKyspaWYobD1kLmZldGNoSWZSZWYobVthKytdKSxmPWQuZmV0Y2hJZlJlZihtW2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihzPTAsdT1mLmxlbmd0aDtzPHU7cysrKXZbbCsrXT1bZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbcysrXSksZC5mZXRjaElmUmVmKGZbc10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKSxkLmZldGNoSWZSZWYobVsrK2FdKV07Zm9yKHM9bDtzPD1mO3MrKyl2W3NdPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iocz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtzKytdPWQuZmV0Y2hJZlJlZihoW2FdKTtnPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKGsgaW5zdGFuY2VvZiBvLk5hbWUpe3ZhciBTPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGsubmFtZSk7cD10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKFMud2lkdGhzLHIpLGc9Uy5kZWZhdWx0V2lkdGh9fX12YXIgeD0hMCxPPWc7Zm9yKHZhciBBIGluIHApe3ZhciBDPXBbQV07aWYoQylpZihPKXtpZihPIT09Qyl7eD0hMTticmVha319ZWxzZSBPPUN9eCYmKHIuZmxhZ3N8PWMuRm9udEZsYWdzLkZpeGVkUGl0Y2gpLHIuZGVmYXVsdFdpZHRoPWcsci53aWR0aHM9cCxyLmRlZmF1bHRWTWV0cmljcz1uLHIudm1ldHJpY3M9dn19LHtrZXk6ImlzU2VyaWZGb250Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfX0se2tleToiZ2V0QmFzZUZvbnRNZXRyaWNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLGk9KDAsTy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgbz1pW2FdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygbz8odD1vLG49ITApOnI9bygpLHtkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6bix3aWR0aHM6cn19fSx7a2V5OiJidWlsZENoYXJDb2RlVG9XaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn19LHtrZXk6InByZUV2YWx1YXRlRm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShyIGluc3RhbmNlb2Ygby5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTt2YXIgbixpLHM9ITE7aWYoIlR5cGUwIj09PXIubmFtZSl7dmFyIGM9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KGMpP3RoaXMueHJlZi5mZXRjaElmUmVmKGNbMF0pOmMpaW5zdGFuY2VvZiBvLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZighKChyPWUuZ2V0KCJTdWJ0eXBlIikpaW5zdGFuY2VvZiBvLk5hbWUpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3M9ITB9dmFyIHU9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChzPzY1NTM1OjI1NSksZj1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihmKXtuPW5ldyBDLk11cm11ckhhc2gzXzY0O3ZhciBoPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGggaW5zdGFuY2VvZiBvLk5hbWUpbi51cGRhdGUoaC5uYW1lKTtlbHNlIGlmKGggaW5zdGFuY2VvZiBvLlJlZiluLnVwZGF0ZShoLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaCBpbnN0YW5jZW9mIG8uRGljdCl7dmFyIGQscD1OKGguZ2V0UmF3VmFsdWVzKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTtpZihnIGluc3RhbmNlb2Ygby5OYW1lKW4udXBkYXRlKGcubmFtZSk7ZWxzZSBpZihnIGluc3RhbmNlb2Ygby5SZWYpbi51cGRhdGUoZy50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgdj1nLmxlbmd0aCx5PW5ldyBBcnJheSh2KSxiPTA7Yjx2O2IrKyl7dmFyIHc9Z1tiXTt3IGluc3RhbmNlb2Ygby5OYW1lP3lbYl09dy5uYW1lOigibnVtYmVyIj09dHlwZW9mIHd8fHcgaW5zdGFuY2VvZiBvLlJlZikmJih5W2JdPXcudG9TdHJpbmcoKSl9bi51cGRhdGUoeS5qb2luKCkpfX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fWlmKG4udXBkYXRlKCIiLmNvbmNhdCh1LCItIikuY29uY2F0KGwpKSwoaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSlpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSl7dmFyIGs9aS5zdHJ8fGksUz1rLmJ1ZmZlcj9uZXcgVWludDhBcnJheShrLmJ1ZmZlci5idWZmZXIsMCxrLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoay5ieXRlcy5idWZmZXIsay5zdGFydCxrLmVuZC1rLnN0YXJ0KTtuLnVwZGF0ZShTKX1lbHNlIGkgaW5zdGFuY2VvZiBvLk5hbWUmJm4udXBkYXRlKGkubmFtZSk7dmFyIHg9ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheSh4KSl7dmFyIE8sQT1bXSxGPU4oeCk7dHJ5e2ZvcihGLnMoKTshKE89Ri5uKCkpLmRvbmU7KXt2YXIgUD1PLnZhbHVlOygibnVtYmVyIj09dHlwZW9mIFB8fFAgaW5zdGFuY2VvZiBvLlJlZikmJkEucHVzaChQLnRvU3RyaW5nKCkpfX1jYXRjaChlKXtGLmUoZSl9ZmluYWxseXtGLmYoKX1uLnVwZGF0ZShBLmpvaW4oKSl9aWYocyl7bi51cGRhdGUoImNvbXBvc2l0ZUZvbnQiKTt2YXIgVD1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoVCkpe3ZhciBJLEU9W10saj1OKFQpO3RyeXtmb3Ioai5zKCk7IShJPWoubigpKS5kb25lOyl7dmFyIE09SS52YWx1ZTtpZigibnVtYmVyIj09dHlwZW9mIE18fE0gaW5zdGFuY2VvZiBvLlJlZilFLnB1c2goTS50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoTSkpe3ZhciBfLEw9W10sUj1OKE0pO3RyeXtmb3IoUi5zKCk7IShfPVIubigpKS5kb25lOyl7dmFyIEQ9Xy52YWx1ZTsoIm51bWJlciI9PXR5cGVvZiBEfHxEIGluc3RhbmNlb2Ygby5SZWYpJiZMLnB1c2goRC50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9RS5wdXNoKCJbIi5jb25jYXQoTC5qb2luKCksIl0iKSl9fX1jYXRjaChlKXtqLmUoZSl9ZmluYWxseXtqLmYoKX1uLnVwZGF0ZShFLmpvaW4oKSl9dmFyIEI9ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO0IgaW5zdGFuY2VvZiBvLk5hbWU/bi51cGRhdGUoQi5uYW1lKTpCIGluc3RhbmNlb2Ygby5SZWY/bi51cGRhdGUoQi50b1N0cmluZygpKTpCIGluc3RhbmNlb2YgbS5CYXNlU3RyZWFtJiZuLnVwZGF0ZShCLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6ZixkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6cyx0eXBlOnIubmFtZSxmaXJzdENoYXI6dSxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6bj9uLmhleGRpZ2VzdCgpOiIifX19LHtrZXk6InRyYW5zbGF0ZUZvbnQiLHZhbHVlOih0PU0oRSgpLm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbix1LGYsZCxwLGcsdixtLGIsdyxrLFMseCxPLEEsQyxGLFAsVCxJLGosTSxfLEwsUixELEIsVSwkLFgsSCxxLEcseixXPXRoaXM7cmV0dXJuIEUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPXQuZGVzY3JpcHRvcixuPXQuZGljdCx1PXQuYmFzZURpY3QsZj10LmNvbXBvc2l0ZSxkPXQudHlwZSxwPXQuZmlyc3RDaGFyLGc9dC5sYXN0Q2hhcix2PXQudG9Vbmljb2RlLG09dC5jc3NGb250SW5mbyxiPSJUeXBlMyI9PT1kLHIpe2UubmV4dD0yNzticmVha31pZighYil7ZS5uZXh0PTk7YnJlYWt9KHI9bmV3IG8uRGljdChudWxsKSkuc2V0KCJGb250TmFtZSIsby5OYW1lLmdldChkKSksci5zZXQoIkZvbnRCQm94IixuLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pLGUubmV4dD0yNzticmVhaztjYXNlIDk6aWYoKGs9bi5nZXQoIkJhc2VGb250IikpaW5zdGFuY2VvZiBvLk5hbWUpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtjYXNlIDEyOmlmKGs9ay5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpLFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoaykseD1rLnNwbGl0KCItIilbMF0sTz0odGhpcy5pc1NlcmlmRm9udCh4KT9jLkZvbnRGbGFncy5TZXJpZjowKXwoUy5tb25vc3BhY2U/Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbeF0/Yy5Gb250RmxhZ3MuU3ltYm9saWM6Yy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpLHc9e3R5cGU6ZCxuYW1lOmssbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsd2lkdGhzOlMud2lkdGhzLGRlZmF1bHRXaWR0aDpTLmRlZmF1bHRXaWR0aCxpc1NpbXVsYXRlZEZsYWdzOiEwLGZsYWdzOk8sZmlyc3RDaGFyOnAsbGFzdENoYXI6Zyx0b1VuaWNvZGU6dix4SGVpZ2h0OjAsY2FwSGVpZ2h0OjAsaXRhbGljQW5nbGU6MCxpc1R5cGUzRm9udDpifSxBPW4uZ2V0KCJXaWR0aHMiKSxDPSgwLGwuZ2V0U3RhbmRhcmRGb250TmFtZSkoayksRj1udWxsLCFDKXtlLm5leHQ9MjY7YnJlYWt9cmV0dXJuIHcuaXNTdGFuZGFyZEZvbnQ9ITAsZS5uZXh0PTI0LHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEMpO2Nhc2UgMjQ6Rj1lLnNlbnQsdy5pc0ludGVybmFsRm9udD0hIUY7Y2FzZSAyNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobixuLHcpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKEEpe3ZhciB0LHI9W10sbj1wLGE9TihBKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBpPXQudmFsdWU7cltuKytdPVcueHJlZi5mZXRjaElmUmVmKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLndpZHRocz1yfWVsc2UgZS53aWR0aHM9Vy5idWlsZENoYXJDb2RlVG9XaWR0aChTLndpZHRocyxlKTtyZXR1cm4gbmV3IHMuRm9udChrLEYsZSl9KSkpO2Nhc2UgMjc6aWYoUD1yLmdldCgiRm9udE5hbWUiKSxUPW4uZ2V0KCJCYXNlRm9udCIpLCJzdHJpbmciPT10eXBlb2YgUCYmKFA9by5OYW1lLmdldChQKSksInN0cmluZyI9PXR5cGVvZiBUJiYoVD1vLk5hbWUuZ2V0KFQpKSxifHwoST1QJiZQLm5hbWUsaj1UJiZULm5hbWUsSSE9PWomJigoMCxhLmluZm8pKCJUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyBcIiIuY29uY2F0KEksJyIgYnV0ICcpKyJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiIuY29uY2F0KGosJyIuJykpLEkmJmomJmouc3RhcnRzV2l0aChJKSYmKFA9VCkpKSwoUD1QfHxUKWluc3RhbmNlb2Ygby5OYW1lKXtlLm5leHQ9MzU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7Y2FzZSAzNTplLnByZXY9MzUsTT1yLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKSxlLm5leHQ9NDU7YnJlYWs7Y2FzZSAzOTppZihlLnByZXY9MzksZS50MD1lLmNhdGNoKDM1KSx0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXtlLm5leHQ9NDM7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDQzOigwLGEud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoUC5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLnQwLCciLicpKSxNPW5ldyB5Lk51bGxTdHJlYW07Y2FzZSA0NTppZihCPSExLFU9ITEsJD1udWxsLCFNKXtlLm5leHQ9NTI7YnJlYWt9TS5kaWN0JiYoKFg9TS5kaWN0LmdldCgiU3VidHlwZSIpKWluc3RhbmNlb2Ygby5OYW1lJiYoXz1YLm5hbWUpLEw9TS5kaWN0LmdldCgiTGVuZ3RoMSIpLFI9TS5kaWN0LmdldCgiTGVuZ3RoMiIpLEQ9TS5kaWN0LmdldCgiTGVuZ3RoMyIpKSxlLm5leHQ9NzQ7YnJlYWs7Y2FzZSA1MjppZighbSl7ZS5uZXh0PTY2O2JyZWFrfWlmKCEoSD0oMCxoLmdldFhmYUZvbnROYW1lKShQLm5hbWUpKSl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBtLmZvbnRGYW1pbHk9IiIuY29uY2F0KG0uZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLG0ubWV0cmljcz1ILm1ldHJpY3N8fG51bGwsJD1ILmZhY3RvcnN8fG51bGwsZS5uZXh0PTYwLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKEgubmFtZSk7Y2FzZSA2MDpNPWUuc2VudCxVPSEhTSx1PW49KDAsaC5nZXRYZmFGb250RGljdCkoUC5uYW1lKSxmPSEwO2Nhc2UgNjQ6ZS5uZXh0PTc0O2JyZWFrO2Nhc2UgNjY6aWYoYil7ZS5uZXh0PTc0O2JyZWFrfWlmKCEocT0oMCxsLmdldFN0YW5kYXJkRm9udE5hbWUpKFAubmFtZSkpKXtlLm5leHQ9NzQ7YnJlYWt9cmV0dXJuIEI9ITAsZS5uZXh0PTcyLHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHEpO2Nhc2UgNzI6TT1lLnNlbnQsVT0hIU07Y2FzZSA3NDppZih3PXt0eXBlOmQsbmFtZTpQLm5hbWUsc3VidHlwZTpfLGZpbGU6TSxsZW5ndGgxOkwsbGVuZ3RoMjpSLGxlbmd0aDM6RCxpc1N0YW5kYXJkRm9udDpCLGlzSW50ZXJuYWxGb250OlUsbG9hZGVkTmFtZTp1LmxvYWRlZE5hbWUsY29tcG9zaXRlOmYsZml4ZWRQaXRjaDohMSxmb250TWF0cml4Om4uZ2V0QXJyYXkoIkZvbnRNYXRyaXgiKXx8YS5GT05UX0lERU5USVRZX01BVFJJWCxmaXJzdENoYXI6cCxsYXN0Q2hhcjpnLHRvVW5pY29kZTp2LGJib3g6ci5nZXRBcnJheSgiRm9udEJCb3giKXx8bi5nZXRBcnJheSgiRm9udEJCb3giKSxhc2NlbnQ6ci5nZXQoIkFzY2VudCIpLGRlc2NlbnQ6ci5nZXQoIkRlc2NlbnQiKSx4SGVpZ2h0OnIuZ2V0KCJYSGVpZ2h0Iil8fDAsY2FwSGVpZ2h0OnIuZ2V0KCJDYXBIZWlnaHQiKXx8MCxmbGFnczpyLmdldCgiRmxhZ3MiKSxpdGFsaWNBbmdsZTpyLmdldCgiSXRhbGljQW5nbGUiKXx8MCxpc1R5cGUzRm9udDpiLGNzc0ZvbnRJbmZvOm0sc2NhbGVGYWN0b3JzOiR9LCFmKXtlLm5leHQ9ODM7YnJlYWt9cmV0dXJuKEc9dS5nZXQoIkVuY29kaW5nIikpaW5zdGFuY2VvZiBvLk5hbWUmJih3LmNpZEVuY29kaW5nPUcubmFtZSksZS5uZXh0PTgwLGkuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzpHLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2Nhc2UgODA6ej1lLnNlbnQsdy5jTWFwPXosdy52ZXJ0aWNhbD13LmNNYXAudmVydGljYWw7Y2FzZSA4MzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMobix1LHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBXLmV4dHJhY3RXaWR0aHMobixyLGUpLG5ldyBzLkZvbnQoUC5uYW1lLE0sZSl9KSkpO2Nhc2UgODQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1szNSwzOV1dKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSxbe2tleToiYnVpbGRGb250UGF0aHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkodCl7dmFyIGk9IiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpO3RyeXtpZihlLnJlbmRlcmVyLmhhc0J1aWx0UGF0aCh0KSlyZXR1cm47ci5zZW5kKCJjb21tb25vYmoiLFtpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX1jYXRjaChlKXtpZihuLmlnbm9yZUVycm9ycylyZXR1cm4gci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6YS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGh9KSx2b2lkKDAsYS53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19dmFyIG8scz1OKHQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIGM9by52YWx1ZTtpKGMuZm9udENoYXIpO3ZhciB1PWMuYWNjZW50O3UmJnUuZm9udENoYXImJmkodS5mb250Q2hhcil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX19LHtrZXk6ImZhbGxiYWNrRm9udERpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkRpY3Q7cmV0dXJuIGUuc2V0KCJCYXNlRm9udCIsby5OYW1lLmdldCgiUERGSlMtRmFsbGJhY2tGb250IikpLGUuc2V0KCJUeXBlIixvLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIlN1YnR5cGUiLG8uTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiRW5jb2RpbmciLG8uTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKSwoMCxhLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fV0pLGV9KCk7dC5QYXJ0aWFsRXZhbHVhdG9yPUc7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQubG9hZGVkTmFtZSxuPXQuZm9udCxhPXQuZGljdCxpPXQuZXZhbHVhdG9yT3B0aW9ucztfKHRoaXMsZSksdGhpcy5sb2FkZWROYW1lPXIsdGhpcy5mb250PW4sdGhpcy5kaWN0PWEsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1pfHxVLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPW4uaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gUihlLFt7a2V5OiJzZW5kIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNlbnR8fCh0aGlzLnNlbnQ9ITAsZS5zZW5kKCJjb21tb25vYmoiLFt0aGlzLmxvYWRlZE5hbWUsIkZvbnQiLHRoaXMuZm9udC5leHBvcnREYXRhKHRoaXMuX2V2YWx1YXRvck9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllcyldKSl9fSx7a2V5OiJmYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5mb250LmRhdGEmJih0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwLEcuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucykpfX0se2tleToibG9hZFR5cGUzRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7dmFyIGk9ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7aS5wYXJzaW5nVHlwZTNGb250PSEwO3ZhciBzPW5ldyBvLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCksaS50eXBlM0ZvbnRSZWZzPXM7dmFyIGMsdT10aGlzLmZvbnQsbD10aGlzLnR5cGUzRGVwZW5kZW5jaWVzLGY9UHJvbWlzZS5yZXNvbHZlKCksaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSxkPXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxnPWEuVXRpbC5ub3JtYWxpemVSZWN0KHUuYmJveHx8WzAsMCwwLDBdKSx2PWdbMl0tZ1swXSx5PWdbM10tZ1sxXSxtPU1hdGguaHlwb3Qodix5KSxiPU4oaC5nZXRLZXlzKCkpO3RyeXt2YXIgdz1mdW5jdGlvbigpe3ZhciBlPWMudmFsdWU7Zj1mLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9aC5nZXQoZSksbz1uZXcgRi5PcGVyYXRvckxpc3Q7cmV0dXJuIGkuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe28uZm5BcnJheVswXT09PWEuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmbi5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvLG0pLHBbZV09by5nZXRJUigpO3ZhciB0LHI9TihvLmRlcGVuZGVuY2llcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2wuYWRkKGkpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLGEud2FybikoJ1R5cGUzIGZvbnQgcmVzb3VyY2UgIicuY29uY2F0KGUsJyIgaXMgbm90IGF2YWlsYWJsZS4nKSk7dmFyIHI9bmV3IEYuT3BlcmF0b3JMaXN0O3BbZV09ci5nZXRJUigpfSkpfSkpfTtmb3IoYi5zKCk7IShjPWIubigpKS5kb25lOyl3KCl9Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9cmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ9Zi50aGVuKChmdW5jdGlvbigpe3UuY2hhclByb2NPcGVyYXRvckxpc3Q9cCxuLl9iYm94JiYodS5pc0NoYXJCQm94PSEwLHUuYmJveD1uLl9iYm94KX0pKSx0aGlzLnR5cGUzTG9hZGVkfX0se2tleToiX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpOYU4scj1hLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1yWzJdLXJbMF0saT1yWzNdLXJbMV0sbz1NYXRoLmh5cG90KG4saSk7MD09PW58fDA9PT1pPyhlLmZuQXJyYXkuc3BsaWNlKDAsMSksZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSkpOigwPT09dHx8TWF0aC5yb3VuZChvL3QpPj0xMCkmJih0aGlzLl9iYm94fHwodGhpcy5fYmJveD1bMS8wLDEvMCwtMS8wLC0xLzBdKSx0aGlzLl9iYm94WzBdPU1hdGgubWluKHRoaXMuX2Jib3hbMF0sclswXSksdGhpcy5fYmJveFsxXT1NYXRoLm1pbih0aGlzLl9iYm94WzFdLHJbMV0pLHRoaXMuX2Jib3hbMl09TWF0aC5tYXgodGhpcy5fYmJveFsyXSxyWzJdKSx0aGlzLl9iYm94WzNdPU1hdGgubWF4KHRoaXMuX2Jib3hbM10sclszXSkpO2Zvcih2YXIgcz0wLGM9ZS5sZW5ndGg7czxjOyl7c3dpdGNoKGUuZm5BcnJheVtzXSl7Y2FzZSBhLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHM6YnJlYWs7Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOmNhc2UgYS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6Y2FzZSBhLk9QUy5zZXRTdHJva2VDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNvbG9yTjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDb2xvck46Y2FzZSBhLk9QUy5zZXRTdHJva2VHcmF5OmNhc2UgYS5PUFMuc2V0RmlsbEdyYXk6Y2FzZSBhLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxSR0JDb2xvcjpjYXNlIGEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpjYXNlIGEuT1BTLnNldEZpbGxDTVlLQ29sb3I6Y2FzZSBhLk9QUy5zaGFkaW5nRmlsbDpjYXNlIGEuT1BTLnNldFJlbmRlcmluZ0ludGVudDplLmZuQXJyYXkuc3BsaWNlKHMsMSksZS5hcmdzQXJyYXkuc3BsaWNlKHMsMSksYy0tO2NvbnRpbnVlO2Nhc2UgYS5PUFMuc2V0R1N0YXRlOmZvcih2YXIgdT1UKGUuYXJnc0FycmF5W3NdLDEpWzBdLGw9MCxmPXUubGVuZ3RoO2w8Zjspe3N3aXRjaChUKHVbbF0sMSlbMF0pe2Nhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6dS5zcGxpY2UobCwxKSxmLS07Y29udGludWV9bCsrfX1zKyt9fX1dKSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5ldyBZO18odGhpcyxlKSx0aGlzLnN0YXRlPXQsdGhpcy5zdGF0ZVN0YWNrPVtdfXJldHVybiBSKGUsW3trZXk6InNhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlPWUuY2xvbmUoKX19LHtrZXk6InJlc3RvcmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfX0se2tleToidHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN0YXRlLmN0bT1hLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLGUpfX1dKSxlfSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Xyh0aGlzLGUpLHRoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PWEuRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PWEuSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1hLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXJldHVybiBSKGUsW3trZXk6InNldFRleHRNYXRyaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz10aGlzLnRleHRNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJzZXRUZXh0TGluZU1hdHJpeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9fSx7a2V5OiJ0cmFuc2xhdGVUZXh0TWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dE1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX19LHtrZXk6InRyYW5zbGF0ZVRleHRMaW5lTWF0cml4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudGV4dExpbmVNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19fSx7a2V5OiJjYXJyaWFnZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyksdGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe18odGhpcyxlKSx0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGEuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnQ9bnVsbCx0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWEuVGV4dFJlbmRlcmluZ01vZGUuRklMTCx0aGlzLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksdGhpcy5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9cmV0dXJuIFIoZSxbe2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fV0pLGV9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bmV3IFc7Xyh0aGlzLGUpLHRoaXMucGFyc2VyPW5ldyBnLlBhcnNlcih7bGV4ZXI6bmV3IGcuTGV4ZXIodCxlLm9wTWFwKSx4cmVmOnJ9KSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9pc1BhdGhPcD0hMSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiBSKGUsW3trZXk6InNhdmVkU3RhdGVzRGVwdGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10LmFyZ3M7Oyl7dmFyIG49dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYobiBpbnN0YW5jZW9mIG8uQ21kKXt2YXIgaT1uLmNtZCxzPWUub3BNYXBbaV07aWYoIXMpeygwLGEud2FybikoJ1Vua25vd24gY29tbWFuZCAiJy5jb25jYXQoaSwnIi4nKSk7Y29udGludWV9dmFyIGM9cy5pZCx1PXMubnVtQXJncyxsPW51bGwhPT1yP3IubGVuZ3RoOjA7aWYodGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKSx0aGlzLl9pc1BhdGhPcD1jPj1hLk9QUy5tb3ZlVG8mJmM8PWEuT1BTLmVuZFBhdGgscy52YXJpYWJsZUFyZ3MpbD51JiYoMCxhLmluZm8pKCJDb21tYW5kICIuY29uY2F0KGksIjogZXhwZWN0ZWQgWzAsICIpLmNvbmNhdCh1LCJdIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIikpO2Vsc2V7aWYobCE9PXUpe2Zvcih2YXIgZj10aGlzLm5vblByb2Nlc3NlZEFyZ3M7bD51OylmLnB1c2goci5zaGlmdCgpKSxsLS07Zm9yKDtsPHUmJjAhPT1mLmxlbmd0aDspbnVsbD09PXImJihyPVtdKSxyLnVuc2hpZnQoZi5wb3AoKSksbCsrfWlmKGw8dSl7dmFyIGg9ImNvbW1hbmQgIi5jb25jYXQoaSwiOiBleHBlY3RlZCAiKS5jb25jYXQodSwiIGFyZ3MsICIpKyJidXQgcmVjZWl2ZWQgIi5jb25jYXQobCwiIGFyZ3MuIik7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+ZS5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChoKSk7KDAsYS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoaCkpLG51bGwhPT1yJiYoci5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKGMsciksdC5mbj1jLHQuYXJncz1yLCEwfWlmKG49PT1vLkVPRilyZXR1cm4hMTtpZihudWxsIT09biYmKG51bGw9PT1yJiYocj1bXSksci5wdXNoKG4pLHIubGVuZ3RoPjMzKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX0se2tleToicHJlcHJvY2Vzc0NvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBhLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGEuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgYS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fV0sW3trZXk6Im9wTWFwIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx4LmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6YS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6YS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmEuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6YS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmEuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6YS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6YS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6YS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6YS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmEuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6YS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6YS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6YS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6YS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmEuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6YS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDphLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6YS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6YS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6YS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDphLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6YS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDphLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDphLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmEuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmEuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDphLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmEuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDphLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmEuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDphLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6YS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDphLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDphLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDphLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6YS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDphLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmEuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmEuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmEuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmEuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDphLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmEuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmEuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmEuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6YS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmEuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmEuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDphLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDphLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDphLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6YS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDphLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmEuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6YS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmEuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmEuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmEuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmEuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmEuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6YS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6YS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDphLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDphLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDphLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6YS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmEuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDphLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmEuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDphLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmEuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmEuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BNYXAiLGUoKSl9fSx7a2V5OiJNQVhfSU5WQUxJRF9QQVRIX09QUyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9fV0pLGV9KCk7dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9S30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM2KSxvPXIoMTQ2KSxzPXIoMTM1KSxjPXIoMTM5KTtmdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGwoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gZihlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1sO3ZhciBoPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1mKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxsPXUudmFsdWU7cmV0dXJuIGwmJiJvYmplY3QiPT1wKGwpJiZyLmNhbGwobCwiX19hd2FpdCIpP3QucmVzb2x2ZShsLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShsKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9ZihlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWYobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGwodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBsKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtsKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scChlKX1mdW5jdGlvbiBnKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1wKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXAoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHkoZSx0LHIpe3JldHVybiB0JiZ2KGUucHJvdG90eXBlLHQpLHImJnYoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBtPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sYj1NYXRoLnBvdygyLDI0KS0xLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtnKHRoaXMsZSksdGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPXR9cmV0dXJuIHkoZSxbe2tleToiYWRkQ29kZXNwYWNlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxyKSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfX0se2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZih0LWU+Yil0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109cisrfX0se2tleToibWFwQmZSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHQtZT5iKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgtMTtlPD10Oyl7dGhpcy5fbWFwW2UrK109cjt2YXIgYT1yLmNoYXJDb2RlQXQobikrMTtyPWE+MjU1P3Iuc3Vic3RyaW5nKDAsbi0xKStTdHJpbmcuZnJvbUNoYXJDb2RlKHIuY2hhckNvZGVBdChuLTEpKzEpKyJcMCI6ci5zdWJzdHJpbmcoMCxuKStTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYodC1lPmIpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IodmFyIG49ci5sZW5ndGgsYT0wO2U8PXQmJmE8bjspdGhpcy5fbWFwW2VdPXJbYSsrXSwrK2V9fSx7a2V5OiJtYXBPbmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWFwW2VdPXR9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXBbZV19fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcCxyPXQubGVuZ3RoO2lmKHI8PTY1NTM2KWZvcih2YXIgbj0wO248cjtuKyspdm9pZCAwIT09dFtuXSYmZShuLHRbbl0pO2Vsc2UgZm9yKHZhciBhIGluIHQpZShhLHRbYV0pfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgciBpbiB0KWlmKHRbcl09PT1lKXJldHVybiAwfHI7cmV0dXJuLTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcH19LHtrZXk6InJlYWRDaGFyQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7bj0objw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2Zvcih2YXIgcz1hW2ldLGM9MCx1PXMubGVuZ3RoO2M8dTspe3ZhciBsPXNbYysrXSxmPXNbYysrXTtpZihuPj1sJiZuPD1mKXJldHVybiByLmNoYXJjb2RlPW4sdm9pZChyLmxlbmd0aD1pKzEpfX1yLmNoYXJjb2RlPTAsci5sZW5ndGg9MX19LHtrZXk6ImdldENoYXJDb2RlTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXMscj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87KXt2YXIgcz1hW2krK10sYz1hW2krK107aWYoZT49cyYmZTw9YylyZXR1cm4gcisxfXJldHVybiAxfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9dzt2YXIgaz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1kKHQpO2lmKHIpe3ZhciBhPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgcjtyZXR1cm4gZyh0aGlzLGkpLChyPWEuY2FsbCh0aGlzKSkudmVydGljYWw9ZSxyLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSkscn1yZXR1cm4geShpLFt7a2V5OiJtYXBDaWRSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX19LHtrZXk6Im1hcEJmUmFuZ2VUb0FycmF5Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfX0se2tleToibWFwT25lIix2YWx1ZTpmdW5jdGlvbihlLHQpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9fSx7a2V5OiJsb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9fSx7a2V5OiJnZXRNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSg2NTUzNiksdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiA2NTUzNn19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fV0pLGl9KHcpO3QuSWRlbnRpdHlDTWFwPWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTAsbj0wO248PXQ7bisrKXI9cjw8OHxlW25dO3JldHVybiByPj4+MH1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gcihlLHQscil7Zm9yKHZhciBuPTAsYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MSxuPXQ7bj49MCYmcj4wO24tLSlyKz1lW25dLGVbbl09MjU1JnIscj4+PTh9dmFyIGk9MTYsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Zyh0aGlzLGUpLHRoaXMuYnVmZmVyPXQsdGhpcy5wb3M9MCx0aGlzLmVuZD10Lmxlbmd0aCx0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmV0dXJuIHkoZSxbe2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX19LHtrZXk6InJlYWROdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fX0se2tleToicmVhZFNpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfX0se2tleToicmVhZEhleCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKSx0aGlzLnBvcys9dCsxfX0se2tleToicmVhZEhleE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxjPTAsdT0wO3M+PTA7KXtmb3IoO3U8OCYmYS5sZW5ndGg+MDspY3w9YVstLWldPDx1LHUrPTc7ZVtzXT0yNTUmYyxzLS0sYz4+PTgsdS09OH19fSx7a2V5OiJyZWFkSGV4U2lnbmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2Zvcih2YXIgcj0xJmVbdF0/MjU1OjAsbj0wLGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9fSx7a2V5OiJyZWFkU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1dKSxlfSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7Zyh0aGlzLG4pfXZhciBzO3JldHVybiB5KG4sW3trZXk6InByb2Nlc3MiLHZhbHVlOihzPWYodSgpLm1hcmsoKGZ1bmN0aW9uIG4ocyxjLGwpe3ZhciBmLGgsZCxwLGcsdix5LG0sYix3LGssUyx4LE8sQSxDLEYsUCxULEksRTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmY9bmV3IG8ocyksaD1mLnJlYWRCeXRlKCksYy52ZXJ0aWNhbD0hISgxJmgpLGQ9bnVsbCxwPW5ldyBVaW50OEFycmF5KGkpLGc9bmV3IFVpbnQ4QXJyYXkoaSksdj1uZXcgVWludDhBcnJheShpKSx5PW5ldyBVaW50OEFycmF5KGkpLG09bmV3IFVpbnQ4QXJyYXkoaSk7Y2FzZSA5OmlmKCEoKHc9Zi5yZWFkQnl0ZSgpKT49MCkpe24ubmV4dD02ODticmVha31pZig3IT0oaz13Pj41KSl7bi5uZXh0PTIwO2JyZWFrfW4udDA9MzEmdyxuLm5leHQ9MD09PW4udDA/MTU6MT09PW4udDA/MTc6MTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZi5yZWFkU3RyaW5nKCksbi5hYnJ1cHQoImJyZWFrIiwxOSk7Y2FzZSAxNzpyZXR1cm4gZD1mLnJlYWRTdHJpbmcoKSxuLmFicnVwdCgiYnJlYWsiLDE5KTtjYXNlIDE5OnJldHVybiBuLmFicnVwdCgiY29udGludWUiLDkpO2Nhc2UgMjA6aWYoUz0hISgxNiZ3KSwhKDErKHg9MTUmdyk+aSkpe24ubmV4dD0yNDticmVha310aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjYXNlIDI0Ok89MSxBPWYucmVhZE51bWJlcigpLG4udDE9ayxuLm5leHQ9MD09PW4udDE/Mjk6MT09PW4udDE/MzU6Mj09PW4udDE/NDE6Mz09PW4udDE/NDY6ND09PW4udDE/NTM6NT09PW4udDE/NTg6NjU7YnJlYWs7Y2FzZSAyOTpmb3IoZi5yZWFkSGV4KHAseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksYy5hZGRDb2Rlc3BhY2VSYW5nZSh4KzEsZShwLHgpLGUoZyx4KSksQz0xO0M8QTtDKyspYShnLHgpLGYucmVhZEhleE51bWJlcihwLHgpLHIocCxnLHgpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGMuYWRkQ29kZXNwYWNlUmFuZ2UoeCsxLGUocCx4KSxlKGcseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDM1OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxmLnJlYWROdW1iZXIoKSxGPTE7RjxBO0YrKylhKGcseCksZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCksZi5yZWFkSGV4TnVtYmVyKGcseCkscihnLHAseCksZi5yZWFkTnVtYmVyKCk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNDE6Zm9yKGYucmVhZEhleCh2LHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBPbmUoZSh2LHgpLGIpLFA9MTtQPEE7UCsrKWEodix4KSxTfHwoZi5yZWFkSGV4TnVtYmVyKG0seCkscih2LG0seCkpLGI9Zi5yZWFkU2lnbmVkKCkrKGIrMSksYy5tYXBPbmUoZSh2LHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDQ2OmZvcihmLnJlYWRIZXgocCx4KSxmLnJlYWRIZXhOdW1iZXIoZyx4KSxyKGcscCx4KSxiPWYucmVhZE51bWJlcigpLGMubWFwQ2lkUmFuZ2UoZShwLHgpLGUoZyx4KSxiKSxUPTE7VDxBO1QrKylhKGcseCksUz9wLnNldChnKTooZi5yZWFkSGV4TnVtYmVyKHAseCkscihwLGcseCkpLGYucmVhZEhleE51bWJlcihnLHgpLHIoZyxwLHgpLGI9Zi5yZWFkTnVtYmVyKCksYy5tYXBDaWRSYW5nZShlKHAseCksZShnLHgpLGIpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDUzOmZvcihmLnJlYWRIZXgodixPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcE9uZShlKHYsTyksdCh5LHgpKSxJPTE7STxBO0krKylhKHYsTyksU3x8KGYucmVhZEhleE51bWJlcihtLE8pLHIodixtLE8pKSxhKHkseCksZi5yZWFkSGV4U2lnbmVkKG0seCkscih5LG0seCksYy5tYXBPbmUoZSh2LE8pLHQoeSx4KSk7cmV0dXJuIG4uYWJydXB0KCJicmVhayIsNjYpO2Nhc2UgNTg6Zm9yKGYucmVhZEhleChwLE8pLGYucmVhZEhleE51bWJlcihnLE8pLHIoZyxwLE8pLGYucmVhZEhleCh5LHgpLGMubWFwQmZSYW5nZShlKHAsTyksZShnLE8pLHQoeSx4KSksRT0xO0U8QTtFKyspYShnLE8pLFM/cC5zZXQoZyk6KGYucmVhZEhleE51bWJlcihwLE8pLHIocCxnLE8pKSxmLnJlYWRIZXhOdW1iZXIoZyxPKSxyKGcscCxPKSxmLnJlYWRIZXgoeSx4KSxjLm1hcEJmUmFuZ2UoZShwLE8pLGUoZyxPKSx0KHkseCkpO3JldHVybiBuLmFicnVwdCgiYnJlYWsiLDY2KTtjYXNlIDY1OnRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAiLmNvbmNhdChrKSk7Y2FzZSA2NjpuLm5leHQ9OTticmVhaztjYXNlIDY4OmlmKCFkKXtuLm5leHQ9NzA7YnJlYWt9cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGwoZCkpO2Nhc2UgNzA6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksZnVuY3Rpb24oZSx0LHIpe3JldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLG59KCk7cmV0dXJuIHN9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gbChyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZihpPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkoaSwiZW5kYmZjaGFyIikpcmV0dXJuO3QoaSk7dmFyIG89ZShpKTt0KGk9bi5nZXRPYmooKSk7dmFyIHM9aTtyLm1hcE9uZShvLHMpfX1mdW5jdGlvbiBoKHIsaSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKG89PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGM9ZShvKTtpZihvPWkuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihvKXx8InN0cmluZyI9PXR5cGVvZiBvKXt2YXIgdT1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxjLHUpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciBsPVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJm8hPT1hLkVPRjspbC5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsYyxsKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gZChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkY2hhciIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7cihvPWkuZ2V0T2JqKCkpO3ZhciBjPW87bi5tYXBPbmUocyxjKX19ZnVuY3Rpb24gcChuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZihvPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kY2lkcmFuZ2UiKSlyZXR1cm47dChvKTt2YXIgcz1lKG8pO3Qobz1pLmdldE9iaigpKTt2YXIgYz1lKG8pO3Iobz1pLmdldE9iaigpKTt2YXIgdT1vO24ubWFwQ2lkUmFuZ2UocyxjLHUpfX1mdW5jdGlvbiBnKHQscil7Zm9yKDs7KXt2YXIgaT1yLmdldE9iaigpO2lmKGk9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7dmFyIG89ZShpKTtpZigic3RyaW5nIiE9dHlwZW9mKGk9ci5nZXRPYmooKSkpYnJlYWs7dmFyIHM9ZShpKTt0LmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLG8scyl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHYoZSx0KXt2YXIgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24geShlLHQpe3ZhciByPXQuZ2V0T2JqKCk7ciBpbnN0YW5jZW9mIGEuTmFtZSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIGIoZSx0LHIsbil7cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHgoKXtyZXR1cm4oeD1mKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQscixpLG8pe3ZhciBjLGYsbTtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGUucHJldj0xLChtPXIuZ2V0T2JqKCkpIT09YS5FT0Ype2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDc6aWYoIShtIGluc3RhbmNlb2YgYS5OYW1lKSl7ZS5uZXh0PTEyO2JyZWFrfSJXTW9kZSI9PT1tLm5hbWU/dih0LHIpOiJDTWFwTmFtZSI9PT1tLm5hbWUmJnkodCxyKSxjPW0sZS5uZXh0PTI5O2JyZWFrO2Nhc2UgMTI6aWYoIShtIGluc3RhbmNlb2YgYS5DbWQpKXtlLm5leHQ9Mjk7YnJlYWt9ZS50MD1tLmNtZCxlLm5leHQ9ImVuZGNtYXAiPT09ZS50MD8xNjoidXNlY21hcCI9PT1lLnQwPzE3OiJiZWdpbmNvZGVzcGFjZXJhbmdlIj09PWUudDA/MTk6ImJlZ2luYmZjaGFyIj09PWUudDA/MjE6ImJlZ2luY2lkY2hhciI9PT1lLnQwPzIzOiJiZWdpbmJmcmFuZ2UiPT09ZS50MD8yNToiYmVnaW5jaWRyYW5nZSI9PT1lLnQwPzI3OjI5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMTc6cmV0dXJuIGMgaW5zdGFuY2VvZiBhLk5hbWUmJihmPWMubmFtZSksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAxOTpyZXR1cm4gZyh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjE6cmV0dXJuIGwodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDIzOnJldHVybiBkKHQsciksZS5hYnJ1cHQoImJyZWFrIiwyOSk7Y2FzZSAyNTpyZXR1cm4gaCh0LHIpLGUuYWJydXB0KCJicmVhayIsMjkpO2Nhc2UgMjc6cmV0dXJuIHAodCxyKSxlLmFicnVwdCgiYnJlYWsiLDI5KTtjYXNlIDI5OmUubmV4dD0zNzticmVhaztjYXNlIDMxOmlmKGUucHJldj0zMSxlLnQxPWUuY2F0Y2goMSksIShlLnQxIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpe2UubmV4dD0zNTticmVha310aHJvdyBlLnQxO2Nhc2UgMzU6cmV0dXJuKDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZS50MSksZS5hYnJ1cHQoImNvbnRpbnVlIiwwKTtjYXNlIDM3OmUubmV4dD0wO2JyZWFrO2Nhc2UgMzk6aWYoIW8mJmYmJihvPWYpLCFvKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLE8odCxpLG8pKTtjYXNlIDQyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDQzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMSwzMV1dKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKGUsdCxyKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWYodSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGk7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsQyhuLHIpO2Nhc2UgMjppZih0LnVzZUNNYXA9ZS5zZW50LDA9PT10Lm51bUNvZGVzcGFjZVJhbmdlcyl7Zm9yKGE9dC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxpPTA7aTxhLmxlbmd0aDtpKyspdC5jb2Rlc3BhY2VSYW5nZXNbaV09YVtpXS5zbGljZSgpO3QubnVtQ29kZXNwYWNlUmFuZ2VzPXQudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIHQudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuY29udGFpbnMoZSl8fHQubWFwT25lKGUsdC51c2VDTWFwLmxvb2t1cChlKSl9KSksZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQyhlLHQpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBGKCl7cmV0dXJuKEY9Zih1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBhLGkscyxsLGY7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigiSWRlbnRpdHktSCIhPT10KXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITEsMikpO2Nhc2UgNDppZigiSWRlbnRpdHktViIhPT10KXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IGsoITAsMikpO2Nhc2UgNjppZihtLmluY2x1ZGVzKHQpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK3QpO2Nhc2UgODppZihyKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKTtjYXNlIDEwOnJldHVybiBlLm5leHQ9MTIscih0KTtjYXNlIDEyOmlmKGE9ZS5zZW50LGk9YS5jTWFwRGF0YSxzPWEuY29tcHJlc3Npb25UeXBlLGw9bmV3IHcoITApLHMhPT1uLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuZXcgUykucHJvY2VzcyhpLGwsKGZ1bmN0aW9uKGUpe3JldHVybiBPKGwscixlKX0pKSk7Y2FzZSAxODppZihzIT09bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2UubmV4dD0yMTticmVha31yZXR1cm4gZj1uZXcgby5MZXhlcihuZXcgYy5TdHJlYW0oaSkpLGUuYWJydXB0KCJyZXR1cm4iLGIobCxmLHIsbnVsbCkpO2Nhc2UgMjE6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENNYXAgImNvbXByZXNzaW9uVHlwZSIgdmFsdWU6ICcuY29uY2F0KHMpKTtjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZih1KCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4scyxjO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1lLmVuY29kaW5nLG49ZS5mZXRjaEJ1aWx0SW5DTWFwLHM9ZS51c2VDTWFwLCEociBpbnN0YW5jZW9mIGEuTmFtZSkpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixDKHIubmFtZSxuKSk7Y2FzZSA3OmlmKCEociBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSkpe3QubmV4dD0xNDticmVha31yZXR1cm4gdC5uZXh0PTEwLGIobmV3IHcsbmV3IG8uTGV4ZXIociksbixzKTtjYXNlIDEwOmlmKCEoYz10LnNlbnQpLmlzSWRlbnRpdHlDTWFwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEMoYy5uYW1lLG4pKTtjYXNlIDEzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDE0OnRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIik7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSgpfX19KCk7dC5DTWFwRmFjdG9yeT14fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpLG89cigxNDcpLHM9cigxNDkpLGM9cigxNTApLHU9cigxNTIpLGw9cigxNTMpLGY9cigxNTYpLGg9cigxNTgpLGQ9cigxNjApLHA9cigxMzkpLGc9cigxNjEpLHY9cigxNjIpO2Z1bmN0aW9uIHkoZSl7cmV0dXJuIHk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHkoZSl9ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09eShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXkobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT15KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gdCYmYihlLnByb3RvdHlwZSx0KSxyJiZiKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5sZXhlcixuPXQueHJlZixhPXQuYWxsb3dTdHJlYW1zLGk9dm9pZCAwIT09YSYmYSxvPXQucmVjb3ZlcnlNb2RlLHM9dm9pZCAwIT09byYmbzttKHRoaXMsZSksdGhpcy5sZXhlcj1yLHRoaXMueHJlZj1uLHRoaXMuYWxsb3dTdHJlYW1zPWksdGhpcy5yZWNvdmVyeU1vZGU9cyx0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9pbWFnZUlkPTAsdGhpcy5yZWZpbGwoKX1yZXR1cm4gdyhlLFt7a2V5OiJyZWZpbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5idWYxPXRoaXMubGV4ZXIuZ2V0T2JqKCksdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJ1ZjIgaW5zdGFuY2VvZiBhLkNtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQ/KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPW51bGwpOih0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpKX19LHtrZXk6InRyeVNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgYS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHI7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9cmV0dXJuIHRoaXMuc2hpZnQoKSxyO2Nhc2UiPDwiOmZvcih2YXIgbz1uZXcgYS5EaWN0KHRoaXMueHJlZik7ISgwLGEuaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09YS5FT0Y7KWlmKHRoaXMuYnVmMSBpbnN0YW5jZW9mIGEuTmFtZSl7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfWVsc2UoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIG87dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShvLGUpOm86KHRoaXMuc2hpZnQoKSxvKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe3ZhciBjPWEuUmVmLmdldCh0LHRoaXMuYnVmMSk7cmV0dXJuIHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCksY31yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9fSx7a2V5OiJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbz10aGlzLmxleGVyLHM9ZS5wb3MsYz0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YyljPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YyljPTczPT09dD8yOjA7ZWxzZSBpZigzMj09PXR8fDEwPT09dHx8MTM9PT10KXtyPWUucG9zO2Zvcih2YXIgdT1lLnBlZWtCeXRlcygxMCksbD0wLGY9dS5sZW5ndGg7bDxmO2wrKylpZigoMCE9PSh0PXVbbF0pfHwwPT09dVtsKzFdKSYmMTAhPT10JiYxMyE9PXQmJih0PDMyfHx0PjEyNykpe2M9MDticmVha31pZigyIT09Yyljb250aW51ZTtpZihvLmtub3duQ29tbWFuZHMpe3ZhciBoPW8ucGVla09iaigpO2ggaW5zdGFuY2VvZiBhLkNtZCYmIW8ua25vd25Db21tYW5kc1toLmNtZF0mJihjPTApfWVsc2UoMCxuLndhcm4pKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7aWYoMj09PWMpYnJlYWt9ZWxzZSBjPTA7LTE9PT10JiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLHImJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLXIpKSkpO3ZhciBkPTQ7cmV0dXJuIGUuc2tpcCgtZCksdD1lLnBlZWtCeXRlKCksZS5za2lwKGQpLCgwLGkuaXNXaGl0ZVNwYWNlKSh0KXx8ZC0tLGUucG9zLWQtc319LHtrZXk6ImZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGE9ZS5wb3MsaT0hMTstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09dCl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OihyPWUuZ2V0VWludDE2KCkpPjI/ZS5za2lwKHItMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfXZhciBvPWUucG9zLWE7cmV0dXJuLTE9PT10PygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtbyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLG8pfX0se2tleToiZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT10KXt2YXIgYT1lLnBvcztmb3IodD1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyllLnNraXAoKSx0PWUucGVla0J5dGUoKTtpZig2Mj09PXQpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPmEpe3ZhciBvPWUucGVla0J5dGVzKDIpO2lmKDY5PT09b1swXSYmNzM9PT1vWzFdKWJyZWFrfX12YXIgcz1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1zKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscyl9fSx7a2V5OiJmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTt2YXIgYT1lLnBvcy1yO3JldHVybi0xPT09dD8oKDAsbi53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfX0se2tleToiaW5saW5lU3RyZWFtU2tpcEVJIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09cilyPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09cilyPTczPT09dD8yOjA7ZWxzZSBpZigyPT09cilicmVha319LHtrZXk6Im1ha2VJbmxpbmVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5sZXhlcixpPXIuc3RyZWFtLG89T2JqZWN0LmNyZWF0ZShudWxsKTshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dmFyIHM9dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLHRoaXMuYnVmMT09PWEuRU9GKWJyZWFrO29bc109dGhpcy5nZXRPYmooZSl9LTEhPT1yLmJlZ2luSW5saW5lSW1hZ2VQb3MmJih0PWkucG9zLXIuYmVnaW5JbmxpbmVJbWFnZVBvcyk7dmFyIGMsdT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvLkZ8fG8uRmlsdGVyKTtpZih1IGluc3RhbmNlb2YgYS5OYW1lKWM9dS5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGw9dGhpcy54cmVmLmZldGNoSWZSZWYodVswXSk7bCBpbnN0YW5jZW9mIGEuTmFtZSYmKGM9bC5uYW1lKX12YXIgZixoLGQ9aS5wb3M7c3dpdGNoKGMpe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zj10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zj10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpmPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zj10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGY8MWUzJiZ0PjApe3ZhciBwPWkucG9zO2kucG9zPXIuYmVnaW5JbmxpbmVJbWFnZVBvcyxoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLG49MDtuPHItMTspdC5wdXNoKGVbbisrXTw8OHxlW24rK10pO3JldHVybiBuPHImJnQucHVzaChlW25dKSxyKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXModCtmKSksaS5wb3M9cDt2YXIgZz10aGlzLmltYWdlQ2FjaGVbaF07aWYodm9pZCAwIT09ZylyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZy5yZXNldCgpLGd9dmFyIHY9bmV3IGEuRGljdCh0aGlzLnhyZWYpO2Zvcih2YXIgeSBpbiBvKXYuc2V0KHksb1t5XSk7dmFyIG09aS5tYWtlU3ViU3RyZWFtKGQsZix2KTtyZXR1cm4gZSYmKG09ZS5jcmVhdGVTdHJlYW0obSxmKSksKG09dGhpcy5maWx0ZXIobSx2LGYpKS5kaWN0PXYsdm9pZCAwIT09aCYmKG0uY2FjaGVLZXk9ImlubGluZV9pbWdfIi5jb25jYXQoKyt0aGlzLl9pbWFnZUlkKSx0aGlzLmltYWdlQ2FjaGVbaF09bSksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX19LHtrZXk6Il9maW5kU3RyZWFtTGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIuc3RyZWFtO3IucG9zPWU7Zm9yKHZhciBuPXQubGVuZ3RoO3IucG9zPHIuZW5kOyl7dmFyIGE9ci5wZWVrQnl0ZXMoMjA0OCksaT1hLmxlbmd0aC1uO2lmKGk8PTApYnJlYWs7Zm9yKHZhciBvPTA7bzxpOyl7Zm9yKHZhciBzPTA7czxuJiZhW28rc109PT10W3NdOylzKys7aWYocz49bilyZXR1cm4gci5wb3MrPW8sci5wb3MtZTtvKyt9ci5wb3MrPWl9cmV0dXJuLTF9fSx7a2V5OiJtYWtlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMubGV4ZXIsbz1yLnN0cmVhbTtyLnNraXBUb05leHRMaW5lKCk7dmFyIHM9by5wb3MtMSxjPWUuZ2V0KCJMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGMpfHwoKDAsbi5pbmZvKSgnQmFkIGxlbmd0aCAiJy5jb25jYXQoYyYmYy50b1N0cmluZygpLCciIGluIHN0cmVhbS4nKSksYz0wKSxvLnBvcz1zK2Msci5uZXh0Q2hhcigpLHRoaXMudHJ5U2hpZnQoKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXt2YXIgdT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChzLHUpO2lmKGw8MCl7Zm9yKHZhciBmPTE7Zjw9MTtmKyspe3ZhciBoPXUubGVuZ3RoLWYsZD11LnNsaWNlKDAsaCkscD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHMsZCk7aWYocD49MCl7dmFyIGc9by5wZWVrQnl0ZXMoaCsxKVtoXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGcpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGQpLCciIHdoZW4gJykrInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuIiksbD1wO2JyZWFrfX1pZihsPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz1sLHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCksbz1vLm1ha2VTdWJTdHJlYW0ocyxjLGUpLHQmJihvPXQuY3JlYXRlU3RyZWFtKG8sYykpLChvPXRoaXMuZmlsdGVyKG8sZSxjKSkuZGljdD1lLG99fSx7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10LmdldCgiRiIsIkZpbHRlciIpLG89dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KG8pJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixvKTt2YXIgcz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBjPWksdT1vLGw9MCxmPWMubGVuZ3RoO2w8ZjsrK2wpe2lmKCEoKGk9dGhpcy54cmVmLmZldGNoSWZSZWYoY1tsXSkpaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdCYWQgZmlsdGVyIG5hbWUgIicuY29uY2F0KGksJyInKSk7bz1udWxsLEFycmF5LmlzQXJyYXkodSkmJmwgaW4gdSYmKG89dGhpcy54cmVmLmZldGNoSWZSZWYodVtsXSkpLGU9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLHMsbykscz1udWxsfXJldHVybiBlfX0se2tleToibWFrZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcC5OdWxsU3RyZWFtO3ZhciB5PXRoaXMueHJlZi5zdGF0czt0cnl7c3dpdGNoKHQpe2Nhc2UiRmwiOmNhc2UiRmxhdGVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkZMQVRFKSxhP25ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgdS5GbGF0ZVN0cmVhbShlLHIpLHIsYSk6bmV3IHUuRmxhdGVTdHJlYW0oZSxyKTtjYXNlIkxaVyI6Y2FzZSJMWldEZWNvZGUiOnkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuTFpXKTt2YXIgbT0xO3JldHVybiBhPyhhLmhhcygiRWFybHlDaGFuZ2UiKSYmKG09YS5nZXQoIkVhcmx5Q2hhbmdlIikpLG5ldyBnLlByZWRpY3RvclN0cmVhbShuZXcgZC5MWldTdHJlYW0oZSxyLG0pLHIsYSkpOm5ldyBkLkxaV1N0cmVhbShlLHIsbSk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5EQ1QpLG5ldyBmLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIHkuYWRkU3RyZWFtVHlwZShuLlN0cmVhbVR5cGUuSlBYKSxuZXcgaC5KcHhTdHJlYW0oZSxyLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkE4NSksbmV3IG8uQXNjaWk4NVN0cmVhbShlLHIpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5BSFgpLG5ldyBzLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkNDRiksbmV3IGMuQ0NJVFRGYXhTdHJlYW0oZSxyLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4geS5hZGRTdHJlYW1UeXBlKG4uU3RyZWFtVHlwZS5STFgpLG5ldyB2LlJ1bkxlbmd0aFN0cmVhbShlLHIpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiB5LmFkZFN0cmVhbVR5cGUobi5TdHJlYW1UeXBlLkpCSUcpLG5ldyBsLkpiaWcyU3RyZWFtKGUscixhKX1yZXR1cm4oMCxuLndhcm4pKCdGaWx0ZXIgIicuY29uY2F0KHQsJyIgaXMgbm90IHN1cHBvcnRlZC4nKSksZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJy5jb25jYXQoZSwnIicpKSxuZXcgcC5OdWxsU3RyZWFtfX19XSksZX0oKTt0LlBhcnNlcj1rO3ZhciBTPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB4KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO20odGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXSx0aGlzLmtub3duQ29tbWFuZHM9cix0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTAsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXJldHVybiB3KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6InBlZWtDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxyPTAsYT0wO2lmKDQ1PT09ZT8oYT0tMSw0NT09PShlPXRoaXMubmV4dENoYXIoKSkmJihlPXRoaXMubmV4dENoYXIoKSkpOjQzPT09ZSYmKGE9MSxlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe3ZhciBvPSJJbnZhbGlkIG51bWJlcjogIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiIChjaGFyQ29kZSAiKS5jb25jYXQoZSwiKSIpO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXJldHVybigwLG4uaW5mbykoJ0xleGVyLmdldE51bWJlciAtICInLmNvbmNhdChvLCciLicpKSwwO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKG8pfWE9YXx8MTtmb3IodmFyIHM9ZS00OCxjPTAsdT0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7dmFyIGw9ZS00ODt0P2M9MTAqYytsOigwIT09ciYmKHIqPTEwKSxzPTEwKnMrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxuLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztpZig0Mz09PShlPXRoaXMucGVla0NoYXIoKSl8fDQ1PT09ZSl1PTQ1PT09ZT8tMToxLHRoaXMubmV4dENoYXIoKTtlbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH1yZXR1cm4gMCE9PXImJihzLz1yKSx0JiYocyo9TWF0aC5wb3coMTAsdSpjKSksYSpzfX0se2tleToiZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEsdD0hMSxyPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7Zm9yKHZhciBhPXRoaXMubmV4dENoYXIoKTs7KXt2YXIgaT0hMTtzd2l0Y2goMHxhKXtjYXNlLTE6KDAsbi53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSA0MDorK2Usci5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTowPT0tLWU/KHRoaXMubmV4dENoYXIoKSx0PSEwKTpyLnB1c2goIikiKTticmVhaztjYXNlIDkyOnN3aXRjaChhPXRoaXMubmV4dENoYXIoKSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OnZhciBvPTE1JmE7aT0hMCwoYT10aGlzLm5leHRDaGFyKCkpPj00OCYmYTw9NTUmJihvPShvPDwzKSsoMTUmYSksKGE9dGhpcy5uZXh0Q2hhcigpKT49NDgmJmE8PTU1JiYoaT0hMSxvPShvPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShvKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfX0se2tleToiZ2V0TmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVNbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksU1tlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha312YXIgaT14KGUpO2lmKC0xIT09aSl7dD1lO3ZhciBvPXgoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09byl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSAiKSsiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLiIpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSksU1tlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxvKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfX0se2tleToiX2hleFN0cmluZ1dhcm4iLHZhbHVlOmZ1bmN0aW9uKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9fSx7a2V5OiJnZXRIZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDt2YXIgdCxyLGE9dGhpcy5jdXJyZW50Q2hhcixpPSEwO2Zvcih0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Oyl7aWYoYTwwKXsoMCxuLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09YSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT1TW2FdKXtpZihpKXtpZigtMT09PSh0PXgoYSkpKXt0aGlzLl9oZXhTdHJpbmdXYXJuKGEpLGE9dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfX1lbHNle2lmKC0xPT09KHI9eChhKSkpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodDw8NHxyKSl9aT0haSxhPXRoaXMubmV4dENoYXIoKX1lbHNlIGE9dGhpcy5uZXh0Q2hhcigpfXJldHVybiBlLmpvaW4oIiIpfX0se2tleToiZ2V0T2JqIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1TW3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHQ9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PSh0PXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX12YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXt2YXIgaT10aGlzLnBlZWtDaGFyKCk7aWYoaT49MzImJmk8PTEyNylyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldChyKX1mb3IodmFyIG89dGhpcy5rbm93bkNvbW1hbmRzLHM9byYmdm9pZCAwIT09b1tyXTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhU1t0XTspe3ZhciBjPXIrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1vW2NdKWJyZWFrO2lmKDEyOD09PXIubGVuZ3RoKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb21tYW5kIHRva2VuIHRvbyBsb25nOiAiLmNvbmNhdChyLmxlbmd0aCkpO3I9YyxzPW8mJnZvaWQgMCE9PW9bcl19cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9fSx7a2V5OiJwZWVrT2JqIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5zdHJlYW0ucG9zLHI9dGhpcy5jdXJyZW50Q2hhcixhPXRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvczt0cnl7ZT10aGlzLmdldE9iaigpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgicGVla09iajogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLnN0cmVhbS5wb3M9dCx0aGlzLmN1cnJlbnRDaGFyPXIsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPWEsZX19LHtrZXk6InNraXBUb05leHRMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19XSksZX0oKTt0LkxleGVyPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpfXJldHVybiB3KGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIobikmJihyP24+PTA6bj4wKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJy5jb25jYXQodCwnIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJykrImRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX12YXIgcixuLGk9bmV3IGsoe2xleGVyOm5ldyBPKGUpLHhyZWY6bnVsbH0pLG89aS5nZXRPYmooKSxzPWkuZ2V0T2JqKCksYz1pLmdldE9iaigpLHU9aS5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIobykmJk51bWJlci5pc0ludGVnZXIocykmJigwLGEuaXNDbWQpKGMsIm9iaiIpJiZ1IGluc3RhbmNlb2YgYS5EaWN0JiYibnVtYmVyIj09dHlwZW9mKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCh1LCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6bixoaW50czpmdW5jdGlvbihlKXt2YXIgdCxyPWUuZ2V0KCJIIik7aWYoQXJyYXkuaXNBcnJheShyKSYmKDI9PT0odD1yLmxlbmd0aCl8fDQ9PT10KSl7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIGE9cltuXTtpZighKE51bWJlci5pc0ludGVnZXIoYSkmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChuLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0odSksb2JqZWN0TnVtYmVyRmlyc3Q6dCh1LCJPIiksZW5kRmlyc3Q6dCh1LCJFIiksbnVtUGFnZXM6dCh1LCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQodSwiVCIpLHBhZ2VGaXJzdDp1LmhhcygiUCIpP3QodSwiUCIsITApOjB9fX1dKSxlfSgpO3QuTGluZWFyaXphdGlvbj1BfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDEzNSk7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gcz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHMoZSx0KX1mdW5jdGlvbiBjKGUpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjKGUpfXZhciB1PWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KGYsZSk7dmFyIHQscixhLHUsbD0oYT1mLHU9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHUpe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGYoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxmKSx0JiYodCo9LjgpLChyPWwuY2FsbCh0aGlzLHQpKS5zdHI9ZSxyLmRpY3Q9ZS5kaWN0LHIuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSkscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xIT09dCYmMTI2IT09dCl7dmFyIHIsbixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDEyMj09PXQpe2ZvcihyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCksbj0wO248NDsrK24pclthK25dPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXt2YXIgbz10aGlzLmlucHV0O2ZvcihvWzBdPXQsbj0xO248NTsrK24pe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGkuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihvW25dPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKHI9dGhpcy5lbnN1cmVCdWZmZXIoYStuLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1uLTEsbjw1KXtmb3IoO248NTsrK24pb1tuXT0xMTc7dGhpcy5lb2Y9ITB9dmFyIHM9MDtmb3Iobj0wO248NTsrK24pcz04NSpzKyhvW25dLTMzKTtmb3Iobj0zO24+PTA7LS1uKXJbYStuXT0yNTUmcyxzPj49OH19ZWxzZSB0aGlzLmVvZj0hMH19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZn0oYS5EZWNvZGVTdHJlYW0pO3QuQXNjaWk4NVN0cmVhbT11fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09dC5EZWNvZGVTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTM5KTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9bmV3IFVpbnQ4QXJyYXkoMCkseT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO2lmKHUodGhpcyxyKSwobj10LmNhbGwodGhpcykpLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCxuLnBvcz0wLG4uYnVmZmVyTGVuZ3RoPTAsbi5lb2Y9ITEsbi5idWZmZXI9dixuLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO24ubWluQnVmZmVyTGVuZ3RoPGU7KW4ubWluQnVmZmVyTGVuZ3RoKj0yO3JldHVybiBufXJldHVybiBmKHIsW3trZXk6ImlzRW1wdHkiLGdldDpmdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtyPGU7KXIqPTI7dmFyIG49bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIG4uc2V0KHQpLHRoaXMuYnVmZmVyPW59fSx7a2V5OiJnZXRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfX0se2tleToiZ2V0Qnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKHIrZSksdD1yK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBuPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+biYmKHQ9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz10LHRoaXMuYnVmZmVyLnN1YmFycmF5KHIsdCl9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz0wfX0se2tleToibWFrZVN1YlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2UgZm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgaS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfX0se2tleToiZ2V0QmFzZVN0cmVhbXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19XSkscn0oYS5CYXNlU3RyZWFtKTt0LkRlY29kZVN0cmVhbT15O3ZhciBtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt1KHRoaXMscik7dmFyIGkscz0wLGM9byhlKTt0cnl7Zm9yKGMucygpOyEoaT1jLm4oKSkuZG9uZTspe3ZhciBsPWkudmFsdWU7cys9bCBpbnN0YW5jZW9mIHk/bC5fcmF3TWluQnVmZmVyTGVuZ3RoOmwubGVuZ3RofX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm4obj10LmNhbGwodGhpcyxzKSkuc3RyZWFtcz1lLG4uX29uRXJyb3I9YSxufXJldHVybiBmKHIsW3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdCxyPWUuc2hpZnQoKTt0cnl7dD1yLmdldEJ5dGVzKCl9Y2F0Y2goZSl7aWYodGhpcy5fb25FcnJvcilyZXR1cm4gdm9pZCB0aGlzLl9vbkVycm9yKGUsci5kaWN0JiZyLmRpY3Qub2JqSWQpO3Rocm93IGV9dmFyIG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9ZWxzZSB0aGlzLmVvZj0hMH19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj1bXSxuPW8odGhpcy5zdHJlYW1zKTt0cnl7Zm9yKG4ucygpOyEoZT1uLm4oKSkuZG9uZTspe3ZhciBhPWUudmFsdWUuZ2V0QmFzZVN0cmVhbXMoKTthJiZyLnB1c2guYXBwbHkocixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBjKGUpfSh0PWEpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KHQpfHxzKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfX1dKSxyfSh5KTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1tfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LG8oZSx0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxzKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgYz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShmLGUpO3ZhciB0LHIsYyx1LGw9KGM9Zix1PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9cyhjKTtpZih1KXt2YXIgcj1zKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBmKGUsdCl7dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZiksdCYmKHQqPS41KSwocj1sLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyLmZpcnN0RGlnaXQ9LTEscn1yZXR1cm4gdD1mLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7dmFyIHQscj1lLmxlbmd0aCsxPj4xLG49dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrciksaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZmlyc3REaWdpdCxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IG99fX19KGUpO3RyeXtmb3Iocy5zKCk7ISh0PXMubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZSx1PXZvaWQgMDtpZihjPj00OCYmYzw9NTcpdT0xNSZjO2Vsc2V7aWYoIShjPj02NSYmYzw9NzB8fGM+PTk3JiZjPD0xMDIpKXtpZig2Mj09PWMpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXU9OSsoMTUmYyl9bzwwP289dToobltpKytdPW88PDR8dSxvPS0xKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9bz49MCYmdGhpcy5lb2YmJihuW2krK109bzw8NCxvPS0xKSx0aGlzLmZpcnN0RGlnaXQ9byx0aGlzLmJ1ZmZlckxlbmd0aD1pfWVsc2UgdGhpcy5lb2Y9ITB9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGZ9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuQXNjaWlIZXhTdHJlYW09Y30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTUxKSxpPXIoMTQ4KSxvPXIoMTM0KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9dmFyIGw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oaCxlKTt2YXIgdCxyLGksbCxmPShpPWgsbD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PXUoaSk7aWYobCl7dmFyIHI9dSh0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLGUpfSk7ZnVuY3Rpb24gaChlLHQscil7dmFyIG47IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsaCksKG49Zi5jYWxsKHRoaXMsdCkpLnN0cj1lLG4uZGljdD1lLmRpY3QsciBpbnN0YW5jZW9mIG8uRGljdHx8KHI9by5EaWN0LmVtcHR5KTt2YXIgaT17bmV4dDpmdW5jdGlvbigpe3JldHVybiBlLmdldEJ5dGUoKX19O3JldHVybiBuLmNjaXR0RmF4RGVjb2Rlcj1uZXcgYS5DQ0lUVEZheERlY29kZXIoaSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSksbn1yZXR1cm4gdD1oLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDshdGhpcy5lb2Y7KXt2YXIgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpLHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxofShpLkRlY29kZVN0cmVhbSk7dC5DQ0lUVEZheFN0cmVhbT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGEoZSl9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBvPS0xLHM9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sYz1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHU9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzgsMjldLFs4LDI5XSxbOCwzMF0sWzgsMzBdLFs4LDQ1XSxbOCw0NV0sWzgsNDZdLFs4LDQ2XSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjNdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs4LDQ3XSxbOCw0N10sWzgsNDhdLFs4LDQ4XSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbOCwzM10sWzgsMzNdLFs4LDM0XSxbOCwzNF0sWzgsMzVdLFs4LDM1XSxbOCwzNl0sWzgsMzZdLFs4LDM3XSxbOCwzN10sWzgsMzhdLFs4LDM4XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzgsMzFdLFs4LDMxXSxbOCwzMl0sWzgsMzJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzgsNTNdLFs4LDUzXSxbOCw1NF0sWzgsNTRdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbOCwzOV0sWzgsMzldLFs4LDQwXSxbOCw0MF0sWzgsNDFdLFs4LDQxXSxbOCw0Ml0sWzgsNDJdLFs4LDQzXSxbOCw0M10sWzgsNDRdLFs4LDQ0XSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs4LDYxXSxbOCw2MV0sWzgsNjJdLFs4LDYyXSxbOCw2M10sWzgsNjNdLFs4LDBdLFs4LDBdLFs4LDMyMF0sWzgsMzIwXSxbOCwzODRdLFs4LDM4NF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNywyN10sWzcsMjddLFs3LDI3XSxbNywyN10sWzgsNTldLFs4LDU5XSxbOCw2MF0sWzgsNjBdLFs5LDE0NzJdLFs5LDE1MzZdLFs5LDE2MDBdLFs5LDE3MjhdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzgsNDldLFs4LDQ5XSxbOCw1MF0sWzgsNTBdLFs4LDUxXSxbOCw1MV0sWzgsNTJdLFs4LDUyXSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzgsNTVdLFs4LDU1XSxbOCw1Nl0sWzgsNTZdLFs4LDU3XSxbOCw1N10sWzgsNThdLFs4LDU4XSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzYsMTY2NF0sWzgsNDQ4XSxbOCw0NDhdLFs4LDUxMl0sWzgsNTEyXSxbOSw3MDRdLFs5LDc2OF0sWzgsNjQwXSxbOCw2NDBdLFs4LDU3Nl0sWzgsNTc2XSxbOSw4MzJdLFs5LDg5Nl0sWzksOTYwXSxbOSwxMDI0XSxbOSwxMDg4XSxbOSwxMTUyXSxbOSwxMjE2XSxbOSwxMjgwXSxbOSwxMzQ0XSxbOSwxNDA4XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs0LDNdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOF0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzUsOV0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDRdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN10sWzQsN11dLGw9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sZj1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxoPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs2LDldLFs2LDhdLFs1LDddLFs1LDddLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDVdLFs0LDVdLFs0LDVdLFs0LDVdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDNdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdLFsyLDJdXSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwhdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQubmV4dCl0aHJvdyBuZXcgRXJyb3IoJ0NDSVRURmF4RGVjb2RlciAtIGludmFsaWQgInNvdXJjZSIgcGFyYW1ldGVyLicpO3RoaXMuc291cmNlPXQsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1yLkt8fDAsdGhpcy5lb2xpbmU9ci5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPXIuRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPXIuQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9ci5Sb3dzfHwwO3ZhciBuLGE9ci5FbmRPZkJsb2NrO2ZvcihudWxsPT1hJiYoYT0hMCksdGhpcy5lb2Jsb2NrPWEsdGhpcy5ibGFjaz1yLkJsYWNrSXMxfHwhMSx0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKSx0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKSx0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zLHRoaXMuY29kaW5nUG9zPTAsdGhpcy5yb3c9MCx0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwLHRoaXMuaW5wdXRCaXRzPTAsdGhpcy5pbnB1dEJ1Zj0wLHRoaXMub3V0cHV0Qml0cz0wLHRoaXMucm93c0RvbmU9ITE7MD09PShuPXRoaXMuX2xvb2tCaXRzKDEyKSk7KXRoaXMuX2VhdEJpdHMoMSk7MT09PW4mJnRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJyZWFkTmV4dENoYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dmFyIGUsdCxyLGEsaSxzPXRoaXMucmVmTGluZSxjPXRoaXMuY29kaW5nTGluZSx1PXRoaXMuY29sdW1ucztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXtpZih0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApLHRoaXMuZW9mKXJldHVybi0xO3ZhciBsLGYsaDtpZih0aGlzLmVycj0hMSx0aGlzLm5leHRMaW5lMkQpe2ZvcihhPTA7Y1thXTx1OysrYSlzW2FdPWNbYV07Zm9yKHNbYSsrXT11LHNbYV09dSxjWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxlPTAsdD0wO2NbdGhpcy5jb2RpbmdQb3NdPHU7KXN3aXRjaChsPXRoaXMuX2dldFR3b0RpbUNvZGUoKSl7Y2FzZSAwOnRoaXMuX2FkZFBpeGVscyhzW2UrMV0sdCksc1tlKzFdPHUmJihlKz0yKTticmVhaztjYXNlIDE6aWYobD1mPTAsdCl7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZG97Zis9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCl9ZWxzZXtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tmKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KX1mb3IodGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2wsdCksY1t0aGlzLmNvZGluZ1Bvc108dSYmdGhpcy5fYWRkUGl4ZWxzKGNbdGhpcy5jb2RpbmdQb3NdK2YsMV50KTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgNzppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSszLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoKytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA1OmlmKHRoaXMuX2FkZFBpeGVscyhzW2VdKzIsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcigrK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDM6aWYodGhpcy5fYWRkUGl4ZWxzKHNbZV0rMSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgMjppZih0aGlzLl9hZGRQaXhlbHMoc1tlXSx0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKCsrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2UgODppZih0aGlzLl9hZGRQaXhlbHNOZWcoc1tlXS0zLHQpLHRePTEsY1t0aGlzLmNvZGluZ1Bvc108dSlmb3IoZT4wPy0tZTorK2U7c1tlXTw9Y1t0aGlzLmNvZGluZ1Bvc10mJnNbZV08dTspZSs9MjticmVhaztjYXNlIDY6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKHNbZV0tMix0KSx0Xj0xLGNbdGhpcy5jb2RpbmdQb3NdPHUpZm9yKGU+MD8tLWU6KytlO3NbZV08PWNbdGhpcy5jb2RpbmdQb3NdJiZzW2VdPHU7KWUrPTI7YnJlYWs7Y2FzZSA0OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhzW2VdLTEsdCksdF49MSxjW3RoaXMuY29kaW5nUG9zXTx1KWZvcihlPjA/LS1lOisrZTtzW2VdPD1jW3RoaXMuY29kaW5nUG9zXSYmc1tlXTx1OyllKz0yO2JyZWFrO2Nhc2Ugbzp0aGlzLl9hZGRQaXhlbHModSwwKSx0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OigwLG4uaW5mbykoImJhZCAyZCBjb2RlIiksdGhpcy5fYWRkUGl4ZWxzKHUsMCksdGhpcy5lcnI9ITB9fWVsc2UgZm9yKGNbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLHQ9MDtjW3RoaXMuY29kaW5nUG9zXTx1Oyl7aWYobD0wLHQpZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCk7ZWxzZSBkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KTt0aGlzLl9hZGRQaXhlbHMoY1t0aGlzLmNvZGluZ1Bvc10rbCx0KSx0Xj0xfXZhciBkPSExO2lmKHRoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KSx0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe2lmKGw9dGhpcy5fbG9va0JpdHMoMTIpLHRoaXMuZW9saW5lKWZvcig7bCE9PW8mJjEhPT1sOyl0aGlzLl9lYXRCaXRzKDEpLGw9dGhpcy5fbG9va0JpdHMoMTIpO2Vsc2UgZm9yKDswPT09bDspdGhpcy5fZWF0Qml0cygxKSxsPXRoaXMuX2xvb2tCaXRzKDEyKTsxPT09bD8odGhpcy5fZWF0Qml0cygxMiksZD0hMCk6bD09PW8mJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZkJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShsPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0obD10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrbCksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKChsPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiB0aGlzLmVvZj0hMCwtMTtpZihsPj4xPT0xKWJyZWFrO3RoaXMuX2VhdEJpdHMoMSl9dGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fZWF0Qml0cygxKSx0aGlzLm5leHRMaW5lMkQ9ISgxJmwpKX1jWzBdPjA/dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpaT0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZjW3RoaXMuY29kaW5nUG9zXTx1JiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9Y1t0aGlzLmNvZGluZ1Bvc10tY1t0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtyPTgsaT0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLGNbdGhpcy5jb2RpbmdQb3NdPHU/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPWNbdGhpcy5jb2RpbmdQb3NdLWNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfX0se2tleToiX2FkZFBpeGVscyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmNvZGluZ0xpbmUsYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9fSx7a2V5OiJfYWRkUGl4ZWxzTmVnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29kaW5nTGluZSxhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX19LHtrZXk6Il9maW5kVGFibGVDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBzPXRoaXMuX2xvb2tCaXRzKGkpO2lmKHM9PT1vKXJldHVyblshMCwxLCExXTtpZihpPHQmJihzPDw9dC1pKSwhYXx8cz49YSl7dmFyIGM9cltzLWFdO2lmKGNbMF09PT1pKXJldHVybiB0aGlzLl9lYXRCaXRzKGkpLFshMCxjWzFdLCEwXX19cmV0dXJuWyExLDAsITFdfX0se2tleToiX2dldFR3b0RpbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7aWYodD10aGlzLl9sb29rQml0cyg3KSwoZT1zW3RdKSYmZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxzKTtpZihyWzBdJiZyWzJdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoIkJhZCB0d28gZGltIGNvZGUiKSxvfX0se2tleToiX2dldFdoaXRlQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXtpZigodD10aGlzLl9sb29rQml0cygxMikpPT09bylyZXR1cm4gMTtpZigoZT10Pj41PT0wP2NbdF06dVt0Pj4zXSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyhlWzBdKSxlWzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDksdSk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLGMpKVswXSlyZXR1cm4gclsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgd2hpdGUgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX19LHtrZXk6Il9nZXRCbGFja0NvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKChlPXRoaXMuX2xvb2tCaXRzKDEzKSk9PT1vKXJldHVybiAxO2lmKCh0PWU+Pjc9PTA/bFtlXTplPj45PT0wJiZlPj43IT0wP2ZbKGU+PjEpLTY0XTpoW2U+PjddKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKHRbMF0pLHRbMV19ZWxzZXt2YXIgcj10aGlzLl9maW5kVGFibGVDb2RlKDIsNixoKTtpZihyWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixmLDY0KSlbMF0pcmV0dXJuIHJbMV07aWYoKHI9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxsKSlbMF0pcmV0dXJuIHJbMV19cmV0dXJuKDAsbi5pbmZvKSgiYmFkIGJsYWNrIGNvZGUiKSx0aGlzLl9lYXRCaXRzKDEpLDF9fSx7a2V5OiJfbG9va0JpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bzp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfX0se2tleToiX2VhdEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0NJVFRGYXhEZWNvZGVyPWR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZsYXRlU3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX12YXIgdT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGw9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksZj1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGg9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGQ9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XSxwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9KHYsZSk7dmFyIHQscixhLHAsZz0oYT12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1jKGEpO2lmKHApe3ZhciByPWModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoZSx0KXt2YXIgcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwocj1nLmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdDt2YXIgbj1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09bnx8LTE9PT1hKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtpZig4IT0oMTUmbikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQobiwiLCAiKS5jb25jYXQoYSkpO2lmKCgobjw8OCkrYSklMzEhPTApdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChuLCIsICIpLmNvbmNhdChhKSk7aWYoMzImYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KG4sIiwgIikuY29uY2F0KGEpKTtyZXR1cm4gci5jb2RlU2l6ZT0wLHIuY29kZUJ1Zj0wLHJ9cmV0dXJuIHQ9diwocj1be2tleToiZ2V0Qml0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5zdHIsbj10aGlzLmNvZGVTaXplLGE9dGhpcy5jb2RlQnVmO248ZTspe2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7YXw9dDw8bixuKz04fXJldHVybiB0PWEmKDE8PGUpLTEsdGhpcy5jb2RlQnVmPWE+PmUsdGhpcy5jb2RlU2l6ZT1uLT1lLHR9fSx7a2V5OiJnZXRDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLnN0cixuPWVbMF0sYT1lWzFdLG89dGhpcy5jb2RlU2l6ZSxzPXRoaXMuY29kZUJ1ZjtvPGEmJi0xIT09KHQ9ci5nZXRCeXRlKCkpOylzfD10PDxvLG8rPTg7dmFyIGM9bltzJigxPDxhKS0xXSx1PWM+PjE2LGw9NjU1MzUmYztpZih1PDF8fG88dSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybiB0aGlzLmNvZGVCdWY9cz4+dSx0aGlzLmNvZGVTaXplPW8tdSxsfX0se2tleToiZ2VuZXJhdGVIdWZmbWFuVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxjPTI7bzw9bjsrK28sczw8PTEsYzw8PTEpZm9yKHZhciB1PTA7dTxyOysrdSlpZihlW3VdPT09byl7dmFyIGw9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KWw9bDw8MXwxJmYsZj4+PTE7Zm9yKHQ9bDt0PGE7dCs9YylpW3RdPW88PDE2fHU7KytzfXJldHVybltpLG5dfX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnN0cixuPXRoaXMuZ2V0Qml0cygzKTtpZigxJm4mJih0aGlzLmVvZj0hMCksMCE9KG4+Pj0xKSl7dmFyIGEsbztpZigxPT09bilhPWgsbz1kO2Vsc2V7aWYoMiE9PW4pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgcyxjPXRoaXMuZ2V0Qml0cyg1KSsyNTcscD10aGlzLmdldEJpdHMoNSkrMSxnPXRoaXMuZ2V0Qml0cyg0KSs0LHY9bmV3IFVpbnQ4QXJyYXkodS5sZW5ndGgpO2ZvcihzPTA7czxnOysrcyl2W3Vbc11dPXRoaXMuZ2V0Qml0cygzKTt2YXIgeT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHYpO3Q9MCxzPTA7Zm9yKHZhciBtLGIsdyxrPWMrcCxTPW5ldyBVaW50OEFycmF5KGspO3M8azspe3ZhciB4PXRoaXMuZ2V0Q29kZSh5KTtpZigxNj09PXgpbT0yLGI9Myx3PXQ7ZWxzZSBpZigxNz09PXgpbT0zLGI9Myx3PXQ9MDtlbHNle2lmKDE4IT09eCl7U1tzKytdPXQ9eDtjb250aW51ZX1tPTcsYj0xMSx3PXQ9MH1mb3IodmFyIE89dGhpcy5nZXRCaXRzKG0pK2I7Ty0tID4wOylTW3MrK109d31hPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheSgwLGMpKSxvPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoUy5zdWJhcnJheShjLGspKX1mb3IodmFyIEE9KGU9dGhpcy5idWZmZXIpP2UubGVuZ3RoOjAsQz10aGlzLmJ1ZmZlckxlbmd0aDs7KXt2YXIgRj10aGlzLmdldENvZGUoYSk7aWYoRjwyNTYpQysxPj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDKzEpKS5sZW5ndGgpLGVbQysrXT1GO2Vsc2V7aWYoMjU2PT09RilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1DKTt2YXIgUD0oRj1sW0YtPTI1N10pPj4xNjtQPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSksdD0oNjU1MzUmRikrUCxGPXRoaXMuZ2V0Q29kZShvKSwoUD0oRj1mW0ZdKT4+MTYpPjAmJihQPXRoaXMuZ2V0Qml0cyhQKSk7dmFyIFQ9KDY1NTM1JkYpK1A7Qyt0Pj1BJiYoQT0oZT10aGlzLmVuc3VyZUJ1ZmZlcihDK3QpKS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8dDsrK0ksKytDKWVbQ109ZVtDLVRdfX19ZWxzZXt2YXIgRTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTt2YXIgaj1FO2lmKC0xPT09KEU9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKGp8PUU8PDgsLTE9PT0oRT1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIE09RTtpZigtMT09PShFPXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZigoTXw9RTw8OCkhPSg2NTUzNSZ+aikmJigwIT09anx8MCE9PU0pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MCx0aGlzLmNvZGVTaXplPTA7dmFyIF89dGhpcy5idWZmZXJMZW5ndGgsTD1fK2o7aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihMKSx0aGlzLmJ1ZmZlckxlbmd0aD1MLDA9PT1qKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7dmFyIFI9ci5nZXRCeXRlcyhqKTtlLnNldChSLF8pLFIubGVuZ3RoPGomJih0aGlzLmVvZj0hMCl9fX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdn0oYS5EZWNvZGVTdHJlYW0pO3QuRmxhdGVTdHJlYW09cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTM2KSxpPXIoMTQ4KSxvPXIoMTM0KSxzPXIoMTU0KSxjPXIoMik7ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxmKGUpfXZhciBoPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9KHAsZSk7dmFyIHQscixpLGgsZD0oaT1wLGg9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1mKGkpO2lmKGgpe3ZhciByPWYodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHAoZSx0LHIpe3ZhciBuO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHApLChuPWQuY2FsbCh0aGlzLHQpKS5zdHJlYW09ZSxuLmRpY3Q9ZS5kaWN0LG4ubWF5YmVMZW5ndGg9dCxuLnBhcmFtcz1yLG59cmV0dXJuIHQ9cCwocj1be2tleToiYnl0ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLGMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfX0se2tleToiZW5zdXJlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgcy5KYmlnMkltYWdlLHQ9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBvLkRpY3Qpe3ZhciByPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYociBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSl7dmFyIG49ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTpuLHN0YXJ0OjAsZW5kOm4ubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBpPWUucGFyc2VDaHVua3ModCksYz1pLmxlbmd0aCx1PTA7dTxjO3UrKylpW3VdXj0yNTU7dGhpcy5idWZmZXI9aSx0aGlzLmJ1ZmZlckxlbmd0aD1jLHRoaXMuZW9mPSEwfX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscH0oaS5EZWNvZGVTdHJlYW0pO3QuSmJpZzJTdHJlYW09aH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTU1KSxzPXIoMTUxKTtmdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBmKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB1KGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1sKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBsKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZyhlLHQpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHYoZSl9dmFyIHk9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmcoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9dih0KTtpZihyKXt2YXIgaT12KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBwKHRoaXMsaSksYS5jYWxsKHRoaXMsIkpCSUcyIGVycm9yOiAiLmNvbmNhdChlKSwiSmJpZzJFcnJvciIpfXJldHVybiBkKGkpfShhLkJhc2VFeGNlcHRpb24pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImdldENvbnRleHRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7cCh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXJldHVybiBkKGUsW3trZXk6ImRlY29kZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBvLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9fSx7a2V5OiJjb250ZXh0Q2FjaGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBtO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1dKSxlfSgpO2Z1bmN0aW9uIHcoZSx0LHIpe3ZhciBuPWUuZ2V0Q29udGV4dHModCksYT0xO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTAsaT0wO2k8ZTtpKyspe3ZhciBvPXIucmVhZEJpdChuLGEpO2E9YTwyNTY/YTw8MXxvOjUxMSYoYTw8MXxvKXwyNTYsdD10PDwxfG99cmV0dXJuIHQ+Pj4wfXZhciBvPWkoMSkscz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO3JldHVybiAwPT09bz9zOnM+MD8tczpudWxsfWZ1bmN0aW9uIGsoZSx0LHIpe2Zvcih2YXIgbj1lLmdldENvbnRleHRzKCJJQUlEIiksYT0xLGk9MDtpPHI7aSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX12YXIgUz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLHg9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLE89W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBPVszOTcxNywxOTQxLDIyOSw0MDVdLEM9WzMyLDhdO2Z1bmN0aW9uIEYoZSx0LHIsbixhLGksbyxzKXtpZihlKXJldHVybiBHKG5ldyBYKHMuZGF0YSxzLnN0YXJ0LHMuZW5kKSx0LHIsITEpO2lmKDA9PT1uJiYhaSYmIWEmJjQ9PT1vLmxlbmd0aCYmMz09PW9bMF0ueCYmLTE9PT1vWzBdLnkmJi0zPT09b1sxXS54JiYtMT09PW9bMV0ueSYmMj09PW9bMl0ueCYmLTI9PT1vWzJdLnkmJi0yPT09b1szXS54JiYtMj09PW9bM10ueSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsYyx1LGw9ci5kZWNvZGVyLGY9ci5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIiksaD1bXTtmb3IoYT0wO2E8dDthKyspZm9yKHM9aFthXT1uZXcgVWludDhBcnJheShlKSxjPWE8MT9zOmhbYS0xXSxuPSh1PWE8Mj9zOmhbYS0yXSlbMF08PDEzfHVbMV08PDEyfHVbMl08PDExfGNbMF08PDd8Y1sxXTw8NnxjWzJdPDw1fGNbM108PDQsaT0wO2k8ZTtpKyspc1tpXT1vPWwucmVhZEJpdChmLG4pLG49KDMxNzM1Jm4pPDwxfChpKzM8ZT91W2krM108PDExOjApfChpKzQ8ZT9jW2krNF08PDQ6MCl8bztyZXR1cm4gaH0odCxyLHMpO3ZhciBjPSEhaSx1PXhbbl0uY29uY2F0KG8pO3Uuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTt2YXIgbCxmLGg9dS5sZW5ndGgsZD1uZXcgSW50OEFycmF5KGgpLHA9bmV3IEludDhBcnJheShoKSxnPVtdLHY9MCx5PTAsbT0wLGI9MDtmb3IoZj0wO2Y8aDtmKyspZFtmXT11W2ZdLngscFtmXT11W2ZdLnkseT1NYXRoLm1pbih5LHVbZl0ueCksbT1NYXRoLm1heChtLHVbZl0ueCksYj1NYXRoLm1pbihiLHVbZl0ueSksZjxoLTEmJnVbZl0ueT09PXVbZisxXS55JiZ1W2ZdLng9PT11W2YrMV0ueC0xP3Z8PTE8PGgtMS1mOmcucHVzaChmKTt2YXIgdz1nLmxlbmd0aCxrPW5ldyBJbnQ4QXJyYXkodyksUz1uZXcgSW50OEFycmF5KHcpLE89bmV3IFVpbnQxNkFycmF5KHcpO2ZvcihsPTA7bDx3O2wrKylmPWdbbF0sa1tsXT11W2ZdLngsU1tsXT11W2ZdLnksT1tsXT0xPDxoLTEtZjtmb3IodmFyIEMsRixQLFQsSSxFPS15LGo9LWIsTT10LW0sXz1BW25dLEw9bmV3IFVpbnQ4QXJyYXkodCksUj1bXSxOPXMuZGVjb2RlcixEPXMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLEI9MCxVPTAsJD0wOyQ8cjskKyspaWYoYSYmKEJePU4ucmVhZEJpdChELF8pKSlSLnB1c2goTCk7ZWxzZSBmb3IoTD1uZXcgVWludDhBcnJheShMKSxSLnB1c2goTCksQz0wO0M8dDtDKyspaWYoYyYmaVskXVtDXSlMW0NdPTA7ZWxzZXtpZihDPj1FJiZDPE0mJiQ+PWopZm9yKFU9VTw8MSZ2LGY9MDtmPHc7ZisrKUY9JCtTW2ZdLFA9QytrW2ZdLChUPVJbRl1bUF0pJiYoVXw9VD1PW2ZdKTtlbHNlIGZvcihVPTAsST1oLTEsZj0wO2Y8aDtmKyssSS0tKShQPUMrZFtmXSk+PTAmJlA8dCYmKEY9JCtwW2ZdKT49MCYmKFQ9UltGXVtQXSkmJihVfD1UPDxJKTt2YXIgSD1OLnJlYWRCaXQoRCxVKTtMW0NdPUh9cmV0dXJuIFJ9ZnVuY3Rpb24gUChlLHQscixuLGEsaSxvLHMsYyl7dmFyIHU9T1tyXS5jb2Rpbmc7MD09PXImJih1PXUuY29uY2F0KFtzWzBdXSkpO3ZhciBsLGY9dS5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShmKSxkPW5ldyBJbnQzMkFycmF5KGYpO2ZvcihsPTA7bDxmO2wrKyloW2xdPXVbbF0ueCxkW2xdPXVbbF0ueTt2YXIgcD1PW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW3NbMV1dKSk7dmFyIGc9cC5sZW5ndGgsdj1uZXcgSW50MzJBcnJheShnKSxtPW5ldyBJbnQzMkFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKyl2W2xdPXBbbF0ueCxtW2xdPXBbbF0ueTtmb3IodmFyIGI9blswXS5sZW5ndGgsdz1uLmxlbmd0aCxrPUNbcl0sUz1bXSx4PWMuZGVjb2RlcixBPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpLEY9MCxQPTA7UDx0O1ArKyl7aWYobyYmKEZePXgucmVhZEJpdChBLGspKSl0aHJvdyBuZXcgeSgicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZSk7Uy5wdXNoKFQpO2Zvcih2YXIgST0wO0k8ZTtJKyspe3ZhciBFPXZvaWQgMCxqPXZvaWQgMCxNPTA7Zm9yKGw9MDtsPGY7bCsrKUU9UCtkW2xdLGo9SStoW2xdLEU8MHx8ajwwfHxqPj1lP008PD0xOk09TTw8MXxTW0VdW2pdO2ZvcihsPTA7bDxnO2wrKylFPVArbVtsXS1pLGo9SSt2W2xdLWEsRTwwfHxFPj13fHxqPDB8fGo+PWI/TTw8PTE6TT1NPDwxfG5bRV1bal07dmFyIF89eC5yZWFkQml0KEEsTSk7VFtJXT1ffX1yZXR1cm4gU31mdW5jdGlvbiBUKGUsdCxyLG4sYSxpLG8scyxjLHUsbCxmLGgsZCxwLGcsdixtLGIpe2lmKGUmJnQpdGhyb3cgbmV3IHkoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTt2YXIgUyx4LE89W107Zm9yKFM9MDtTPG47UysrKXtpZih4PW5ldyBVaW50OEFycmF5KHIpLGEpZm9yKHZhciBBPTA7QTxyO0ErKyl4W0FdPWE7Ty5wdXNoKHgpfXZhciBDPXYuZGVjb2RlcixGPXYuY29udGV4dENhY2hlLFQ9ZT8tZC50YWJsZURlbHRhVC5kZWNvZGUoYik6LXcoRiwiSUFEVCIsQyksST0wO2ZvcihTPTA7UzxpOyl7VCs9ZT9kLnRhYmxlRGVsdGFULmRlY29kZShiKTp3KEYsIklBRFQiLEMpO2Zvcih2YXIgRT1JKz1lP2QudGFibGVGaXJzdFMuZGVjb2RlKGIpOncoRiwiSUFGUyIsQyk7Oyl7dmFyIGo9MDtvPjEmJihqPWU/Yi5yZWFkQml0cyhtKTp3KEYsIklBSVQiLEMpKTt2YXIgTT1vKlQraixfPWU/ZC5zeW1ib2xJRFRhYmxlLmRlY29kZShiKTprKEYsQyxjKSxMPXQmJihlP2IucmVhZEJpdCgpOncoRiwiSUFSSSIsQykpLFI9c1tfXSxOPVJbMF0ubGVuZ3RoLEQ9Ui5sZW5ndGg7aWYoTCl7dmFyIEI9dyhGLCJJQVJEVyIsQyksVT13KEYsIklBUkRIIixDKTtSPVAoTis9QixEKz1VLHAsUiwoQj4+MSkrdyhGLCJJQVJEWCIsQyksKFU+PjEpK3coRiwiSUFSRFkiLEMpLCExLGcsdil9dmFyICQ9TS0oMSZmPzA6RC0xKSxYPUUtKDImZj9OLTE6MCksSD12b2lkIDAscT12b2lkIDAsRz12b2lkIDA7aWYodSl7Zm9yKEg9MDtIPEQ7SCsrKWlmKHg9T1tYK0hdKXtHPVJbSF07dmFyIHo9TWF0aC5taW4oci0kLE4pO3N3aXRjaChoKXtjYXNlIDA6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXXw9R1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPHo7cSsrKXhbJCtxXV49R1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJvcGVyYXRvciAiLmNvbmNhdChoLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19RSs9RC0xfWVsc2V7Zm9yKHE9MDtxPEQ7cSsrKWlmKHg9T1skK3FdKXN3aXRjaChHPVJbcV0saCl7Y2FzZSAwOmZvcihIPTA7SDxOO0grKyl4W1grSF18PUdbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxOO0grKyl4W1grSF1ePUdbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQoaCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9RSs9Ti0xfVMrKzt2YXIgVz1lP2QudGFibGVEZWx0YVMuZGVjb2RlKGIpOncoRiwiSUFEUyIsQyk7aWYobnVsbD09PVcpYnJlYWs7RSs9VytsfX1yZXR1cm4gT31mdW5jdGlvbiBJKGUsdCl7dmFyIHI9e307ci5udW1iZXI9KDAsaS5yZWFkVWludDMyKShlLHQpO3ZhciBuPWVbdCs0XSxhPTYzJm47aWYoIVNbYV0pdGhyb3cgbmV3IHkoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK2EpO3IudHlwZT1hLHIudHlwZU5hbWU9U1thXSxyLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZuKTt2YXIgbz0hISg2NCZuKSxzPWVbdCs1XSxjPXM+PjUmNyx1PVszMSZzXSxsPXQrNjtpZig3PT09cyl7Yz01MzY4NzA5MTEmKDAsaS5yZWFkVWludDMyKShlLGwtMSksbCs9Mzt2YXIgZj1jKzc+PjM7Zm9yKHVbMF09ZVtsKytdOy0tZj4wOyl1LnB1c2goZVtsKytdKX1lbHNlIGlmKDU9PT1zfHw2PT09cyl0aHJvdyBuZXcgeSgiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz11O3ZhciBoPTQ7ci5udW1iZXI8PTI1Nj9oPTE6ci5udW1iZXI8PTY1NTM2JiYoaD0yKTt2YXIgZCxwLGc9W107Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgdjt2PTE9PT1oP2VbbF06Mj09PWg/KDAsaS5yZWFkVWludDE2KShlLGwpOigwLGkucmVhZFVpbnQzMikoZSxsKSxnLnB1c2godiksbCs9aH1pZihyLnJlZmVycmVkVG89ZyxvPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxpLnJlYWRVaW50MzIpKGUsbCksbCs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVtsKytdLHIubGVuZ3RoPSgwLGkucmVhZFVpbnQzMikoZSxsKSxsKz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1hKXRocm93IG5ldyB5KCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt2YXIgbT1qKGUsbCksYj0hISgxJmVbbCtNXSksdz1uZXcgVWludDhBcnJheSg2KTtmb3IoYnx8KHdbMF09MjU1LHdbMV09MTcyKSx3WzJdPW0uaGVpZ2h0Pj4+MjQmMjU1LHdbM109bS5oZWlnaHQ+PjE2JjI1NSx3WzRdPW0uaGVpZ2h0Pj44JjI1NSx3WzVdPTI1NSZtLmhlaWdodCxkPWwscD1lLmxlbmd0aDtkPHA7ZCsrKXtmb3IodmFyIGs9MDtrPDYmJndba109PT1lW2Qra107KWsrKztpZig2PT09ayl7ci5sZW5ndGg9ZCs2O2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpdGhyb3cgbmV3IHkoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX1yZXR1cm4gci5oZWFkZXJFbmQ9bCxyfWZ1bmN0aW9uIEUoZSx0LHIsbil7Zm9yKHZhciBhPVtdLGk9cjtpPG47KXt2YXIgbz1JKHQsaSk7aT1vLmhlYWRlckVuZDt2YXIgcz17aGVhZGVyOm8sZGF0YTp0fTtpZihlLnJhbmRvbUFjY2Vzc3x8KHMuc3RhcnQ9aSxpKz1vLmxlbmd0aCxzLmVuZD1pKSxhLnB1c2gocyksNTE9PT1vLnR5cGUpYnJlYWt9aWYoZS5yYW5kb21BY2Nlc3MpZm9yKHZhciBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKWFbY10uc3RhcnQ9aSxpKz1hW2NdLmhlYWRlci5sZW5ndGgsYVtjXS5lbmQ9aTtyZXR1cm4gYX1mdW5jdGlvbiBqKGUsdCl7cmV0dXJue3dpZHRoOigwLGkucmVhZFVpbnQzMikoZSx0KSxoZWlnaHQ6KDAsaS5yZWFkVWludDMyKShlLHQrNCkseDooMCxpLnJlYWRVaW50MzIpKGUsdCs4KSx5OigwLGkucmVhZFVpbnQzMikoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19dmFyIE09MTc7ZnVuY3Rpb24gXyhlLHQpe3ZhciByLG4sYSxvLHM9ZS5oZWFkZXIsYz1lLmRhdGEsdT1lLmVuZCxsPWUuc3RhcnQ7c3dpdGNoKHMudHlwZSl7Y2FzZSAwOnZhciBmPXt9LGg9KDAsaS5yZWFkVWludDE2KShjLGwpO2lmKGYuaHVmZm1hbj0hISgxJmgpLGYucmVmaW5lbWVudD0hISgyJmgpLGYuaHVmZm1hbkRIU2VsZWN0b3I9aD4+MiYzLGYuaHVmZm1hbkRXU2VsZWN0b3I9aD4+NCYzLGYuYml0bWFwU2l6ZVNlbGVjdG9yPWg+PjYmMSxmLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9aD4+NyYxLGYuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JmgpLGYuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZoKSxmLnRlbXBsYXRlPWg+PjEwJjMsZi5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTImMSxsKz0yLCFmLmh1ZmZtYW4pe2ZvcihvPTA9PT1mLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLmF0PW59aWYoZi5yZWZpbmVtZW50JiYhZi5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihuPVtdLGE9MDthPDI7YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtmLnJlZmluZW1lbnRBdD1ufWYubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsZi5udW1iZXJPZk5ld1N5bWJvbHM9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bZixzLm51bWJlcixzLnJlZmVycmVkVG8sYyxsLHVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dmFyIGQ9e307ZC5pbmZvPWooYyxsKSxsKz1NO3ZhciBwPSgwLGkucmVhZFVpbnQxNikoYyxsKTtpZihsKz0yLGQuaHVmZm1hbj0hISgxJnApLGQucmVmaW5lbWVudD0hISgyJnApLGQubG9nU3RyaXBTaXplPXA+PjImMyxkLnN0cmlwU2l6ZT0xPDxkLmxvZ1N0cmlwU2l6ZSxkLnJlZmVyZW5jZUNvcm5lcj1wPj40JjMsZC50cmFuc3Bvc2VkPSEhKDY0JnApLGQuY29tYmluYXRpb25PcGVyYXRvcj1wPj43JjMsZC5kZWZhdWx0UGl4ZWxWYWx1ZT1wPj45JjEsZC5kc09mZnNldD1wPDwxNz4+MjcsZC5yZWZpbmVtZW50VGVtcGxhdGU9cD4+MTUmMSxkLmh1ZmZtYW4pe3ZhciBnPSgwLGkucmVhZFVpbnQxNikoYyxsKTtsKz0yLGQuaHVmZm1hbkZTPTMmZyxkLmh1ZmZtYW5EUz1nPj4yJjMsZC5odWZmbWFuRFQ9Zz4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1nPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWc+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9Zz4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9Zz4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmcpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3Iobj1bXSxhPTA7YTwyO2ErKyluLnB1c2goe3g6KDAsaS5yZWFkSW50OCkoYyxsKSx5OigwLGkucmVhZEludDgpKGMsbCsxKX0pLGwrPTI7ZC5yZWZpbmVtZW50QXQ9bn1kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LHI9W2Qscy5yZWZlcnJlZFRvLGMsbCx1XTticmVhaztjYXNlIDE2OnZhciB2PXt9LG09Y1tsKytdO3YubW1yPSEhKDEmbSksdi50ZW1wbGF0ZT1tPj4xJjMsdi5wYXR0ZXJuV2lkdGg9Y1tsKytdLHYucGF0dGVybkhlaWdodD1jW2wrK10sdi5tYXhQYXR0ZXJuSW5kZXg9KDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQscj1bdixzLm51bWJlcixjLGwsdV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnZhciBiPXt9O2IuaW5mbz1qKGMsbCksbCs9TTt2YXIgdz1jW2wrK107Yi5tbXI9ISEoMSZ3KSxiLnRlbXBsYXRlPXc+PjEmMyxiLmVuYWJsZVNraXA9ISEoOCZ3KSxiLmNvbWJpbmF0aW9uT3BlcmF0b3I9dz4+NCY3LGIuZGVmYXVsdFBpeGVsVmFsdWU9dz4+NyYxLGIuZ3JpZFdpZHRoPSgwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZEhlaWdodD0oMCxpLnJlYWRVaW50MzIpKGMsbCksbCs9NCxiLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShjLGwpLGwrPTQsYi5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGkucmVhZFVpbnQzMikoYyxsKSxsKz00LGIuZ3JpZFZlY3Rvclg9KDAsaS5yZWFkVWludDE2KShjLGwpLGwrPTIsYi5ncmlkVmVjdG9yWT0oMCxpLnJlYWRVaW50MTYpKGMsbCksbCs9MixyPVtiLHMucmVmZXJyZWRUbyxjLGwsdV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnZhciBrPXt9O2suaW5mbz1qKGMsbCksbCs9TTt2YXIgUz1jW2wrK107aWYoay5tbXI9ISEoMSZTKSxrLnRlbXBsYXRlPVM+PjEmMyxrLnByZWRpY3Rpb249ISEoOCZTKSwhay5tbXIpe2ZvcihvPTA9PT1rLnRlbXBsYXRlPzQ6MSxuPVtdLGE9MDthPG87YSsrKW4ucHVzaCh7eDooMCxpLnJlYWRJbnQ4KShjLGwpLHk6KDAsaS5yZWFkSW50OCkoYyxsKzEpfSksbCs9MjtrLmF0PW59cj1bayxjLGwsdV07YnJlYWs7Y2FzZSA0ODp2YXIgeD17d2lkdGg6KDAsaS5yZWFkVWludDMyKShjLGwpLGhlaWdodDooMCxpLnJlYWRVaW50MzIpKGMsbCs0KSxyZXNvbHV0aW9uWDooMCxpLnJlYWRVaW50MzIpKGMsbCs4KSxyZXNvbHV0aW9uWTooMCxpLnJlYWRVaW50MzIpKGMsbCsxMil9OzQyOTQ5NjcyOTU9PT14LmhlaWdodCYmZGVsZXRlIHguaGVpZ2h0O3ZhciBPPWNbbCsxNl07KDAsaS5yZWFkVWludDE2KShjLGwrMTcpLHgubG9zc2xlc3M9ISEoMSZPKSx4LnJlZmluZW1lbnQ9ISEoMiZPKSx4LmRlZmF1bHRQaXhlbFZhbHVlPU8+PjImMSx4LmNvbWJpbmF0aW9uT3BlcmF0b3I9Tz4+MyYzLHgucmVxdWlyZXNCdWZmZXI9ISEoMzImTykseC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmTykscj1beF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnI9W3MubnVtYmVyLGMsbCx1XTticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJzZWdtZW50IHR5cGUgIi5jb25jYXQocy50eXBlTmFtZSwiKCIpLmNvbmNhdChzLnR5cGUsIikgaXMgbm90IGltcGxlbWVudGVkIikpfXZhciBBPSJvbiIrcy50eXBlTmFtZTtBIGluIHQmJnRbQV0uYXBwbHkodCxyKX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKV8oZVtyXSx0KX12YXIgUj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToib25QYWdlSW5mb3JtYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9fSx7a2V5OiJkcmF3Qml0bWFwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLG89dGhpcy5jdXJyZW50UGFnZUluZm8scz1lLndpZHRoLGM9ZS5oZWlnaHQsdT1vLndpZHRoKzc+PjMsbD1vLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6by5jb21iaW5hdGlvbk9wZXJhdG9yLGY9dGhpcy5idWZmZXIsaD0xMjg+Pig3JmUueCksZD1lLnkqdSsoZS54Pj4zKTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV18PWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7Y2FzZSAyOmZvcihyPTA7cjxjO3IrKyl7Zm9yKGE9aCxpPWQsbj0wO248cztuKyspdFtyXVtuXSYmKGZbaV1ePWEpLChhPj49MSl8fChhPTEyOCxpKyspO2QrPXV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgib3BlcmF0b3IgIi5jb25jYXQobCwiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToib25JbW1lZGlhdGVHZW5lcmljUmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT1lLmluZm8saT1uZXcgYih0LHIsbiksbz1GKGUubW1yLGEud2lkdGgsYS5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LGkpO3RoaXMuZHJhd0JpdG1hcChhLG8pfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25TeW1ib2xEaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIHMsbDtlLmh1ZmZtYW4mJihzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49JChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPUgobyx0LHIpLG8rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyB5KCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPSQoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1IKG8sdCxyKSxvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPUgobyx0LHIpLG8rKyk6aT0kKDEpLHt0YWJsZURlbHRhSGVpZ2h0Om4sdGFibGVEZWx0YVdpZHRoOmEsdGFibGVCaXRtYXBTaXplOmksdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP0gobyx0LHIpOiQoMSl9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGw9bmV3IFgobixhLG8pKTt2YXIgZj10aGlzLnN5bWJvbHM7Znx8KHRoaXMuc3ltYm9scz1mPXt9KTt2YXIgaCxkPVtdLHA9dShyKTt0cnl7Zm9yKHAucygpOyEoaD1wLm4oKSkuZG9uZTspe3ZhciBnPWZbaC52YWx1ZV07ZyYmZC5wdXNoLmFwcGx5KGQsYyhnKSl9fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfXZhciB2PW5ldyBiKG4sYSxvKTtmW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoKXtpZihlJiZ0KXRocm93IG5ldyB5KCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBkLHAsZz1bXSx2PTAsbT0oMCxpLmxvZzIpKHIubGVuZ3RoK24pLGI9Zi5kZWNvZGVyLFM9Zi5jb250ZXh0Q2FjaGU7Zm9yKGUmJihkPSQoMSkscD1bXSxtPU1hdGgubWF4KG0sMSkpO2cubGVuZ3RoPG47KXt2Kz1lP28udGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6dyhTLCJJQURIIixiKTtmb3IodmFyIHg9MCxPPTAsQT1lP3AubGVuZ3RoOjA7Oyl7dmFyIEM9ZT9vLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6dyhTLCJJQURXIixiKTtpZihudWxsPT09QylicmVhaztPKz14Kz1DO3ZhciBJPXZvaWQgMDtpZih0KXt2YXIgRT13KFMsIklBQUkiLGIpO2lmKEU+MSlJPVQoZSx0LHgsdiwwLEUsMSxyLmNvbmNhdChnKSxtLDAsMCwxLDAsbyx1LGwsZiwwLGgpO2Vsc2V7dmFyIGo9ayhTLGIsbSksTT13KFMsIklBUkRYIixiKSxfPXcoUywiSUFSRFkiLGIpO0k9UCh4LHYsdSxqPHIubGVuZ3RoP3Jbal06Z1tqLXIubGVuZ3RoXSxNLF8sITEsbCxmKX1nLnB1c2goSSl9ZWxzZSBlP3AucHVzaCh4KTooST1GKCExLHgsdixzLCExLG51bGwsYyxmKSxnLnB1c2goSSkpfWlmKGUmJiF0KXt2YXIgTD1vLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTt2YXIgUj12b2lkIDA7aWYoMD09PUwpUj1xKGgsTyx2KTtlbHNle3ZhciBOPWguZW5kLEQ9aC5wb3NpdGlvbitMO2guZW5kPUQsUj1HKGgsTyx2LCExKSxoLmVuZD1OLGgucG9zaXRpb249RH12YXIgQj1wLmxlbmd0aDtpZihBPT09Qi0xKWcucHVzaChSKTtlbHNle3ZhciBVPXZvaWQgMCxYPXZvaWQgMCxIPTAsej12b2lkIDAsVz12b2lkIDA7Zm9yKFU9QTtVPEI7VSsrKXtmb3Ioej1IK3BbVV0sVz1bXSxYPTA7WDx2O1grKylXLnB1c2goUltYXS5zdWJhcnJheShILHopKTtnLnB1c2goVyksSD16fX19fWZvcih2YXIgVixZLEs9W10sSj1bXSxaPSExLFE9ci5sZW5ndGgrbjtKLmxlbmd0aDxROyl7Zm9yKHZhciBlZT1lP2QuZGVjb2RlKGgpOncoUywiSUFFWCIsYik7ZWUtLTspSi5wdXNoKFopO1o9IVp9Zm9yKFY9MCxZPXIubGVuZ3RoO1Y8WTtWKyspSltWXSYmSy5wdXNoKHJbVl0pO2Zvcih2YXIgdGU9MDt0ZTxuO1YrKyx0ZSsrKUpbVl0mJksucHVzaChnW3RlXSk7cmV0dXJuIEt9KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsZCxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLHMsZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LHYsbCl9fSx7a2V5OiJvbkltbWVkaWF0ZVRleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG8scyxsLGY9ZS5pbmZvLGg9dGhpcy5zeW1ib2xzLGQ9W10scD11KHQpO3RyeXtmb3IocC5zKCk7IShsPXAubigpKS5kb25lOyl7dmFyIGc9aFtsLnZhbHVlXTtnJiZkLnB1c2guYXBwbHkoZCxjKGcpKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9dmFyIHY9KDAsaS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYocz1uZXcgWChyLG4sYSksbz1mdW5jdGlvbihlLHQscixuLGEpe2Zvcih2YXIgaT1bXSxvPTA7bzw9MzQ7bysrKXt2YXIgcz1hLnJlYWRCaXRzKDQpO2kucHVzaChuZXcgTihbbyxzLDAsMF0pKX12YXIgYz1uZXcgQihpLCExKTtpLmxlbmd0aD0wO2Zvcih2YXIgdT0wO3U8bjspe3ZhciBsPWMuZGVjb2RlKGEpO2lmKGw+PTMyKXt2YXIgZj12b2lkIDAsaD12b2lkIDAsZD12b2lkIDA7c3dpdGNoKGwpe2Nhc2UgMzI6aWYoMD09PXUpdGhyb3cgbmV3IHkoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2g9YS5yZWFkQml0cygyKSszLGY9aVt1LTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmg9YS5yZWFkQml0cygzKSszLGY9MDticmVhaztjYXNlIDM0Omg9YS5yZWFkQml0cyg3KSsxMSxmPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoZD0wO2Q8aDtkKyspaS5wdXNoKG5ldyBOKFt1LGYsMCwwXSkpLHUrK31lbHNlIGkucHVzaChuZXcgTihbdSxsLDAsMF0pKSx1Kyt9YS5ieXRlQWxpZ24oKTt2YXIgcCxnLHYsbT1uZXcgQihpLCExKSxiPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOnA9JChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6cD1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpnPSQoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmc9SChiLHQsciksYisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHkoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dj0kKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dj1IKGIsdCxyKSxiKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyB5KCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6bSx0YWJsZUZpcnN0UzpwLHRhYmxlRGVsdGFTOmcsdGFibGVEZWx0YVQ6dn19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxzKSk7dmFyIG09bmV3IGIocixuLGEpLHc9VChlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGYud2lkdGgsZi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGQsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxtLGUubG9nU3RyaXBTaXplLHMpO3RoaXMuZHJhd0JpdG1hcChmLHcpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0se2tleToib25QYXR0ZXJuRGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO3ZhciBvPW5ldyBiKHIsbixhKTtpW3RdPWZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bXTtlfHwoby5wdXNoKHt4Oi10LHk6MH0pLDA9PT1hJiZvLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2Zvcih2YXIgcz1GKGUsKG4rMSkqdCxyLGEsITEsbnVsbCxvLGkpLGM9W10sdT0wO3U8PW47dSsrKXtmb3IodmFyIGw9W10sZj10KnUsaD1mK3QsZD0wO2Q8cjtkKyspbC5wdXNoKHNbZF0uc3ViYXJyYXkoZixoKSk7Yy5wdXNoKGwpfXJldHVybiBjfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxvKX19LHtrZXk6Im9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89dGhpcy5wYXR0ZXJuc1t0WzBdXSxzPWUuaW5mbyxjPW5ldyBiKHIsbixhKSx1PWZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMsYyx1LGwsZixoLGQscCxnKXtpZihzKXRocm93IG5ldyB5KCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgeSgnb3BlcmF0b3IgIicuY29uY2F0KGMsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7dmFyIHYsbSxiLHc9W107Zm9yKHY9MDt2PGE7disrKXtpZihiPW5ldyBVaW50OEFycmF5KG4pLG8pZm9yKG09MDttPG47bSsrKWJbbV09bzt3LnB1c2goYil9dmFyIGs9dC5sZW5ndGgsUz10WzBdLHg9U1swXS5sZW5ndGgsTz1TLmxlbmd0aCxBPSgwLGkubG9nMikoayksQz1bXTtlfHwoQy5wdXNoKHt4OnI8PTE/MzoyLHk6LTF9KSwwPT09ciYmQy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTt2YXIgUCxULEksRSxqLE0sXyxMLFIsTixELEI9W107Zm9yKGUmJihQPW5ldyBYKGcuZGF0YSxnLnN0YXJ0LGcuZW5kKSksdj1BLTE7dj49MDt2LS0pVD1lP0coUCx1LGwsITApOkYoITEsdSxsLHIsITEsbnVsbCxDLGcpLEJbdl09VDtmb3IoST0wO0k8bDtJKyspZm9yKEU9MDtFPHU7RSsrKXtmb3Ioaj0wLE09MCxtPUEtMTttPj0wO20tLSlNfD0oal49QlttXVtJXVtFXSk8PG07aWYoXz10W01dLFI9aCtJKmQtRSpwPj44LChMPWYrSSpwK0UqZD4+OCk+PTAmJkwreDw9biYmUj49MCYmUitPPD1hKWZvcih2PTA7djxPO3YrKylmb3IoRD13W1Irdl0sTj1fW3ZdLG09MDttPHg7bSsrKURbTCttXXw9TlttXTtlbHNle3ZhciBVPXZvaWQgMCwkPXZvaWQgMDtmb3Iodj0wO3Y8Tzt2KyspaWYoISgoJD1SK3YpPDB8fCQ+PWEpKWZvcihEPXdbJF0sTj1fW3ZdLG09MDttPHg7bSsrKShVPUwrbSk+PTAmJlU8biYmKERbVV18PU5bbV0pfX1yZXR1cm4gd30oZS5tbXIsbyxlLnRlbXBsYXRlLHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGMpO3RoaXMuZHJhd0JpdG1hcChzLHUpfX0se2tleToib25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx7a2V5OiJvblRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5jdXN0b21UYWJsZXM7YXx8KHRoaXMuY3VzdG9tVGFibGVzPWE9e30pLGFbZV09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsbz1lW3RdLHM9NDI5NDk2NzI5NSYoMCxpLnJlYWRVaW50MzIpKGUsdCsxKSxjPTQyOTQ5NjcyOTUmKDAsaS5yZWFkVWludDMyKShlLHQrNSksdT1uZXcgWChlLHQrOSxyKSxsPTErKG8+PjEmNyksZj0xKyhvPj40JjcpLGg9W10sZD1zO2Rve249dS5yZWFkQml0cyhsKSxhPXUucmVhZEJpdHMoZiksaC5wdXNoKG5ldyBOKFtkLG4sYSwwXSkpLGQrPTE8PGF9d2hpbGUoZDxjKTtyZXR1cm4gbj11LnJlYWRCaXRzKGwpLGgucHVzaChuZXcgTihbcy0xLG4sMzIsMCwibG93ZXIiXSkpLG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW2MsbiwzMiwwXSkpLDEmbyYmKG49dS5yZWFkQml0cyhsKSxoLnB1c2gobmV3IE4oW24sMF0pKSksbmV3IEIoaCwhMSl9KHQscixuKX19XSksZX0oKSxOPWQoKGZ1bmN0aW9uIGUodCl7cCh0aGlzLGUpLDI9PT10Lmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9dFswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPXRbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9dFswXSx0aGlzLnByZWZpeExlbmd0aD10WzFdLHRoaXMucmFuZ2VMZW5ndGg9dFsyXSx0aGlzLnByZWZpeENvZGU9dFszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09dFs0XSl9KSksRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cCh0aGlzLGUpLHRoaXMuY2hpbGRyZW49W10sdD8odGhpcy5pc0xlYWY9ITAsdGhpcy5yYW5nZUxlbmd0aD10LnJhbmdlTGVuZ3RoLHRoaXMucmFuZ2VMb3c9dC5yYW5nZUxvdyx0aGlzLmlzTG93ZXJSYW5nZT10LmlzTG93ZXJSYW5nZSx0aGlzLmlzT09CPXQuaXNPT0IpOnRoaXMuaXNMZWFmPSExfXJldHVybiBkKGUsW3trZXk6ImJ1aWxkVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj10LnByZWZpeENvZGU+PnImMTtpZihyPD0wKXRoaXMuY2hpbGRyZW5bbl09bmV3IGUodCk7ZWxzZXt2YXIgYT10aGlzLmNoaWxkcmVuW25dO2F8fCh0aGlzLmNoaWxkcmVuW25dPWE9bmV3IGUobnVsbCkpLGEuYnVpbGRUcmVlKHQsci0xKX19fSx7a2V5OiJkZWNvZGVOb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDt2YXIgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX12YXIgcj10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighcil0aHJvdyBuZXcgeSgiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gci5kZWNvZGVOb2RlKGUpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHJ8fHRoaXMuYXNzaWduUHJlZml4Q29kZXModCksdGhpcy5yb290Tm9kZT1uZXcgRChudWxsKTtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspe3ZhciBpPXRbbl07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19cmV0dXJuIGQoZSxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfX0se2tleToiYXNzaWduUHJlZml4Q29kZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj0wO248dDtuKyspcj1NYXRoLm1heChyLGVbbl0ucHJlZml4TGVuZ3RoKTtmb3IodmFyIGE9bmV3IFVpbnQzMkFycmF5KHIrMSksaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKzt2YXIgbyxzLGMsdT0xLGw9MDtmb3IoYVswXT0wO3U8PXI7KXtmb3Iobz1sPWwrYVt1LTFdPDwxLHM9MDtzPHQ7KShjPWVbc10pLnByZWZpeExlbmd0aD09PXUmJihjLnByZWZpeENvZGU9byxvKyspLHMrKzt1Kyt9fX1dKSxlfSgpLFU9e307ZnVuY3Rpb24gJChlKXt2YXIgdCxyPVVbZV07aWYocilyZXR1cm4gcjtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgeSgic3RhbmRhcmQgdGFibGUgQi4iLmNvbmNhdChlLCIgZG9lcyBub3QgZXhpc3QiKSl9Zm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl09bmV3IE4odFtuXSk7cmV0dXJuIHI9bmV3IEIodCwhMCksVVtlXT1yLHJ9dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtwKHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5zdGFydD1yLHRoaXMuZW5kPW4sdGhpcy5wb3NpdGlvbj1yLHRoaXMuc2hpZnQ9LTEsdGhpcy5jdXJyZW50Qnl0ZT0wfXJldHVybiBkKGUsW3trZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgeSgiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N312YXIgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7cmV0dXJuIHRoaXMuc2hpZnQtLSxlfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodD1lLTE7dD49MDt0LS0pcnw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIHJ9fSx7a2V5OiJieXRlQWxpZ24iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX19LHtrZXk6Im5leHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1dKSxlfSgpO2Z1bmN0aW9uIEgoZSx0LHIpe2Zvcih2YXIgbj0wLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspe3ZhciBvPXJbdFthXV07aWYobyl7aWYoZT09PW4pcmV0dXJuIG87bisrfX10aHJvdyBuZXcgeSgiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHEoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPTA7YTxyO2ErKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodCk7bi5wdXNoKGkpO2Zvcih2YXIgbz0wO288dDtvKyspaVtvXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBufWZ1bmN0aW9uIEcoZSx0LHIsbil7Zm9yKHZhciBhLGk9e0s6LTEsQ29sdW1uczp0LFJvd3M6cixCbGFja0lzMTohMCxFbmRPZkJsb2NrOm59LG89bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsaSksYz1bXSx1PSExLGw9MDtsPHI7bCsrKXt2YXIgZj1uZXcgVWludDhBcnJheSh0KTtjLnB1c2goZik7Zm9yKHZhciBoPS0xLGQ9MDtkPHQ7ZCsrKWg8MCYmKC0xPT09KGE9by5yZWFkTmV4dENoYXIoKSkmJihhPTAsdT0hMCksaD03KSxmW2RdPWE+PmgmMSxoLS19aWYobiYmIXUpZm9yKHZhciBwPTA7cDw1JiYtMSE9PW8ucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gY312YXIgej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToicGFyc2VDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFIscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9ZVtyXTtMKEUoe30sYS5kYXRhLGEuc3RhcnQsYS5lbmQpLHQpfXJldHVybiB0LmJ1ZmZlcn0oZSl9fSx7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IEpiaWcySW1hZ2UucGFyc2UiKX19XSksZX0oKTt0LkpiaWcySW1hZ2U9en0sKGUsdCk9PntmdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciBhPW4uY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXIoYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1yKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7dmFyIGE9W3txZToyMjAxNyxubXBzOjEsbmxwczoxLHN3aXRjaEZsYWc6MX0se3FlOjEzMzEzLG5tcHM6MixubHBzOjYsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjMsbmxwczo5LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczo0LG5scHM6MTIsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjUsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozOCxubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NyxubHBzOjYsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczo4LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczo5LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxMCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MTEsbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MTIsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MTMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjksbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjE1LG5scHM6MTQsc3dpdGNoRmxhZzoxfSx7cWU6MjE1MDUsbm1wczoxNixubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjIwNzM3LG5tcHM6MTcsbmxwczoxNSxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjE4LG5scHM6MTYsc3dpdGNoRmxhZzowfSx7cWU6MTQzMzcsbm1wczoxOSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjEzMzEzLG5tcHM6MjAsbmxwczoxOCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjIxLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6MTAyNDEsbm1wczoyMixubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoyMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjg3MDUsbm1wczoyNCxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoyNSxubHBzOjIyLHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczoyNixubHBzOjIzLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyNyxubHBzOjI0LHN3aXRjaEZsYWc6MH0se3FlOjUxMjEsbm1wczoyOCxubHBzOjI1LHN3aXRjaEZsYWc6MH0se3FlOjQ2MDksbm1wczoyOSxubHBzOjI2LHN3aXRjaEZsYWc6MH0se3FlOjQzNTMsbm1wczozMCxubHBzOjI3LHN3aXRjaEZsYWc6MH0se3FlOjI3NTMsbm1wczozMSxubHBzOjI4LHN3aXRjaEZsYWc6MH0se3FlOjI0OTcsbm1wczozMixubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjIyMDksbm1wczozMyxubHBzOjMwLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczozNCxubHBzOjMxLHN3aXRjaEZsYWc6MH0se3FlOjEwODksbm1wczozNSxubHBzOjMyLHN3aXRjaEZsYWc6MH0se3FlOjY3MyxubXBzOjM2LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzcsbmxwczozNCxzd2l0Y2hGbGFnOjB9LHtxZTozMjEsbm1wczozOCxubHBzOjM1LHN3aXRjaEZsYWc6MH0se3FlOjI3MyxubXBzOjM5LG5scHM6MzYsc3dpdGNoRmxhZzowfSx7cWU6MTMzLG5tcHM6NDAsbmxwczozNyxzd2l0Y2hGbGFnOjB9LHtxZTo3MyxubXBzOjQxLG5scHM6Mzgsc3dpdGNoRmxhZzowfSx7cWU6Mzcsbm1wczo0MixubHBzOjM5LHN3aXRjaEZsYWc6MH0se3FlOjIxLG5tcHM6NDMsbmxwczo0MCxzd2l0Y2hGbGFnOjB9LHtxZTo5LG5tcHM6NDQsbmxwczo0MSxzd2l0Y2hGbGFnOjB9LHtxZTo1LG5tcHM6NDUsbmxwczo0Mixzd2l0Y2hGbGFnOjB9LHtxZToxLG5tcHM6NDUsbmxwczo0Myxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjQ2LG5scHM6NDYsc3dpdGNoRmxhZzowfV0saT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuYnA9cix0aGlzLmRhdGFFbmQ9bix0aGlzLmNoaWdoPXRbcl0sdGhpcy5jbG93PTAsdGhpcy5ieXRlSW4oKSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDcmNjU1MzV8dGhpcy5jbG93Pj45JjEyNyx0aGlzLmNsb3c9dGhpcy5jbG93PDw3JjY1NTM1LHRoaXMuY3QtPTcsdGhpcy5hPTMyNzY4fXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiYnl0ZUluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMuYnA7MjU1PT09ZVt0XT9lW3QrMV0+MTQzPyh0aGlzLmNsb3crPTY1MjgwLHRoaXMuY3Q9OCk6KHQrKyx0aGlzLmNsb3crPWVbdF08PDksdGhpcy5jdD03LHRoaXMuYnA9dCk6KHQrKyx0aGlzLmNsb3crPXQ8dGhpcy5kYXRhRW5kP2VbdF08PDg6NjUyODAsdGhpcy5jdD04LHRoaXMuYnA9dCksdGhpcy5jbG93PjY1NTM1JiYodGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNix0aGlzLmNsb3cmPTY1NTM1KX19LHtrZXk6InJlYWRCaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lW3RdPj4xLGk9MSZlW3RdLG89YVtuXSxzPW8ucWUsYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpYzxzPyhjPXMscj1pLG49by5ubXBzKTooYz1zLHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKTtlbHNle2lmKHRoaXMuY2hpZ2gtPXMsMCE9KDMyNzY4JmMpKXJldHVybiB0aGlzLmE9YyxpO2M8cz8ocj0xXmksMT09PW8uc3dpdGNoRmxhZyYmKGk9ciksbj1vLm5scHMpOihyPWksbj1vLm5tcHMpfWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpLGM8PD0xLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjEsdGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNSx0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTtyZXR1cm4gdGhpcy5hPWMsZVt0XT1uPDwxfGkscn19XSkmJm4odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkFyaXRobWV0aWNEZWNvZGVyPWl9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdTdHJlYW09dm9pZCAwO3ZhciBhPXIoMTQ4KSxpPXIoMTM0KSxvPXIoMTU3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHUoZSx0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxsKGUpfXZhciBmPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9KGQsZSk7dmFyIHQscixhLGYsaD0oYT1kLGY9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1sKGEpO2lmKGYpe3ZhciByPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGQoZSx0LHIpe3ZhciBuLGE7Zm9yKGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZCk7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWEpe2Uuc2tpcCgtMSk7YnJlYWt9cmV0dXJuKG49aC5jYWxsKHRoaXMsdCkpLnN0cmVhbT1lLG4uZGljdD1lLmRpY3Qsbi5tYXliZUxlbmd0aD10LG4ucGFyYW1zPXIsbn1yZXR1cm4gdD1kLChyPVt7a2V5OiJieXRlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9fSx7a2V5OiJlbnN1cmVCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5lb2Ype3ZhciBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLmZvcmNlUkdCJiZBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dC5sZW5ndGgsYT1uZXcgSW50MzJBcnJheShuKSxzPSExLGM9KDE8PHIpLTEsdT0wO3U8bjt1Kz0yKWFbdV09MjU2Kih0W3UrMV0tdFt1XSl8MCxhW3UrMV09dFt1XSpjfDAsMjU2PT09YVt1XSYmMD09PWFbdSsxXXx8KHM9ITApO3MmJihlLmRlY29kZVRyYW5zZm9ybT1hKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGw9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIobCkmJihlLmNvbG9yVHJhbnNmb3JtPWwpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19fV0pJiZjKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGR9KGEuRGVjb2RlU3RyZWFtKTt0LkpwZWdTdHJlYW09Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpwZWdJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM1KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28oZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHMoZSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxoKGUsdCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09cyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX12YXIgZz1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSx2PWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1kKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gbCh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsIkROTE1hcmtlckVycm9yIikpLnNjYW5MaW5lcz1uLGF9cmV0dXJuIHUocil9KG4uQmFzZUV4Y2VwdGlvbikseT1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9ZChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBsKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiRU9JTWFya2VyRXJyb3IiKX1yZXR1cm4gdShyKX0obi5CYXNlRXhjZXB0aW9uKSxtPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksYj00MDE3LHc9Nzk5LGs9MzQwNixTPTIyNzYseD0xNTY3LE89Mzc4NCxBPTU3OTMsQz0yODk2O2Z1bmN0aW9uIEYoZSx0KXtmb3IodmFyIHIsbixhPTAsaT0xNjtpPjAmJiFlW2ktMV07KWktLTt2YXIgbyxzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dLGM9c1swXTtmb3Iocj0wO3I8aTtyKyspe2ZvcihuPTA7bjxlW3JdO24rKyl7Zm9yKChjPXMucG9wKCkpLmNoaWxkcmVuW2MuaW5kZXhdPXRbYV07Yy5pbmRleD4wOyljPXMucG9wKCk7Zm9yKGMuaW5kZXgrKyxzLnB1c2goYyk7cy5sZW5ndGg8PXI7KXMucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSksYy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuLGM9bzthKyt9cisxPGkmJihzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW8pfXJldHVybiBzWzBdLmNoaWxkcmVufWZ1bmN0aW9uIFAoZSx0LHIpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K3IpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvLGMsdSxsLGYpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+OSYmdm9pZCAwIT09YXJndW1lbnRzWzldJiZhcmd1bWVudHNbOV0sZD1yLm1jdXNQZXJMaW5lLHA9ci5wcm9ncmVzc2l2ZSxiPXQsdz0wLGs9MDtmdW5jdGlvbiBTKCl7aWYoaz4wKXJldHVybiBrLS0sdz4+ayYxO2lmKDI1NT09PSh3PWVbdCsrXSkpe3ZhciBuPWVbdCsrXTtpZihuKXtpZigyMjA9PT1uJiZoKXt0Kz0yO3ZhciBpPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLGk+MCYmaSE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyB2KCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixpKX1lbHNlIGlmKDIxNz09PW4pe2lmKGgpe3ZhciBvPUkqKDg9PT1yLnByZWNpc2lvbj84OjApO2lmKG8+MCYmTWF0aC5yb3VuZChyLnNjYW5MaW5lcy9vKT49NSl0aHJvdyBuZXcgdigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLG8pfXRocm93IG5ldyB5KCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIil9dGhyb3cgbmV3IGcoInVuZXhwZWN0ZWQgbWFya2VyICIuY29uY2F0KCh3PDw4fG4pLnRvU3RyaW5nKDE2KSkpfX1yZXR1cm4gaz03LHc+Pj43fWZ1bmN0aW9uIHgoZSl7Zm9yKHZhciB0PWU7Oyl7c3dpdGNoKHModD10W1MoKV0pKXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBnKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9MDtlPjA7KXQ9dDw8MXxTKCksZS0tO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1TKCk/MTotMTt2YXIgdD1PKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX12YXIgQyxGPTAsVD0wLEk9MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7dmFyIGk9ciVkO0k9KHIvZHwwKSplLnYrbjt2YXIgbz1pKmUuaCthO3QoZSxQKGUsSSxvKSl9ZnVuY3Rpb24gTShlLHQscil7ST1yL2UuYmxvY2tzUGVyTGluZXwwO3ZhciBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSxQKGUsSSxuKSl9dmFyIF8sTCxSLE4sRCxCLFU9aS5sZW5ndGg7Qj1wPzA9PT1jPzA9PT1sP2Z1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTw8ZjtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW59OmZ1bmN0aW9uKGUsdCl7ZS5ibG9ja0RhdGFbdF18PVMoKTw8Zn06MD09PWw/ZnVuY3Rpb24oZSx0KXtpZihGPjApRi0tO2Vsc2UgZm9yKHZhciByPWMsbj11O3I8PW47KXt2YXIgYT14KGUuaHVmZm1hblRhYmxlQUMpLGk9MTUmYSxvPWE+PjQ7aWYoMCE9PWkpe3ZhciBzPW1bcis9b107ZS5ibG9ja0RhdGFbdCtzXT1BKGkpKigxPDxmKSxyKyt9ZWxzZXtpZihvPDE1KXtGPU8obykrKDE8PG8pLTE7YnJlYWt9cis9MTZ9fX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhPWMsaT11LG89MDthPD1pOyl7dmFyIHM9dCttW2FdLGw9ZS5ibG9ja0RhdGFbc108MD8tMToxO3N3aXRjaChUKXtjYXNlIDA6aWYobz0obj14KGUuaHVmZm1hblRhYmxlQUMpKT4+NCwwPT0ocj0xNSZuKSlvPDE1PyhGPU8obykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1yKXRocm93IG5ldyBnKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0M9QShyKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbc10/ZS5ibG9ja0RhdGFbc10rPWwqKFMoKTw8Zik6MD09LS1vJiYoVD0yPT09VD8zOjApO2JyZWFrO2Nhc2UgMzplLmJsb2NrRGF0YVtzXT9lLmJsb2NrRGF0YVtzXSs9bCooUygpPDxmKTooZS5ibG9ja0RhdGFbc109Qzw8ZixUPTApO2JyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVtzXSYmKGUuYmxvY2tEYXRhW3NdKz1sKihTKCk8PGYpKX1hKyt9ND09PVQmJjA9PS0tRiYmKFQ9MCl9OmZ1bmN0aW9uKGUsdCl7dmFyIHI9eChlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6QShyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47Zm9yKHZhciBhPTE7YTw2NDspe3ZhciBpPXgoZS5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGM9bVthKz1zXTtlLmJsb2NrRGF0YVt0K2NdPUEobyksYSsrfWVsc2V7aWYoczwxNSlicmVhazthKz0xNn19fTt2YXIgJCxYLEgscSxHPTA7Zm9yKFg9MT09PVU/aVswXS5ibG9ja3NQZXJMaW5lKmlbMF0uYmxvY2tzUGVyQ29sdW1uOmQqci5tY3VzUGVyQ29sdW1uO0c8PVg7KXt2YXIgej1vP01hdGgubWluKFgtRyxvKTpYO2lmKHo+MCl7Zm9yKEw9MDtMPFU7TCsrKWlbTF0ucHJlZD0wO2lmKEY9MCwxPT09VSlmb3IoXz1pWzBdLEQ9MDtEPHo7RCsrKU0oXyxCLEcpLEcrKztlbHNlIGZvcihEPTA7RDx6O0QrKyl7Zm9yKEw9MDtMPFU7TCsrKWZvcihIPShfPWlbTF0pLmgscT1fLnYsUj0wO1I8cTtSKyspZm9yKE49MDtOPEg7TisrKUUoXyxCLEcsUixOKTtHKyt9fWlmKGs9MCwhKCQ9aihlLHQpKSlicmVhaztpZigkLmludmFsaWQpe3ZhciBXPXo+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtICIuY29uY2F0KFcsIiBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIpLmNvbmNhdCgkLmludmFsaWQpKSx0PSQub2Zmc2V0fWlmKCEoJC5tYXJrZXI+PTY1NDg4JiYkLm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtYn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sRixQLFQ9ZS5xdWFudGl6YXRpb25UYWJsZSxJPWUuYmxvY2tEYXRhO2lmKCFUKXRocm93IG5ldyBnKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IodmFyIEU9MDtFPDY0O0UrPTgpZj1JW3QrRV0saD1JW3QrRSsxXSxkPUlbdCtFKzJdLHA9SVt0K0UrM10sdj1JW3QrRSs0XSx5PUlbdCtFKzVdLG09SVt0K0UrNl0sRj1JW3QrRSs3XSxmKj1UW0VdLDAhPShofGR8cHx2fHl8bXxGKT8oaCo9VFtFKzFdLGQqPVRbRSsyXSxwKj1UW0UrM10sdio9VFtFKzRdLHkqPVRbRSs1XSxtKj1UW0UrNl0sRio9VFtFKzddLGE9KG49KG49QSpmKzEyOD4+OCkrKGE9QSp2KzEyOD4+OCkrMT4+MSktYSxQPShpPWQpKk8rKG89bSkqeCsxMjg+PjgsaT1pKngtbypPKzEyOD4+OCx1PShzPShzPUMqKGgtRikrMTI4Pj44KSsodT15PDw0KSsxPj4xKS11LGM9KGw9KGw9QyooaCtGKSsxMjg+PjgpKyhjPXA8PDQpKzE+PjEpLWMsbz0obj1uKyhvPVApKzE+PjEpLW8saT0oYT1hK2krMT4+MSktaSxQPXMqUytsKmsrMjA0OD4+MTIscz1zKmstbCpTKzIwNDg+PjEyLGw9UCxQPWMqdyt1KmIrMjA0OD4+MTIsYz1jKmItdSp3KzIwNDg+PjEyLHU9UCxyW0VdPW4rbCxyW0UrN109bi1sLHJbRSsxXT1hK3UscltFKzZdPWEtdSxyW0UrMl09aStjLHJbRSs1XT1pLWMscltFKzNdPW8rcyxyW0UrNF09by1zKTooUD1BKmYrNTEyPj4xMCxyW0VdPVAscltFKzFdPVAscltFKzJdPVAscltFKzNdPVAscltFKzRdPVAscltFKzVdPVAscltFKzZdPVAscltFKzddPVApO2Zvcih2YXIgaj0wO2o8ODsrK2opZj1yW2pdLDAhPSgoaD1yW2orOF0pfChkPXJbaisxNl0pfChwPXJbaisyNF0pfCh2PXJbaiszMl0pfCh5PXJbais0MF0pfChtPXJbais0OF0pfChGPXJbais1Nl0pKT8oYT0obj00MTEyKygobj1BKmYrMjA0OD4+MTIpKyhhPUEqdisyMDQ4Pj4xMikrMT4+MSkpLWEsUD0oaT1kKSpPKyhvPW0pKngrMjA0OD4+MTIsaT1pKngtbypPKzIwNDg+PjEyLG89UCx1PShzPShzPUMqKGgtRikrMjA0OD4+MTIpKyh1PXkpKzE+PjEpLXUsYz0obD0obD1DKihoK0YpKzIwNDg+PjEyKSsoYz1wKSsxPj4xKS1jLFA9cypTK2wqaysyMDQ4Pj4xMixzPXMqay1sKlMrMjA0OD4+MTIsbD1QLFA9Yyp3K3UqYisyMDQ4Pj4xMixjPWMqYi11KncrMjA0OD4+MTIsKGY9KG49bitvKzE+PjEpK2wpPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00LChoPShhPWEraSsxPj4xKSsodT1QKSk8MTY/aD0wOmg+PTQwODA/aD0yNTU6aD4+PTQsKGQ9KGk9YS1pKStjKTwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NCwocD0obz1uLW8pK3MpPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00LCh2PW8tcyk8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQsKHk9aS1jKTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NCwobT1hLXUpPDE2P209MDptPj00MDgwP209MjU1Om0+Pj00LChGPW4tbCk8MTY/Rj0wOkY+PTQwODA/Rj0yNTU6Rj4+PTQsSVt0K2pdPWYsSVt0K2orOF09aCxJW3QraisxNl09ZCxJW3QraisyNF09cCxJW3QraiszMl09dixJW3Qrais0MF09eSxJW3Qrais0OF09bSxJW3Qrais1Nl09Rik6KFA9KFA9QSpmKzgxOTI+PjE0KTwtMjA0MD8wOlA+PTIwMjQ/MjU1OlArMjA1Nj4+NCxJW3Qral09UCxJW3Qrais4XT1QLElbdCtqKzE2XT1QLElbdCtqKzI0XT1QLElbdCtqKzMyXT1QLElbdCtqKzQwXT1QLElbdCtqKzQ4XT1QLElbdCtqKzU2XT1QKX1mdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpLGk9MDtpPG47aSsrKWZvcih2YXIgbz0wO288cjtvKyspSSh0LFAodCxpLG8pLGEpO3JldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBqKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsbj1lLmxlbmd0aC0xLGk9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO3ZhciBvPSgwLGEucmVhZFVpbnQxNikoZSx0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPSgwLGEucmVhZFVpbnQxNikoZSxpKTshKHM+PTY1NDcyJiZzPD02NTUzNCk7KXtpZigrK2k+PW4pcmV0dXJuIG51bGw7cz0oMCxhLnJlYWRVaW50MTYpKGUsaSl9cmV0dXJue2ludmFsaWQ6by50b1N0cmluZygxNiksbWFya2VyOnMsb2Zmc2V0Oml9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZGVjb2RlVHJhbnNmb3JtLG49dm9pZCAwPT09cj9udWxsOnIsYT10LmNvbG9yVHJhbnNmb3JtLGk9dm9pZCAwPT09YT8tMTphO2wodGhpcyxlKSx0aGlzLl9kZWNvZGVUcmFuc2Zvcm09bix0aGlzLl9jb2xvclRyYW5zZm9ybT1pfXJldHVybiB1KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5kbmxTY2FuTGluZXMscj12b2lkIDA9PT10P251bGw6dDtmdW5jdGlvbiBvKCl7dmFyIHQ9KDAsYS5yZWFkVWludDE2KShlLGwpLHI9KGwrPTIpK3QtMixpPWooZSxyLGwpO2kmJmkuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpLHI9aS5vZmZzZXQpO3ZhciBvPWUuc3ViYXJyYXkobCxyKTtyZXR1cm4gbCs9by5sZW5ndGgsb31mdW5jdGlvbiBzKGUpe3ZhciB0LHI9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLG49TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKSxhPWkoZS5jb21wb25lbnRzKTt0cnl7Zm9yKGEucygpOyEodD1hLm4oKSkuZG9uZTspe3ZhciBvPXQudmFsdWUscz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqby5oL2UubWF4SCksYz1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm8udi9lLm1heFYpLHU9cipvLmgsbD1uKm8udio2NCoodSsxKTtvLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShsKSxvLmJsb2Nrc1BlckxpbmU9cyxvLmJsb2Nrc1BlckNvbHVtbj1jfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1lLm1jdXNQZXJMaW5lPXIsZS5tY3VzUGVyQ29sdW1uPW59dmFyIGMsdSxsPTAsZj1udWxsLGg9bnVsbCxkPTAscD1bXSxiPVtdLHc9W10saz0oMCxhLnJlYWRVaW50MTYpKGUsbCk7aWYobCs9Miw2NTQ5NiE9PWspdGhyb3cgbmV3IGcoIlNPSSBub3QgZm91bmQiKTtrPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yO2U6Zm9yKDs2NTQ5NyE9PWs7KXt2YXIgUz12b2lkIDAseD12b2lkIDAsTz12b2lkIDA7c3dpdGNoKGspe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDp2YXIgQT1vKCk7NjU1MDQ9PT1rJiY3ND09PUFbMF0mJjcwPT09QVsxXSYmNzM9PT1BWzJdJiY3MD09PUFbM10mJjA9PT1BWzRdJiYoZj17dmVyc2lvbjp7bWFqb3I6QVs1XSxtaW5vcjpBWzZdfSxkZW5zaXR5VW5pdHM6QVs3XSx4RGVuc2l0eTpBWzhdPDw4fEFbOV0seURlbnNpdHk6QVsxMF08PDh8QVsxMV0sdGh1bWJXaWR0aDpBWzEyXSx0aHVtYkhlaWdodDpBWzEzXSx0aHVtYkRhdGE6QS5zdWJhcnJheSgxNCwxNCszKkFbMTJdKkFbMTNdKX0pLDY1NTE4PT09ayYmNjU9PT1BWzBdJiYxMDA9PT1BWzFdJiYxMTE9PT1BWzJdJiY5OD09PUFbM10mJjEwMT09PUFbNF0mJihoPXt2ZXJzaW9uOkFbNV08PDh8QVs2XSxmbGFnczA6QVs3XTw8OHxBWzhdLGZsYWdzMTpBWzldPDw4fEFbMTBdLHRyYW5zZm9ybUNvZGU6QVsxMV19KTticmVhaztjYXNlIDY1NDk5OmZvcih2YXIgQz0oMCxhLnJlYWRVaW50MTYpKGUsbCkrKGwrPTIpLTI7bDxDOyl7dmFyIFA9ZVtsKytdLEk9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihQPj40PT0wKWZvcih4PTA7eDw2NDt4KyspSVttW3hdXT1lW2wrK107ZWxzZXtpZihQPj40IT0xKXRocm93IG5ldyBnKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoeD0wO3g8NjQ7eCsrKUlbbVt4XV09KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9cFsxNSZQXT1JfWJyZWFrO2Nhc2UgNjU0NzI6Y2FzZSA2NTQ3MzpjYXNlIDY1NDc0OmlmKGMpdGhyb3cgbmV3IGcoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO2wrPTIsKGM9e30pLmV4dGVuZGVkPTY1NDczPT09ayxjLnByb2dyZXNzaXZlPTY1NDc0PT09ayxjLnByZWNpc2lvbj1lW2wrK107dmFyIE09KDAsYS5yZWFkVWludDE2KShlLGwpO2wrPTIsYy5zY2FuTGluZXM9cnx8TSxjLnNhbXBsZXNQZXJMaW5lPSgwLGEucmVhZFVpbnQxNikoZSxsKSxsKz0yLGMuY29tcG9uZW50cz1bXSxjLmNvbXBvbmVudElkcz17fTt2YXIgXz1lW2wrK10sTD0wLFI9MDtmb3IoUz0wO1M8XztTKyspe3ZhciBOPWVbbF0sRD1lW2wrMV0+PjQsQj0xNSZlW2wrMV07TDxEJiYoTD1EKSxSPEImJihSPUIpO3ZhciBVPWVbbCsyXTtPPWMuY29tcG9uZW50cy5wdXNoKHtoOkQsdjpCLHF1YW50aXphdGlvbklkOlUscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pLGMuY29tcG9uZW50SWRzW05dPU8tMSxsKz0zfWMubWF4SD1MLGMubWF4Vj1SLHMoYyk7YnJlYWs7Y2FzZSA2NTQ3Njp2YXIgJD0oMCxhLnJlYWRVaW50MTYpKGUsbCk7Zm9yKGwrPTIsUz0yO1M8JDspe3ZhciBYPWVbbCsrXSxIPW5ldyBVaW50OEFycmF5KDE2KSxxPTA7Zm9yKHg9MDt4PDE2O3grKyxsKyspcSs9SFt4XT1lW2xdO3ZhciBHPW5ldyBVaW50OEFycmF5KHEpO2Zvcih4PTA7eDxxO3grKyxsKyspR1t4XT1lW2xdO1MrPTE3K3EsKFg+PjQ9PTA/dzpiKVsxNSZYXT1GKEgsRyl9YnJlYWs7Y2FzZSA2NTUwMTpsKz0yLHU9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTI7YnJlYWs7Y2FzZSA2NTQ5ODp2YXIgej0xPT0rK2QmJiFyO2wrPTI7dmFyIFc9ZVtsKytdLFY9W107Zm9yKFM9MDtTPFc7UysrKXt2YXIgWT1lW2wrK10sSz1jLmNvbXBvbmVudElkc1tZXSxKPWMuY29tcG9uZW50c1tLXTtKLmluZGV4PVk7dmFyIFo9ZVtsKytdO0ouaHVmZm1hblRhYmxlREM9d1taPj40XSxKLmh1ZmZtYW5UYWJsZUFDPWJbMTUmWl0sVi5wdXNoKEopfXZhciBRPWVbbCsrXSxlZT1lW2wrK10sdGU9ZVtsKytdO3RyeXt2YXIgcmU9VChlLGwsYyxWLHUsUSxlZSx0ZT4+NCwxNSZ0ZSx6KTtsKz1yZX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4oMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLiIpKSx0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pO2lmKHQgaW5zdGFuY2VvZiB5KXsoMCxuLndhcm4pKCIiLmNvbmNhdCh0Lm1lc3NhZ2UsIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS4iKSk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bCs9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbbF0mJmwtLTticmVhaztkZWZhdWx0OnZhciBuZT1qKGUsbC0yLGwtMyk7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCksbD1uZS5vZmZzZXQ7YnJlYWt9aWYoIW5lfHxsPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgZygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIray50b1N0cmluZygxNikpfWs9KDAsYS5yZWFkVWludDE2KShlLGwpLGwrPTJ9dGhpcy53aWR0aD1jLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWMuc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9aCx0aGlzLmNvbXBvbmVudHM9W107dmFyIGFlLGllPWkoYy5jb21wb25lbnRzKTt0cnl7Zm9yKGllLnMoKTshKGFlPWllLm4oKSkuZG9uZTspe3ZhciBvZT1hZS52YWx1ZSxzZT1wW29lLnF1YW50aXphdGlvbklkXTtzZSYmKG9lLnF1YW50aXphdGlvblRhYmxlPXNlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6b2UuaW5kZXgsb3V0cHV0OkUoMCxvZSksc2NhbGVYOm9lLmgvYy5tYXhILHNjYWxlWTpvZS52L2MubWF4VixibG9ja3NQZXJMaW5lOm9lLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOm9lLmJsb2Nrc1BlckNvbHVtbn0pfX1jYXRjaChlKXtpZS5lKGUpfWZpbmFsbHl7aWUuZigpfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofX0se2tleToiX2dldExpbmVhcml6ZWRCbG9ja0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGksbyxzLGMsdSxsLGYsaCxkLHA9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPXRoaXMud2lkdGgvZSx2PXRoaXMuaGVpZ2h0L3QseT0wLG09dGhpcy5jb21wb25lbnRzLmxlbmd0aCxiPWUqdCptLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGIpLGs9bmV3IFVpbnQzMkFycmF5KGUpLFM9NDI5NDk2NzI4ODtmb3IoYz0wO2M8bTtjKyspe2lmKG49KHI9dGhpcy5jb21wb25lbnRzW2NdKS5zY2FsZVgqZyxhPXIuc2NhbGVZKnYseT1jLGg9ci5vdXRwdXQsaT1yLmJsb2Nrc1BlckxpbmUrMTw8MyxuIT09ZCl7Zm9yKG89MDtvPGU7bysrKXU9MHxvKm4sa1tvXT0odSZTKTw8M3w3JnU7ZD1ufWZvcihzPTA7czx0O3MrKylmb3IoZj1pKigodT0wfHMqYSkmUyl8KDcmdSk8PDMsbz0wO288ZTtvKyspd1t5XT1oW2Yra1tvXV0seSs9bX12YXIgeD10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocHx8NCE9PW18fHh8fCh4PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSx4KWZvcihjPTA7YzxiOylmb3IodT0wLGw9MDt1PG07dSsrLGMrKyxsKz0yKXdbY109KHdbY10qeFtsXT4+OCkreFtsKzFdO3JldHVybiB3fX0se2tleToiX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX19LHtrZXk6Il9jb252ZXJ0WWNjVG9SZ2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTMpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09dC0xNzkuNDU2KzEuNDAyKm4sZVthKzFdPXQrMTM1LjQ1OS0uMzQ0KnItLjcxNCpuLGVbYSsyXT10LTIyNi44MTYrMS43NzIqcjtyZXR1cm4gZX19LHtrZXk6Il9jb252ZXJ0WWNja1RvUmdiIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGEsaT0wLG89MCxzPWUubGVuZ3RoO288cztvKz00KXQ9ZVtvXSxyPWVbbysxXSxuPWVbbysyXSxhPWVbbyszXSxlW2krK109ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKmEtLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NyphKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqYSsuNDgzNTcwODg0NTEyNjUpK2EqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmErLjQ4NDc5MTU2MTQ5MDc3NiksZVtpKytdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNyphLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMiphLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCphKy4yNTgwMjkxMDIwNjg0NSkrYSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqYS0uMjEzNzQyNDAwMzIzNjY1KSxlW2krK109ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqYSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMiphLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NyphKy4xMTY5MzUwMjA0NjUxNDUpK2EqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmErLjI0MTY1MjYwMjMyNDA3KTtyZXR1cm4gZS5zdWJhcnJheSgwLGkpfX0se2tleToiX2NvbnZlcnRZY2NrVG9DbXlrIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9fSx7a2V5OiJfY29udmVydENteWtUb1JnYiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixhLGk9MCxvPTAscz1lLmxlbmd0aDtvPHM7bys9NCl0PWVbb10scj1lW28rMV0sbj1lW28rMl0sYT1lW28rM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuZm9yY2VSR0IsYT12b2lkIDAhPT1uJiZuLG89ZS5pc1NvdXJjZVBERixzPXZvaWQgMCE9PW8mJm87aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IGcoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTt2YXIgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiZhKXt2YXIgdSxsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMubGVuZ3RoKSxmPTAsaD1pKGMpO3RyeXtmb3IoaC5zKCk7ISh1PWgubigpKS5kb25lOyl7dmFyIGQ9dS52YWx1ZTtsW2YrK109ZCxsW2YrK109ZCxsW2YrK109ZH19Y2F0Y2goZSl7aC5lKGUpfWZpbmFsbHl7aC5mKCl9cmV0dXJuIGx9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihjKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fV0pLGV9KCk7dC5KcGVnSW1hZ2U9TX0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4U3RyZWFtPXZvaWQgMDt2YXIgYT1yKDE0OCksaT1yKDE1OSksbz1yKDIpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX12YXIgbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYyhlLHQpfShoLGUpO3ZhciB0LHIsYSxsLGY9KGE9aCxsPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9dShhKTtpZihsKXt2YXIgcj11KHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxoKSwobj1mLmNhbGwodGhpcyx0KSkuc3RyZWFtPWUsbi5kaWN0PWUuZGljdCxuLm1heWJlTGVuZ3RoPXQsbi5wYXJhbXM9cixufXJldHVybiB0PWgsKHI9W3trZXk6ImJ5dGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX19LHtrZXk6ImVuc3VyZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToicmVhZEJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZil7dmFyIGU9bmV3IGkuSnB4SW1hZ2U7ZS5wYXJzZSh0aGlzLmJ5dGVzKTt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxhPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1hKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtmb3IodmFyIG89bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqcipuKSxzPTA7czxhO3MrKylmb3IodmFyIGM9ZS50aWxlc1tzXSx1PWMud2lkdGgsbD1jLmhlaWdodCxmPWMubGVmdCxoPWMudG9wLGQ9Yy5pdGVtcyxwPTAsZz0odCpoK2YpKm4sdj10Km4seT11Km4sbT0wO208bDttKyspe3ZhciBiPWQuc3ViYXJyYXkocCxwK3kpO28uc2V0KGIsZykscCs9eSxnKz12fXRoaXMuYnVmZmVyPW99dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoLHRoaXMuZW9mPSEwfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksaH0oYS5EZWNvZGVTdHJlYW0pO3QuSnB4U3RyZWFtPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweEltYWdlPXZvaWQgMDt2YXIgYT1yKDIpLGk9cigxMzUpLG89cigxNTUpO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZmKGUsdCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZihlLHQpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZChlKTtpZih0KXt2YXIgaT1kKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGQ9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGQoZSl9dmFyIHA9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfXJldHVybiBjKHIpfShhLkJhc2VFeGNlcHRpb24pLGc9e0xMOjAsTEg6MSxITDoxLEhIOjJ9LHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dSh0aGlzLGUpLHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2U9ITF9cmV0dXJuIGMoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsaS5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD1lLmxlbmd0aCxyPTA7cjx0Oyl7dmFyIG49OCxvPSgwLGkucmVhZFVpbnQzMikoZSxyKSxzPSgwLGkucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPW4sMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsaS5yZWFkVWludDMyKShlLHIpKygwLGkucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsbis9OCksMD09PW8mJihvPXQtcituKSxvPG4pdGhyb3cgbmV3IHAoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgYz1vLW4sdT0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOnU9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciBsPWVbcl07aWYoMT09PWwpe3ZhciBmPSgwLGkucmVhZFVpbnQzMikoZSxyKzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLGEud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT1sJiYoMCxhLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUscixyK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLGkucmVhZFVpbnQzMikoZSxyKSYmKDAsYS53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsYS53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQocywiICgiKS5jb25jYXQoaCwiKS4iKSl9dSYmKHIrPWMpfWVsc2UgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKX19LHtrZXk6InBhcnNlSW1hZ2VQcm9wZXJ0aWVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRCeXRlKCk7dD49MDspaWYoNjUzNjE9PSh0PDw4fCh0PWUuZ2V0Qnl0ZSgpKSkpe2Uuc2tpcCg0KTt2YXIgcj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wO2Uuc2tpcCgxNik7dmFyIG89ZS5nZXRVaW50MTYoKTtyZXR1cm4gdGhpcy53aWR0aD1yLWEsdGhpcy5oZWlnaHQ9bi1pLHRoaXMuY29tcG9uZW50c0NvdW50PW8sdm9pZCh0aGlzLmJpdHNQZXJDb21wb25lbnQ9OCl9dGhyb3cgbmV3IHAoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19LHtrZXk6InBhcnNlQ29kZXN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9LG89ITE7dHJ5e2Zvcih2YXIgcz10O3MrMTxyOyl7dmFyIGM9KDAsaS5yZWFkVWludDE2KShlLHMpO3MrPTI7dmFyIHU9MCxsPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2goYyl7Y2FzZSA2NTM1OTpuLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnU9KDAsaS5yZWFkVWludDE2KShlLHMpO3ZhciBiPXt9O2IuWHNpej0oMCxpLnJlYWRVaW50MzIpKGUscys0KSxiLllzaXo9KDAsaS5yZWFkVWludDMyKShlLHMrOCksYi5YT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxMiksYi5ZT3Npej0oMCxpLnJlYWRVaW50MzIpKGUscysxNiksYi5YVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyMCksYi5ZVHNpej0oMCxpLnJlYWRVaW50MzIpKGUscysyNCksYi5YVE9zaXo9KDAsaS5yZWFkVWludDMyKShlLHMrMjgpLGIuWVRPc2l6PSgwLGkucmVhZFVpbnQzMikoZSxzKzMyKTt2YXIgdz0oMCxpLnJlYWRVaW50MTYpKGUscyszNik7Yi5Dc2l6PXc7dmFyIGs9W107bD1zKzM4O2Zvcih2YXIgUz0wO1M8dztTKyspe3ZhciB4PXtwcmVjaXNpb246MSsoMTI3JmVbbF0pLGlzU2lnbmVkOiEhKDEyOCZlW2xdKSxYUnNpejplW2wrMV0sWVJzaXo6ZVtsKzJdfTtsKz0zLHkoeCxiKSxrLnB1c2goeCl9bi5TSVo9YixuLmNvbXBvbmVudHM9ayxtKG4sayksbi5RQ0M9W10sbi5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgTz17fTtzd2l0Y2gobD1zKzIsMzEmKGY9ZVtsKytdKSl7Y2FzZSAwOmQ9OCxnPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGc9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZz0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrZil9Zm9yKE8ubm9RdWFudGl6YXRpb249OD09PWQsTy5zY2FsYXJFeHBvdW5kZWQ9ZyxPLmd1YXJkQml0cz1mPj41LGg9W107bDx1K3M7KXt2YXIgQT17fTs4PT09ZD8oQS5lcHNpbG9uPWVbbCsrXT4+MyxBLm11PTApOihBLmVwc2lsb249ZVtsXT4+MyxBLm11PSg3JmVbbF0pPDw4fGVbbCsxXSxsKz0yKSxoLnB1c2goQSl9Ty5TUHFjZHM9aCxuLm1haW5IZWFkZXI/bi5RQ0Q9Tzoobi5jdXJyZW50VGlsZS5RQ0Q9TyxuLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgQz17fTtsPXMrMjt2YXIgRj12b2lkIDA7c3dpdGNoKG4uU0laLkNzaXo8MjU3P0Y9ZVtsKytdOihGPSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yKSwzMSYoZj1lW2wrK10pKXtjYXNlIDA6ZD04LGc9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZz0hMTticmVhaztjYXNlIDI6ZD0xNixnPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitmKX1mb3IoQy5ub1F1YW50aXphdGlvbj04PT09ZCxDLnNjYWxhckV4cG91bmRlZD1nLEMuZ3VhcmRCaXRzPWY+PjUsaD1bXTtsPHUrczspe3ZhciBQPXt9Ozg9PT1kPyhQLmVwc2lsb249ZVtsKytdPj4zLFAubXU9MCk6KFAuZXBzaWxvbj1lW2xdPj4zLFAubXU9KDcmZVtsXSk8PDh8ZVtsKzFdLGwrPTIpLGgucHVzaChQKX1DLlNQcWNkcz1oLG4ubWFpbkhlYWRlcj9uLlFDQ1tGXT1DOm4uY3VycmVudFRpbGUuUUNDW0ZdPUM7YnJlYWs7Y2FzZSA2NTM2Mjp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTt2YXIgVD17fTtsPXMrMjt2YXIgaj1lW2wrK107VC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmaiksVC5zb3BNYXJrZXJVc2VkPSEhKDImaiksVC5lcGhNYXJrZXJVc2VkPSEhKDQmaiksVC5wcm9ncmVzc2lvbk9yZGVyPWVbbCsrXSxULmxheWVyc0NvdW50PSgwLGkucmVhZFVpbnQxNikoZSxsKSxsKz0yLFQubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtsKytdLFQuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbbCsrXSxULnhjYj0yKygxNSZlW2wrK10pLFQueWNiPTIrKDE1JmVbbCsrXSk7dmFyIEw9ZVtsKytdO2lmKFQuc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcz0hISgxJkwpLFQucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcz0hISgyJkwpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzPSEhKDQmTCksVC52ZXJ0aWNhbGx5U3RyaXBlPSEhKDgmTCksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uPSEhKDE2JkwpLFQuc2VnbWVudGF0aW9uU3ltYm9sVXNlZD0hISgzMiZMKSxULnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbj1lW2wrK10sVC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKXtmb3IodmFyIFI9W107bDx1K3M7KXt2YXIgTj1lW2wrK107Ui5wdXNoKHtQUHg6MTUmTixQUHk6Tj4+NH0pfVQucHJlY2luY3RzU2l6ZXM9Un12YXIgRD1bXTtULnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkQucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLFQudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZELnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLFQudmVydGljYWxseVN0cmlwZSYmRC5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksVC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZELnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxELmxlbmd0aD4wJiYobz0hMCwoMCxhLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChELmpvaW4oIiwgIiksIikuIikpKSxuLm1haW5IZWFkZXI/bi5DT0Q9VDoobi5jdXJyZW50VGlsZS5DT0Q9VCxuLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKSwodj17fSkuaW5kZXg9KDAsaS5yZWFkVWludDE2KShlLHMrMiksdi5sZW5ndGg9KDAsaS5yZWFkVWludDMyKShlLHMrNCksdi5kYXRhRW5kPXYubGVuZ3RoK3MtMix2LnBhcnRJbmRleD1lW3MrOF0sdi5wYXJ0c0NvdW50PWVbcys5XSxuLm1haW5IZWFkZXI9ITEsMD09PXYucGFydEluZGV4JiYodi5DT0Q9bi5DT0Qsdi5DT0M9bi5DT0Muc2xpY2UoMCksdi5RQ0Q9bi5RQ0Qsdi5RQ0M9bi5RQ0Muc2xpY2UoMCkpLG4uY3VycmVudFRpbGU9djticmVhaztjYXNlIDY1NDI3OjA9PT0odj1uLmN1cnJlbnRUaWxlKS5wYXJ0SW5kZXgmJihfKG4sdi5pbmRleCksSShuKSksRShuLGUscyx1PXYuZGF0YUVuZC1zKTticmVhaztjYXNlIDY1MzYzOigwLGEud2FybikoIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp1PSgwLGkucmVhZFVpbnQxNikoZSxzKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrYy50b1N0cmluZygxNikpfXMrPXV9fWNhdGNoKGUpe2lmKG98fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IHAoZS5tZXNzYWdlKTsoMCxhLndhcm4pKCdKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICInLmNvbmNhdChlLm1lc3NhZ2UsJyIuJykpfXRoaXMudGlsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W10saT0wLG89ZS50aWxlcy5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWUudGlsZXNbaV0sYz1bXSx1PTA7dTxuO3UrKyljW3VdPU0oZSxzLHUpO3ZhciBsPWNbMF0sZj1uZXcgVWludDhDbGFtcGVkQXJyYXkobC5pdGVtcy5sZW5ndGgqbiksaD17bGVmdDpsLmxlZnQsdG9wOmwudG9wLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LGl0ZW1zOmZ9LGQ9dm9pZCAwLHA9dm9pZCAwLGc9MCx2PXZvaWQgMCx5PXZvaWQgMCxtPXZvaWQgMCxiPXZvaWQgMCx3PXZvaWQgMDtpZihzLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm0pe3ZhciBrPTQ9PT1uLFM9Y1swXS5pdGVtcyx4PWNbMV0uaXRlbXMsTz1jWzJdLml0ZW1zLEE9az9jWzNdLml0ZW1zOm51bGw7cD0uNSsoMTI4PDwoZD1yWzBdLnByZWNpc2lvbi04KSk7dmFyIEM9cy5jb21wb25lbnRzWzBdLEY9bi0zO2lmKHk9Uy5sZW5ndGgsQy5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKWZvcih2PTA7djx5O3YrKyxnKz1GKXttPVNbdl0rcCxiPXhbdl07dmFyIFA9bS0oKHc9T1t2XSkrYj4+Mik7ZltnKytdPVArdz4+ZCxmW2crK109UD4+ZCxmW2crK109UCtiPj5kfWVsc2UgZm9yKHY9MDt2PHk7disrLGcrPUYpbT1TW3ZdK3AsYj14W3ZdLHc9T1t2XSxmW2crK109bSsxLjQwMip3Pj5kLGZbZysrXT1tLS4zNDQxMypiLS43MTQxNCp3Pj5kLGZbZysrXT1tKzEuNzcyKmI+PmQ7aWYoaylmb3Iodj0wLGc9Mzt2PHk7disrLGcrPTQpZltnXT1BW3ZdK3A+PmR9ZWxzZSBmb3IodmFyIFQ9MDtUPG47VCsrKXt2YXIgST1jW1RdLml0ZW1zO2ZvcihwPS41KygxMjg8PChkPXJbVF0ucHJlY2lzaW9uLTgpKSxnPVQsdj0wLHk9SS5sZW5ndGg7djx5O3YrKylmW2ddPUlbdl0rcD4+ZCxnKz1ufWEucHVzaChoKX1yZXR1cm4gYX0obiksdGhpcy53aWR0aD1uLlNJWi5Yc2l6LW4uU0laLlhPc2l6LHRoaXMuaGVpZ2h0PW4uU0laLllzaXotbi5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9bi5TSVouQ3Npen19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHIsbj1lLlNJWixhPVtdLGk9TWF0aC5jZWlsKChuLlhzaXotbi5YVE9zaXopL24uWFRzaXopLG89TWF0aC5jZWlsKChuLllzaXotbi5ZVE9zaXopL24uWVRzaXopLHM9MDtzPG87cysrKWZvcih2YXIgYz0wO2M8aTtjKyspKHI9e30pLnR4MD1NYXRoLm1heChuLlhUT3NpeitjKm4uWFRzaXosbi5YT3Npeiksci50eTA9TWF0aC5tYXgobi5ZVE9zaXorcypuLllUc2l6LG4uWU9zaXopLHIudHgxPU1hdGgubWluKG4uWFRPc2l6KyhjKzEpKm4uWFRzaXosbi5Yc2l6KSxyLnR5MT1NYXRoLm1pbihuLllUT3NpeisocysxKSpuLllUc2l6LG4uWXNpeiksci53aWR0aD1yLnR4MS1yLnR4MCxyLmhlaWdodD1yLnR5MS1yLnR5MCxyLmNvbXBvbmVudHM9W10sYS5wdXNoKHIpO2UudGlsZXM9YTtmb3IodmFyIHU9MCxsPW4uQ3Npejt1PGw7dSsrKWZvcih2YXIgZj10W3VdLGg9MCxkPWEubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPXt9O3I9YVtoXSxwLnRjeDA9TWF0aC5jZWlsKHIudHgwL2YuWFJzaXopLHAudGN5MD1NYXRoLmNlaWwoci50eTAvZi5ZUnNpeikscC50Y3gxPU1hdGguY2VpbChyLnR4MS9mLlhSc2l6KSxwLnRjeTE9TWF0aC5jZWlsKHIudHkxL2YuWVJzaXopLHAud2lkdGg9cC50Y3gxLXAudGN4MCxwLmhlaWdodD1wLnRjeTEtcC50Y3kwLHIuY29tcG9uZW50c1t1XT1wfX1mdW5jdGlvbiBiKGUsdCxyKXt2YXIgbj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxhPXt9O3JldHVybiBuLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM/KGEuUFB4PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB4LGEuUFB5PW4ucHJlY2luY3RzU2l6ZXNbcl0uUFB5KTooYS5QUHg9MTUsYS5QUHk9MTUpLGEueGNiXz1yPjA/TWF0aC5taW4obi54Y2IsYS5QUHgtMSk6TWF0aC5taW4obi54Y2IsYS5QUHgpLGEueWNiXz1yPjA/TWF0aC5taW4obi55Y2IsYS5QUHktMSk6TWF0aC5taW4obi55Y2IsYS5QUHkpLGF9ZnVuY3Rpb24gdyhlLHQscil7dmFyIG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLG89MTw8ci5QUHgrKGk/MDotMSkscz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLHU9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsbD1jKnU7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOnUsbnVtcHJlY2luY3RzOmwscHJlY2luY3RXaWR0aEluU3ViYmFuZDpvLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOnN9fWZ1bmN0aW9uIGsoZSx0LHIpe3ZhciBuLGEsaSxvLHM9ci54Y2JfLGM9ci55Y2JfLHU9MTw8cyxsPTE8PGMsZj10LnRieDA+PnMsaD10LnRieTA+PmMsZD10LnRieDErdS0xPj5zLHA9dC50YnkxK2wtMT4+YyxnPXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsdj1bXSx5PVtdO2ZvcihhPWg7YTxwO2ErKylmb3Iobj1mO248ZDtuKyspaWYoKGk9e2NieDpuLGNieTphLHRieDA6dSpuLHRieTA6bCphLHRieDE6dSoobisxKSx0YnkxOmwqKGErMSl9KS50YngwXz1NYXRoLm1heCh0LnRieDAsaS50YngwKSxpLnRieTBfPU1hdGgubWF4KHQudGJ5MCxpLnRieTApLGkudGJ4MV89TWF0aC5taW4odC50YngxLGkudGJ4MSksaS50YnkxXz1NYXRoLm1pbih0LnRieTEsaS50YnkxKSxvPU1hdGguZmxvb3IoKGkudGJ4MF8tdC50YngwKS9nLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpK01hdGguZmxvb3IoKGkudGJ5MF8tdC50YnkwKS9nLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKSpnLm51bXByZWNpbmN0c3dpZGUsaS5wcmVjaW5jdE51bWJlcj1vLGkuc3ViYmFuZFR5cGU9dC50eXBlLGkuTGJsb2NrPTMsIShpLnRieDFfPD1pLnRieDBffHxpLnRieTFfPD1pLnRieTBfKSl7di5wdXNoKGkpO3ZhciBtPXlbb107dm9pZCAwIT09bT8objxtLmNieE1pbj9tLmNieE1pbj1uOm4+bS5jYnhNYXgmJihtLmNieE1heD1uKSxhPG0uY2J5TWluP20uY2J4TWluPWE6YT5tLmNieU1heCYmKG0uY2J5TWF4PWEpKTp5W29dPW09e2NieE1pbjpuLGNieU1pbjphLGNieE1heDpuLGNieU1heDphfSxpLnByZWNpbmN0PW19dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpzLGNvZGVibG9ja0hlaWdodDpjLG51bWNvZGVibG9ja3dpZGU6ZC1mKzEsbnVtY29kZWJsb2NraGlnaDpwLWgrMX0sdC5jb2RlYmxvY2tzPXYsdC5wcmVjaW5jdHM9eX1mdW5jdGlvbiBTKGUsdCxyKXtmb3IodmFyIG49W10sYT1lLnN1YmJhbmRzLGk9MCxvPWEubGVuZ3RoO2k8bztpKyspZm9yKHZhciBzPWFbaV0uY29kZWJsb2NrcyxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgbD1zW2NdO2wucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2gobCl9cmV0dXJue2xheWVyTnVtYmVyOnIsY29kZWJsb2NrczpufX1mdW5jdGlvbiB4KGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89MCxzPTA7czxpO3MrKylvPU1hdGgubWF4KG8sbi5jb21wb25lbnRzW3NdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsdT0wLGw9MCxmPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPGE7YysrKXtmb3IoO3U8PW87dSsrKXtmb3IoO2w8aTtsKyspe3ZhciBlPW4uY29tcG9uZW50c1tsXTtpZighKHU+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbdV0scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZjxyOyl7dmFyIHM9Uyh0LGYsYyk7cmV0dXJuIGYrKyxzfWY9MH19bD0wfXU9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixvPTAscz0wO3M8aTtzKyspbz1NYXRoLm1heChvLG4uY29tcG9uZW50c1tzXS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTt2YXIgYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7Yzw9bztjKyspe2Zvcig7dTxhO3UrKyl7Zm9yKDtsPGk7bCsrKXt2YXIgZT1uLmNvbXBvbmVudHNbbF07aWYoIShjPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe2Zvcih2YXIgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Y8cjspe3ZhciBzPVModCxmLHUpO3JldHVybiBmKyssc31mPTB9fWw9MH11PTB9dGhyb3cgbmV3IHAoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIEEoZSl7dmFyIHQscixuLGEsaT1lLlNJWixvPWUuY3VycmVudFRpbGUuaW5kZXgscz1lLnRpbGVzW29dLGM9cy5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LHU9aS5Dc2l6LGw9MDtmb3Iobj0wO248dTtuKyspe3ZhciBmPXMuY29tcG9uZW50c1tuXTtsPU1hdGgubWF4KGwsZi5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX12YXIgaD1uZXcgSW50MzJBcnJheShsKzEpO2ZvcihyPTA7cjw9bDsrK3Ipe3ZhciBkPTA7Zm9yKG49MDtuPHU7KytuKXt2YXIgZz1zLmNvbXBvbmVudHNbbl0ucmVzb2x1dGlvbnM7cjxnLmxlbmd0aCYmKGQ9TWF0aC5tYXgoZCxnW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX1oW3JdPWR9dD0wLHI9MCxuPTAsYT0wLHRoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cjw9bDtyKyspe2Zvcig7YTxoW3JdO2ErKyl7Zm9yKDtuPHU7bisrKXt2YXIgZT1zLmNvbXBvbmVudHNbbl07aWYoIShyPmUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkpe3ZhciBpPWUucmVzb2x1dGlvbnNbcl0sbz1pLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7aWYoIShhPj1vKSl7Zm9yKDt0PGM7KXt2YXIgZj1TKGksYSx0KTtyZXR1cm4gdCsrLGZ9dD0wfX19bj0wfWE9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPW8sYz0wLHU9MCxsPTAsZj0wLGg9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2g8cy5tYXhOdW1IaWdoO2grKyl7Zm9yKDtmPHMubWF4TnVtV2lkZTtmKyspe2Zvcig7bDxpO2wrKyl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1tsXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDt1PD10O3UrKyl7dmFyIHI9ZS5yZXNvbHV0aW9uc1t1XSxkPW8uY29tcG9uZW50c1tsXS5yZXNvbHV0aW9uc1t1XSxnPVAoZixoLGQscyxyKTtpZihudWxsIT09Zyl7Zm9yKDtjPGE7KXt2YXIgdj1TKHIsZyxjKTtyZXR1cm4gYysrLHZ9Yz0wfX11PTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LG89VChuKSxzPTAsYz0wLHU9MCxsPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7dTxpOysrdSl7Zm9yKHZhciBlPW4uY29tcG9uZW50c1t1XSx0PW8uY29tcG9uZW50c1t1XSxyPWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmPHQubWF4TnVtSGlnaDtmKyspe2Zvcig7bDx0Lm1heE51bVdpZGU7bCsrKXtmb3IoO2M8PXI7YysrKXt2YXIgaD1lLnJlc29sdXRpb25zW2NdLGQ9dC5yZXNvbHV0aW9uc1tjXSxnPVAobCxmLGQsdCxoKTtpZihudWxsIT09Zyl7Zm9yKDtzPGE7KXt2YXIgdj1TKGgsZyxzKTtyZXR1cm4gcysrLHZ9cz0wfX1jPTB9bD0wfWY9MH10aHJvdyBuZXcgcCgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUChlLHQscixuLGEpe3ZhciBpPWUqbi5taW5XaWR0aCxvPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxvJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO3ZhciBzPW8vci53aWR0aCphLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO3JldHVybiBpL3IuaGVpZ2h0K3N9ZnVuY3Rpb24gVChlKXtmb3IodmFyIHQ9ZS5jb21wb25lbnRzLmxlbmd0aCxyPU51bWJlci5NQVhfVkFMVUUsbj1OdW1iZXIuTUFYX1ZBTFVFLGE9MCxpPTAsbz1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe2Zvcih2YXIgYz1lLmNvbXBvbmVudHNbc10sdT1jLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkodSsxKSxmPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLGQ9MCxwPTAsZz0xLHY9dTt2Pj0wOy0tdil7dmFyIHk9Yy5yZXNvbHV0aW9uc1t2XSxtPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxiPWcqeS5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7Zj1NYXRoLm1pbihmLG0pLGg9TWF0aC5taW4oaCxiKSxkPU1hdGgubWF4KGQseS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSkscD1NYXRoLm1heChwLHkucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbdl09e3dpZHRoOm0saGVpZ2h0OmJ9LGc8PD0xfXI9TWF0aC5taW4ocixmKSxuPU1hdGgubWluKG4saCksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxwKSxvW3NdPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmYsbWluSGVpZ2h0OmgsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6cH19cmV0dXJue2NvbXBvbmVudHM6byxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIEkoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT10LkNzaXosaT0wO2k8YTtpKyspe2Zvcih2YXIgbz1uLmNvbXBvbmVudHNbaV0scz1vLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsYz1bXSx1PVtdLGw9MDtsPD1zO2wrKyl7dmFyIGY9YigwLG8sbCksaD17fSxkPTE8PHMtbDtoLnRyeDA9TWF0aC5jZWlsKG8udGN4MC9kKSxoLnRyeTA9TWF0aC5jZWlsKG8udGN5MC9kKSxoLnRyeDE9TWF0aC5jZWlsKG8udGN4MS9kKSxoLnRyeTE9TWF0aC5jZWlsKG8udGN5MS9kKSxoLnJlc0xldmVsPWwsdygwLGgsZiksYy5wdXNoKGgpO3ZhciBnPXZvaWQgMDtpZigwPT09bCkoZz17fSkudHlwZT0iTEwiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL2QpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL2QpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL2QpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL2QpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSxoLnN1YmJhbmRzPVtnXTtlbHNle3ZhciB2PTE8PHMtbCsxLHk9W107KGc9e30pLnR5cGU9IkhMIixnLnRieDA9TWF0aC5jZWlsKG8udGN4MC92LS41KSxnLnRieTA9TWF0aC5jZWlsKG8udGN5MC92KSxnLnRieDE9TWF0aC5jZWlsKG8udGN4MS92LS41KSxnLnRieTE9TWF0aC5jZWlsKG8udGN5MS92KSxnLnJlc29sdXRpb249aCxrKDAsZyxmKSx1LnB1c2goZykseS5wdXNoKGcpLChnPXt9KS50eXBlPSJMSCIsZy50YngwPU1hdGguY2VpbChvLnRjeDAvdiksZy50YnkwPU1hdGguY2VpbChvLnRjeTAvdi0uNSksZy50YngxPU1hdGguY2VpbChvLnRjeDEvdiksZy50YnkxPU1hdGguY2VpbChvLnRjeTEvdi0uNSksZy5yZXNvbHV0aW9uPWgsaygwLGcsZiksdS5wdXNoKGcpLHkucHVzaChnKSwoZz17fSkudHlwZT0iSEgiLGcudGJ4MD1NYXRoLmNlaWwoby50Y3gwL3YtLjUpLGcudGJ5MD1NYXRoLmNlaWwoby50Y3kwL3YtLjUpLGcudGJ4MT1NYXRoLmNlaWwoby50Y3gxL3YtLjUpLGcudGJ5MT1NYXRoLmNlaWwoby50Y3kxL3YtLjUpLGcucmVzb2x1dGlvbj1oLGsoMCxnLGYpLHUucHVzaChnKSx5LnB1c2goZyksaC5zdWJiYW5kcz15fX1vLnJlc29sdXRpb25zPWMsby5zdWJiYW5kcz11fXZhciBtPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChtKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHgoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBPKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgQShlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IEMoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBGKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHAoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KG0pKX19ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgYSxvPTAscz0wLGM9ITE7ZnVuY3Rpb24gdShlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssYz8oYT1hPDw3fG4scys9NyxjPSExKTooYT1hPDw4fG4scys9OCksMjU1PT09biYmKGM9ITApfXJldHVybiBhPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGMmJihvKyssYz0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT11KDEpKXJldHVybiAxO2lmKDA9PT11KDEpKXJldHVybiAyO3ZhciBlPXUoMik7cmV0dXJuIGU8Mz9lKzM6KGU9dSg1KSk8MzE/ZSs2OihlPXUoNykpKzM3fWZvcih2YXIgZz1lLmN1cnJlbnRUaWxlLmluZGV4LHY9ZS50aWxlc1tnXSx5PWUuQ09ELnNvcE1hcmtlclVzZWQsbT1lLkNPRC5lcGhNYXJrZXJVc2VkLGI9di5wYWNrZXRzSXRlcmF0b3I7bzxuOyl7aCgpLHkmJmwoMTQ1KSYmZig0KTt2YXIgdz1iLm5leHRQYWNrZXQoKTtpZih1KDEpKXtmb3IodmFyIGs9dy5sYXllck51bWJlcixTPVtdLHg9dm9pZCAwLE89MCxBPXcuY29kZWJsb2Nrcy5sZW5ndGg7TzxBO08rKyl7dmFyIEM9KHg9dy5jb2RlYmxvY2tzW09dKS5wcmVjaW5jdCxGPXguY2J4LUMuY2J4TWluLFA9eC5jYnktQy5jYnlNaW4sVD0hMSxJPSExLEU9dm9pZCAwO2lmKHZvaWQgMCE9PXguaW5jbHVkZWQpVD0hIXUoMSk7ZWxzZXt2YXIgaj12b2lkIDA7aWYodm9pZCAwIT09KEM9eC5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlqPUMuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBNPUMuY2J4TWF4LUMuY2J4TWluKzEsXz1DLmNieU1heC1DLmNieU1pbisxO2o9bmV3IFUoTSxfLGspLEU9bmV3IEIoTSxfKSxDLmluY2x1c2lvblRyZWU9aixDLnplcm9CaXRQbGFuZXNUcmVlPUU7Zm9yKHZhciBMPTA7TDxrO0wrKylpZigwIT09dSgxKSl0aHJvdyBuZXcgcCgiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGoucmVzZXQoRixQLGspKWZvcig7Oyl7aWYoIXUoMSkpe2ouaW5jcmVtZW50VmFsdWUoayk7YnJlYWt9aWYoIWoubmV4dExldmVsKCkpe3guaW5jbHVkZWQ9ITAsVD1JPSEwO2JyZWFrfX19aWYoVCl7aWYoSSl7Zm9yKChFPUMuemVyb0JpdFBsYW5lc1RyZWUpLnJlc2V0KEYsUCk7OylpZih1KDEpKXtpZighRS5uZXh0TGV2ZWwoKSlicmVha31lbHNlIEUuaW5jcmVtZW50VmFsdWUoKTt4Lnplcm9CaXRQbGFuZXM9RS52YWx1ZX1mb3IodmFyIFI9ZCgpO3UoMSk7KXguTGJsb2NrKys7dmFyIE49KDAsaS5sb2cyKShSKSxEPXUoKFI8MTw8Tj9OLTE6TikreC5MYmxvY2spO1MucHVzaCh7Y29kZWJsb2NrOngsY29kaW5ncGFzc2VzOlIsZGF0YUxlbmd0aDpEfSl9fWZvcihoKCksbSYmbCgxNDYpO1MubGVuZ3RoPjA7KXt2YXIgJD1TLnNoaWZ0KCk7dm9pZCAwPT09KHg9JC5jb2RlYmxvY2spLmRhdGEmJih4LmRhdGE9W10pLHguZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citvLGVuZDpyK28rJC5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczokLmNvZGluZ3Bhc3Nlc30pLG8rPSQuZGF0YUxlbmd0aH19fXJldHVybiBvfWZ1bmN0aW9uIGooZSx0LHIsbixhLGkscyxjLHUpe2Zvcih2YXIgbD1uLnRieDAsZj1uLnRieTAsaD1uLnRieDEtbi50YngwLGQ9bi5jb2RlYmxvY2tzLHA9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAsZz0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCx2PTAseT1kLmxlbmd0aDt2PHk7Kyt2KXt2YXIgbT1kW3ZdLGI9bS50YngxXy1tLnRieDBfLHc9bS50YnkxXy1tLnRieTBfO2lmKDAhPT1iJiYwIT09dyYmdm9pZCAwIT09bS5kYXRhKXt2YXIgaz1uZXcgJChiLHcsbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMsaSksUz0yLHg9bS5kYXRhLE89MCxBPTAsQz12b2lkIDAsRj12b2lkIDAsUD12b2lkIDA7Zm9yKEM9MCxGPXgubGVuZ3RoO0M8RjtDKyspTys9KFA9eFtDXSkuZW5kLVAuc3RhcnQsQSs9UC5jb2RpbmdwYXNzZXM7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoTyksST0wO2ZvcihDPTAsRj14Lmxlbmd0aDtDPEY7QysrKXt2YXIgRT0oUD14W0NdKS5kYXRhLnN1YmFycmF5KFAuc3RhcnQsUC5lbmQpO1Quc2V0KEUsSSksSSs9RS5sZW5ndGh9dmFyIGo9bmV3IG8uQXJpdGhtZXRpY0RlY29kZXIoVCwwLE8pO2ZvcihrLnNldERlY29kZXIoaiksQz0wO0M8QTtDKyspe3N3aXRjaChTKXtjYXNlIDA6ay5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6ay5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjprLnJ1bkNsZWFudXBQYXNzKCksYyYmay5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfXUmJmsucmVzZXQoKSxTPShTKzEpJTN9dmFyIE09bS50YngwXy1sKyhtLnRieTBfLWYpKmgsXz1rLmNvZWZmaWNlbnRzU2lnbixMPWsuY29lZmZpY2VudHNNYWduaXR1ZGUsUj1rLmJpdHNEZWNvZGVkLE49cz8wOi41LEQ9dm9pZCAwLEI9dm9pZCAwLFU9dm9pZCAwO0k9MDt2YXIgWD0iTEwiIT09bi50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7dmFyIEg9MiooTS9ofDApKih0LWgpK3ArZztmb3IoRD0wO0Q8YjtEKyspe2lmKDAhPT0oQj1MW0ldKSlCPShCK04pKmEsMCE9PV9bSV0mJihCPS1CKSxVPVJbSV0sZVtYP0grKE08PDEpOk1dPXMmJlU+PWk/QjpCKigxPDxpLVUpO00rKyxJKyt9TSs9aC1ifX19fWZ1bmN0aW9uIE0oZSx0LHIpe2Zvcih2YXIgbj10LmNvbXBvbmVudHNbcl0sYT1uLmNvZGluZ1N0eWxlUGFyYW1ldGVycyxpPW4ucXVhbnRpemF0aW9uUGFyYW1ldGVycyxvPWEuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LHM9aS5TUHFjZHMsYz1pLnNjYWxhckV4cG91bmRlZCx1PWkuZ3VhcmRCaXRzLGw9YS5zZWdtZW50YXRpb25TeW1ib2xVc2VkLGY9YS5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzLGg9ZS5jb21wb25lbnRzW3JdLnByZWNpc2lvbixkPWEucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uLHA9ZD9uZXcgcTpuZXcgSCx2PVtdLHk9MCxtPTA7bTw9bzttKyspe2Zvcih2YXIgYj1uLnJlc29sdXRpb25zW21dLHc9Yi50cngxLWIudHJ4MCxrPWIudHJ5MS1iLnRyeTAsUz1uZXcgRmxvYXQzMkFycmF5KHcqaykseD0wLE89Yi5zdWJiYW5kcy5sZW5ndGg7eDxPO3grKyl7dmFyIEE9dm9pZCAwLEM9dm9pZCAwO2M/KEE9c1t5XS5tdSxDPXNbeV0uZXBzaWxvbix5KyspOihBPXNbMF0ubXUsQz1zWzBdLmVwc2lsb24rKG0+MD8xLW06MCkpO3ZhciBGPWIuc3ViYmFuZHNbeF0sUD1nW0YudHlwZV07aihTLHcsMCxGLGQ/MTpNYXRoLnBvdygyLGgrUC1DKSooMStBLzIwNDgpLHUrQy0xLGQsbCxmKX12LnB1c2goe3dpZHRoOncsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBUPXAuY2FsY3VsYXRlKHYsbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6VC53aWR0aCxoZWlnaHQ6VC5oZWlnaHQsaXRlbXM6VC5pdGVtc319ZnVuY3Rpb24gXyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5KcHhJbWFnZT12O3ZhciBMLFIsTixELEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dSh0aGlzLGUpO3ZhciBuPSgwLGkubG9nMikoTWF0aC5tYXgodCxyKSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgbz17d2lkdGg6dCxoZWlnaHQ6cixpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChvKSx0PU1hdGguY2VpbCh0LzIpLHI9TWF0aC5jZWlsKHIvMil9fXJldHVybiBjKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPTAsYT0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGk9ZSt0KihyPXRoaXMubGV2ZWxzW25dKS53aWR0aDtpZih2b2lkIDAhPT1yLml0ZW1zW2ldKXthPXIuaXRlbXNbaV07YnJlYWt9ci5pbmRleD1pLGU+Pj0xLHQ+Pj0xLG4rK31uLS0sKHI9dGhpcy5sZXZlbHNbbl0pLml0ZW1zW3IuaW5kZXhdPWEsdGhpcy5jdXJyZW50TGV2ZWw9bixkZWxldGUgdGhpcy52YWx1ZX19LHtrZXk6ImluY3JlbWVudFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9fSx7a2V5OiJuZXh0TGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuLS1lPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsKHQ9dGhpcy5sZXZlbHNbZV0pLml0ZW1zW3QuaW5kZXhdPXIsITApfX1dKSxlfSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt1KHRoaXMsZSk7dmFyIGE9KDAsaS5sb2cyKShNYXRoLm1heCh0LHIpKSsxO3RoaXMubGV2ZWxzPVtdO2Zvcih2YXIgbz0wO288YTtvKyspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSh0KnIpLGM9MCxsPXMubGVuZ3RoO2M8bDtjKyspc1tjXT1uO3ZhciBmPXt3aWR0aDp0LGhlaWdodDpyLGl0ZW1zOnN9O3RoaXMubGV2ZWxzLnB1c2goZiksdD1NYXRoLmNlaWwodC8yKSxyPU1hdGguY2VpbChyLzIpfX1yZXR1cm4gYyhlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7dmFyIGE9dGhpcy5sZXZlbHNbbl0saT1lK3QqYS53aWR0aDthLmluZGV4PWk7dmFyIG89YS5pdGVtc1tpXTtpZigyNTU9PT1vKWJyZWFrO2lmKG8+cilyZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bix0aGlzLnByb3BhZ2F0ZVZhbHVlcygpLCExO2U+Pj0xLHQ+Pj0xLG4rK31yZXR1cm4gdGhpcy5jdXJyZW50TGV2ZWw9bi0xLCEwfX0se2tleToiaW5jcmVtZW50VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfX0se2tleToicHJvcGFnYXRlVmFsdWVzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdLHI9dC5pdGVtc1t0LmluZGV4XTstLWU+PTA7KSh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yfX0se2tleToibmV4dExldmVsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybiB0Lml0ZW1zW3QuaW5kZXhdPTI1NSwhKC0tZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSwodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09ciwwKSl9fV0pLGV9KCksJD0oTD0xNyxSPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLE49bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSksRD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpKXt2YXIgbzt1KHRoaXMsZSksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsbz0iSEgiPT09bj9EOiJITCI9PT1uP046Uix0aGlzLmNvbnRleHRMYWJlbFRhYmxlPW87dmFyIHMsYz10KnI7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkoYyksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkoYykscz1pPjE0P25ldyBVaW50MzJBcnJheShjKTppPjY/bmV3IFVpbnQxNkFycmF5KGMpOm5ldyBVaW50OEFycmF5KGMpLHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9cyx0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShjKTt2YXIgbD1uZXcgVWludDhBcnJheShjKTtpZigwIT09YSlmb3IodmFyIGY9MDtmPGM7ZisrKWxbZl09YTt0aGlzLmJpdHNEZWNvZGVkPWwsdGhpcy5yZXNldCgpfXJldHVybiBjKGUsW3trZXk6InNldERlY29kZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1sxN109OTIsdGhpcy5jb250ZXh0c1sxOF09Nn19LHtrZXk6InNldE5laWdoYm9yc1NpZ25pZmljYW5jZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLndpZHRoLG89dGhpcy5oZWlnaHQscz10PjAsYz10KzE8aTtlPjAmJihuPXItaSxzJiYoYVtuLTFdKz0xNiksYyYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLGUrMTxvJiYobj1yK2kscyYmKGFbbi0xXSs9MTYpLGMmJihhW24rMV0rPTE2KSxhW25dKz00KSxzJiYoYVtyLTFdKz0xKSxjJiYoYVtyKzFdKz0xKSxhW3JdfD0xMjh9fSx7a2V5OiJydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSx1PXRoaXMuYml0c0RlY29kZWQsbD0wO2w8cjtsKz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPWwqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPWwrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgZz1jW2lbaF1dO2lmKGUucmVhZEJpdChzLGcpKXt2YXIgdj10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09dixuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9dVtoXSsrLG9baF18PTF9fX19LHtrZXk6ImRlY29kZVNpZ25CaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGMsdT10aGlzLndpZHRoLGw9dGhpcy5oZWlnaHQsZj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGg9dGhpcy5jb2VmZmljZW50c1NpZ247bz10PjAmJjAhPT1mW3ItMV0sdCsxPHUmJjAhPT1mW3IrMV0/KGk9aFtyKzFdLG49bz8xLWktKGE9aFtyLTFdKToxLWktaSk6bj1vPzEtKGE9aFtyLTFdKS1hOjA7dmFyIGQ9MypuO3JldHVybiBvPWU+MCYmMCE9PWZbci11XSxlKzE8bCYmMCE9PWZbcit1XT8oaT1oW3IrdV0sbj1vPzEtaS0oYT1oW3ItdV0pK2Q6MS1pLWkrZCk6bj1vPzEtKGE9aFtyLXVdKS1hK2Q6ZCxuPj0wPyhzPTkrbixjPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpOihzPTktbixjPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyxzKSksY319LHtrZXk6InJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsaT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxvPXRoaXMuY29udGV4dHMscz10aGlzLmJpdHNEZWNvZGVkLGM9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsdT1yKm4sbD00KnIsZj0wO2Y8dTtmPWUpe2U9TWF0aC5taW4odSxmK2wpO2Zvcih2YXIgaD0wO2g8cjtoKyspZm9yKHZhciBkPWYraDtkPGU7ZCs9cilpZihhW2RdJiYwPT0oMSZjW2RdKSl7dmFyIHA9MTY7MCE9KDImY1tkXSkmJihjW2RdXj0yLHA9MD09KDEyNyZpW2RdKT8xNToxNCk7dmFyIGc9dC5yZWFkQml0KG8scCk7YVtkXT1hW2RdPDwxfGcsc1tkXSsrLGNbZF18PTF9fX19LHtrZXk6InJ1bkNsZWFudXBQYXNzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsdT10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIGc9cCpyLHY9cCszPG4seT0wO3k8cjt5Kyspe3ZhciBtPWcreSxiPTAsdz1tLGs9cCxTPXZvaWQgMDtpZih2JiYwPT09bFttXSYmMD09PWxbbStmXSYmMD09PWxbbStoXSYmMD09PWxbbStkXSYmMD09PWFbbV0mJjA9PT1hW20rZl0mJjA9PT1hW20raF0mJjA9PT1hW20rZF0pe2lmKCF0LnJlYWRCaXQocywxOCkpe3VbbV0rKyx1W20rZl0rKyx1W20raF0rKyx1W20rZF0rKztjb250aW51ZX0wIT0oYj10LnJlYWRCaXQocyxMKTw8MXx0LnJlYWRCaXQocyxMKSkmJihrPXArYix3Kz1iKnIpLFM9dGhpcy5kZWNvZGVTaWduQml0KGsseSx3KSxvW3ddPVMsaVt3XT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsseSx3KSxsW3ddfD0yLHc9bTtmb3IodmFyIHg9cDt4PD1rO3grKyx3Kz1yKXVbd10rKztiKyt9Zm9yKGs9cCtiO2s8ZTtrKyssdys9cilpZighaVt3XSYmMD09KDEmbFt3XSkpe3ZhciBPPWNbYVt3XV07MT09PXQucmVhZEJpdChzLE8pJiYoUz10aGlzLmRlY29kZVNpZ25CaXQoayx5LHcpLG9bd109UyxpW3ddPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2Uoayx5LHcpLGxbd118PTIpLHVbd10rK319fX19LHtrZXk6ImNoZWNrU2VnbWVudGF0aW9uU3ltYm9sIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMuY29udGV4dHM7aWYoMTAhPShlLnJlYWRCaXQodCxMKTw8M3xlLnJlYWRCaXQodCxMKTw8MnxlLnJlYWRCaXQodCxMKTw8MXxlLnJlYWRCaXQodCxMKSkpdGhyb3cgbmV3IHAoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1dKSxlfSgpKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIFRyYW5zZm9ybS4iKX1yZXR1cm4gYyhlLFt7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dC0xLGE9dCsxLGk9dCtyLTIsbz10K3I7ZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuXT1lW2FdLGVbb109ZVtpXX19LHtrZXk6ImZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGZpbHRlcmAgY2FsbGVkIil9fSx7a2V5OiJpdGVyYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgYSxpLG8scyxjLHUsbD1lLndpZHRoLGY9ZS5oZWlnaHQsaD1lLml0ZW1zLGQ9dC53aWR0aCxwPXQuaGVpZ2h0LGc9dC5pdGVtcztmb3Iobz0wLGE9MDthPGY7YSsrKWZvcihzPTIqYSpkLGk9MDtpPGw7aSsrLG8rKyxzKz0yKWdbc109aFtvXTtoPWUuaXRlbXM9bnVsbDt2YXIgdj1uZXcgRmxvYXQzMkFycmF5KGQrOCk7aWYoMT09PWQpe2lmKDAhPSgxJnIpKWZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZClnW29dKj0uNX1lbHNlIGZvcih1PTAsbz0wO3U8cDt1Kyssbys9ZCl2LnNldChnLnN1YmFycmF5KG8sbytkKSw0KSx0aGlzLmV4dGVuZCh2LDQsZCksdGhpcy5maWx0ZXIodiw0LGQpLGcuc2V0KHYuc3ViYXJyYXkoNCw0K2QpLG8pO3ZhciB5PTE2LG09W107Zm9yKGE9MDthPHk7YSsrKW0ucHVzaChuZXcgRmxvYXQzMkFycmF5KHArOCkpO3ZhciBiLHc9MDtpZihlPTQrcCwxPT09cCl7aWYoMCE9KDEmbikpZm9yKGM9MDtjPGQ7YysrKWdbY10qPS41fWVsc2UgZm9yKGM9MDtjPGQ7YysrKXtpZigwPT09dyl7Zm9yKHk9TWF0aC5taW4oZC1jLHkpLG89YyxzPTQ7czxlO28rPWQscysrKWZvcihiPTA7Yjx5O2IrKyltW2JdW3NdPWdbbytiXTt3PXl9dmFyIGs9bVstLXddO2lmKHRoaXMuZXh0ZW5kKGssNCxwKSx0aGlzLmZpbHRlcihrLDQscCksMD09PXcpZm9yKG89Yy15KzEscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8eTtiKyspZ1tvK2JdPW1bYl1bc119cmV0dXJue3dpZHRoOmQsaGVpZ2h0OnAsaXRlbXM6Z319fV0pLGV9KCksSD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzPXI+PjEsYz0tMS41ODYxMzQzNDIwNTk5MjQsdT0tLjA1Mjk4MDExODU3Mjk2MSxsPS44ODI5MTEwNzU1MzA5MzQsZj0uNDQzNTA2ODUyMDQzOTcxLGg9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKG49KHR8PTApLTMsYT1zKzQ7YS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGk9ZiplWyhuPXQtMiktMV0sYT1zKzM7YS0tJiYobz1mKmVbbisxXSxlW25dPWgqZVtuXS1pLW8sYS0tKTtuKz0yKWk9ZiplWyhuKz0yKSsxXSxlW25dPWgqZVtuXS1pLW87Zm9yKGk9bCplWyhuPXQtMSktMV0sYT1zKzI7YS0tJiYobz1sKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9bCplWyhuKz0yKSsxXSxlW25dLT1pK287Zm9yKGk9dSplWyhuPXQpLTFdLGE9cysxO2EtLSYmKG89dSplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPXUqZVsobis9MikrMV0sZVtuXS09aStvO2lmKDAhPT1zKWZvcihpPWMqZVsobj10KzEpLTFdLGE9czthLS0mJihvPWMqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT1jKmVbKG4rPTIpKzFdLGVbbl0tPWkrb319XSkscn0oWCkscT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhyLFt7a2V5OiJmaWx0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9cj4+MTtmb3Iobj10fD0wLGE9aSsxO2EtLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsYT1pO2EtLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fV0pLHJ9KFgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBpPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LG8oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmNhY2hlZERhdGE9MCxuLmJpdHNDYWNoZWQ9MDtmb3IodmFyIGE9NDA5NixpPXtlYXJseUNoYW5nZTpyLGNvZGVMZW5ndGg6OSxuZXh0Q29kZToyNTgsZGljdGlvbmFyeVZhbHVlczpuZXcgVWludDhBcnJheShhKSxkaWN0aW9uYXJ5TGVuZ3RoczpuZXcgVWludDE2QXJyYXkoYSksZGljdGlvbmFyeVByZXZDb2RlczpuZXcgVWludDE2QXJyYXkoYSksY3VycmVudFNlcXVlbmNlOm5ldyBVaW50OEFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDowfSxvPTA7bzwyNTY7KytvKWkuZGljdGlvbmFyeVZhbHVlc1tvXT1vLGkuZGljdGlvbmFyeUxlbmd0aHNbb109MTtyZXR1cm4gbi5sendTdGF0ZT1pLG59cmV0dXJuIHQ9bCwocj1be2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmJpdHNDYWNoZWQscj10aGlzLmNhY2hlZERhdGE7dDxlOyl7dmFyIG49dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09bilyZXR1cm4gdGhpcy5lb2Y9ITAsbnVsbDtyPXI8PDh8bix0Kz04fXJldHVybiB0aGlzLmJpdHNDYWNoZWQ9dC09ZSx0aGlzLmNhY2hlZERhdGE9cix0aGlzLmxhc3RDb2RlPW51bGwscj4+PnQmKDE8PGUpLTF9fSx7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49MTAyNCxhPXRoaXMubHp3U3RhdGU7aWYoYSl7dmFyIGk9YS5lYXJseUNoYW5nZSxvPWEubmV4dENvZGUscz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLHU9YS5kaWN0aW9uYXJ5UHJldkNvZGVzLGw9YS5jb2RlTGVuZ3RoLGY9YS5wcmV2Q29kZSxoPWEuY3VycmVudFNlcXVlbmNlLGQ9YS5jdXJyZW50U2VxdWVuY2VMZW5ndGgscD0wLGc9dGhpcy5idWZmZXJMZW5ndGgsdj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtuKTtmb3IoZT0wO2U8NTEyO2UrKyl7dmFyIHk9dGhpcy5yZWFkQml0cyhsKSxtPWQ+MDtpZih5PDI1NiloWzBdPXksZD0xO2Vsc2V7aWYoISh5Pj0yNTgpKXtpZigyNTY9PT15KXtsPTksbz0yNTgsZD0wO2NvbnRpbnVlfXRoaXMuZW9mPSEwLGRlbGV0ZSB0aGlzLmx6d1N0YXRlO2JyZWFrfWlmKHk8bylmb3IodD0oZD1jW3ldKS0xLHI9eTt0Pj0wO3QtLSloW3RdPXNbcl0scj11W3JdO2Vsc2UgaFtkKytdPWhbMF19aWYobSYmKHVbb109ZixjW29dPWNbZl0rMSxzW29dPWhbMF0sbD0rK28raSZvK2ktMT9sOjB8TWF0aC5taW4oTWF0aC5sb2cobytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksZj15LG48KHArPWQpKXtkb3tuKz01MTJ9d2hpbGUobjxwKTt2PXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxkO3QrKyl2W2crK109aFt0XX1hLm5leHRDb2RlPW8sYS5jb2RlTGVuZ3RoPWwsYS5wcmV2Q29kZT1mLGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWQsdGhpcy5idWZmZXJMZW5ndGg9Z319fV0pJiZhKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGx9KHIoMTQ4KS5EZWNvZGVTdHJlYW0pO3QuTFpXU3RyZWFtPXN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIGE9cigxNDgpLGk9cigxMzQpLG89cigyKTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYyhlLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBsKGUpfWZ1bmN0aW9uIGwoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9dmFyIGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX0oZCxlKTt2YXIgdCxyLG4sYSxoPShuPWQsYT1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCksZnVuY3Rpb24oKXt2YXIgZSx0PWYobik7aWYoYSl7dmFyIHI9Zih0aGlzKS5jb25zdHJ1Y3RvcjtlPVJlZmxlY3QuY29uc3RydWN0KHQsYXJndW1lbnRzLHIpfWVsc2UgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdSh0aGlzLGUpfSk7ZnVuY3Rpb24gZChlLHQscil7dmFyIG47aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSxuPWguY2FsbCh0aGlzLHQpLCEociBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIHUobixlKTt2YXIgYT1uLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gdShuLGUpO2lmKDIhPT1hJiYoYTwxMHx8YT4xNSkpdGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoYSkpO24ucmVhZEJsb2NrPTI9PT1hP24ucmVhZEJsb2NrVGlmZjpuLnJlYWRCbG9ja1BuZyxuLnN0cj1lLG4uZGljdD1lLmRpY3Q7dmFyIHM9bi5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLGM9bi5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsZj1uLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gbi5waXhCeXRlcz1zKmMrNz4+MyxuLnJvd0J5dGVzPWYqcypjKzc+PjMsdShuLGwobikpfXJldHVybiB0PWQsKHI9W3trZXk6InJlYWRCbG9ja1RpZmYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxuPXRoaXMuYml0cyxhPXRoaXMuY29sb3JzLGk9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IWkubGVuZ3RoLCF0aGlzLmVvZil7dmFyIG8scz0wLGM9MCx1PTAsbD0wLGY9dDtpZigxPT09biYmMT09PWEpZm9yKG89MDtvPGU7KytvKXt2YXIgaD1pW29dXnM7aF49aD4+MSxoXj1oPj4yLHM9KDEmKGhePWg+PjQpKTw8NyxyW2YrK109aH1lbHNlIGlmKDg9PT1uKXtmb3Iobz0wO288YTsrK28pcltmKytdPWlbb107Zm9yKDtvPGU7KytvKXJbZl09cltmLWFdK2lbb10sZisrfWVsc2UgaWYoMTY9PT1uKXt2YXIgZD0yKmE7Zm9yKG89MDtvPGQ7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlO28rPTIpe3ZhciBwPSgoMjU1Jmlbb10pPDw4KSsoMjU1JmlbbysxXSkrKCgyNTUmcltmLWRdKTw8OCkrKDI1NSZyW2YtZCsxXSk7cltmKytdPXA+PjgmMjU1LHJbZisrXT0yNTUmcH19ZWxzZXt2YXIgZz1uZXcgVWludDhBcnJheShhKzEpLHY9KDE8PG4pLTEseT0wLG09dCxiPXRoaXMuY29sdW1ucztmb3Iobz0wO288YjsrK28pZm9yKHZhciB3PTA7dzxhOysrdyl1PG4mJihzPXM8PDh8MjU1JmlbeSsrXSx1Kz04KSxnW3ddPWdbd10rKHM+PnUtbikmdix1LT1uLGM9Yzw8bnxnW3ddLChsKz1uKT49OCYmKHJbbSsrXT1jPj5sLTgmMjU1LGwtPTgpO2w+MCYmKHJbbSsrXT0oYzw8OC1sKSsocyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fX0se2tleToicmVhZEJsb2NrUG5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLCF0aGlzLmVvZil7dmFyIGE9dGhpcy5idWZmZXJMZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihhK2UpLHM9aS5zdWJhcnJheShhLWUsYSk7MD09PXMubGVuZ3RoJiYocz1uZXcgVWludDhBcnJheShlKSk7dmFyIGMsdSxsLGY9YTtzd2l0Y2gocil7Y2FzZSAwOmZvcihjPTA7YzxlOysrYylpW2YrK109bltjXTticmVhaztjYXNlIDE6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT1uW2NdO2Zvcig7YzxlOysrYylpW2ZdPWlbZi10XStuW2NdJjI1NSxmKys7YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxlOysrYylpW2YrK109c1tjXStuW2NdJjI1NTticmVhaztjYXNlIDM6Zm9yKGM9MDtjPHQ7KytjKWlbZisrXT0oc1tjXT4+MSkrbltjXTtmb3IoO2M8ZTsrK2MpaVtmXT0oc1tjXStpW2YtdF0+PjEpK25bY10mMjU1LGYrKzticmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXU9c1tjXSxsPW5bY10saVtmKytdPXUrbDtmb3IoO2M8ZTsrK2Mpe3U9c1tjXTt2YXIgaD1zW2MtdF0sZD1pW2YtdF0scD1kK3UtaCxnPXAtZDtnPDAmJihnPS1nKTt2YXIgdj1wLXU7djwwJiYodj0tdik7dmFyIHk9cC1oO3k8MCYmKHk9LXkpLGw9bltjXSxpW2YrK109Zzw9diYmZzw9eT9kK2w6djw9eT91K2w6aCtsfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQocikpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX19XSkmJnModC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZH0oYS5EZWNvZGVTdHJlYW0pO3QuUHJlZGljdG9yU3RyZWFtPWh9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZpKGUsdCl9KGwsZSk7dmFyIHQscixzLGMsdT0ocz1sLGM9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1vKHMpO2lmKGMpe3ZhciByPW8odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGwoZSx0KXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwocj11LmNhbGwodGhpcyx0KSkuc3RyPWUsci5kaWN0PWUuZGljdCxyfXJldHVybiB0PWwsKHI9W3trZXk6InJlYWRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5SdW5MZW5ndGhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnQ9dC5FcnJvckZvbnQ9dm9pZCAwO3ZhciBuPXIoMiksYT1yKDE2NCksaT1yKDE2Nyksbz1yKDE2OSkscz1yKDE2OCksYz1yKDE2NiksdT1yKDE3MCksbD1yKDE3MSksZj1yKDE3MiksaD1yKDE3MyksZD1yKDE3NCkscD1yKDE3NSksZz1yKDE0NSksdj1yKDE3NikseT1yKDEzNSksbT1yKDEzOSksYj1yKDE3Nyk7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxTKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBrKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1TKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB4KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/eChlLHQpOnZvaWQgMH19ZnVuY3Rpb24geChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE8oZSl7cmV0dXJuIE89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LE8oZSl9ZnVuY3Rpb24gQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PU8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1PKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBGKGUsdCxyKXtyZXR1cm4gdCYmQyhlLnByb3RvdHlwZSx0KSxyJiZDKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgUD1bWzU3MzQ0LDYzNzQzXSxbMTA0ODU3NiwxMTE0MTA5XV0sVD0xZTMsST1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiZm9udFR5cGUiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJ0eXBlIiwidmVydGljYWwiXSxFPVsiY01hcCIsImRlZmF1bHRFbmNvZGluZyIsImRpZmZlcmVuY2VzIiwiaXNNb25vc3BhY2UiLCJpc1NlcmlmRm9udCIsImlzU3ltYm9saWNGb250Iiwic2VhY01hcCIsInRvRm9udENoYXIiLCJ0b1VuaWNvZGUiLCJ2bWV0cmljcyIsIndpZHRocyJdO2Z1bmN0aW9uIGooZSl7aWYoZS5mb250TWF0cml4JiZlLmZvbnRNYXRyaXhbMF0hPT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXt2YXIgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxyPWUud2lkdGhzO2Zvcih2YXIgYSBpbiByKXJbYV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9fWZ1bmN0aW9uIE0oZSl7aWYoZS5mYWxsYmFja1RvVW5pY29kZSYmIShlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXApKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMocil8fCh0W3JdPWUuZmFsbGJhY2tUb1VuaWNvZGVbcl0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSxpLG8scyxjLHUpe0EodGhpcyxlKSx0aGlzLm9yaWdpbmFsQ2hhckNvZGU9dCx0aGlzLmZvbnRDaGFyPXIsdGhpcy51bmljb2RlPW4sdGhpcy5hY2NlbnQ9YSx0aGlzLndpZHRoPWksdGhpcy52bWV0cmljPW8sdGhpcy5vcGVyYXRvckxpc3RJZD1zLHRoaXMuaXNTcGFjZT1jLHRoaXMuaXNJbkZvbnQ9dX1yZXR1cm4gRihlLFt7a2V5OiJjYXRlZ29yeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxvLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX0se2tleToibm9ybWFsaXplZFVuaWNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJub3JtYWxpemVkVW5pY29kZSIsKDAsby5yZXZlcnNlSWZSdGwpKGUuX05vcm1hbGl6ZWRVbmljb2Rlc1t0aGlzLnVuaWNvZGVdfHx0aGlzLnVuaWNvZGUpLCEwKX19XSxbe2tleToiX05vcm1hbGl6ZWRVbmljb2RlcyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9Ob3JtYWxpemVkVW5pY29kZXMiLCgwLG8uZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpKX19XSksZX0oKTtmdW5jdGlvbiBMKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gUihlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBOKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIEQoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGU+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gJChlLHQpe2Zvcih2YXIgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gWChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLHM9ZS5sZW5ndGg7aTxzO2krKyktMSE9PShuPSgwLG8uZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBjIGluIHIpLTEhPT0obj0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkocltjXSx0KSkmJihhWytjXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBIKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX12YXIgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIHEoZSx0LHIsYSl7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPW5ldyBNYXAscz1bXSxjPW5ldyBTZXQsdT0wLGw9UFt1XVswXSxmPWwsaD1QW3VdWzFdO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2R8PTBdO2lmKHQocCkpe2lmKGY+aCl7aWYoKyt1Pj1QLmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Zj1QW3VdWzBdLGg9UFt1XVsxXX12YXIgZz1mKys7MD09PXAmJihwPXIpO3ZhciB2PWEuZ2V0KGQpOyJzdHJpbmciPT10eXBlb2YgdiYmKHY9di5jb2RlUG9pbnRBdCgwKSksdiYmdjxsJiYhYy5oYXMocCkmJihvLnNldCh2LHApLGMuYWRkKHApKSxpW2ddPXAsc1tkXT1nfX1yZXR1cm57dG9Gb250Q2hhcjpzLGNoYXJDb2RlVG9HbHlwaElkOmksdG9Vbmljb2RlRXh0cmFNYXA6byxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmZ9fWZ1bmN0aW9uIEcoZSx0LHIpe3ZhciBhLGksbyxzLGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8YSxnbHlwaElkOmVbYV19KTtpZih0KXt2YXIgaSxvPWsodCk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz13KGkudmFsdWUsMiksYz1zWzBdLHU9c1sxXTt1Pj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTpjLGdseXBoSWQ6dX0pfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19MD09PW4ubGVuZ3RoJiZuLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLG4uc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBsPVtdLGY9bi5sZW5ndGgsaD0wO2g8Zjspe3ZhciBkPW5baF0uZm9udENoYXJDb2RlLHA9W25baF0uZ2x5cGhJZF07KytoO2Zvcih2YXIgZz1kO2g8ZiYmZysxPT09bltoXS5mb250Q2hhckNvZGUmJihwLnB1c2gobltoXS5nbHlwaElkKSwrK2gsNjU1MzUhPSsrZyk7KTtsLnB1c2goW2QsZyxwXSl9cmV0dXJuIGx9KGUsdCxyKSx1PWMuYXQoLTEpWzFdPjY1NTM1PzI6MSxsPSJcMFwwIitEKHUpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCp1KTtmb3IoYT1jLmxlbmd0aC0xO2E+PTAmJiEoY1thXVswXTw9NjU1MzUpOy0tYSk7dmFyIGY9YSsxO2NbYV1bMF08NjU1MzUmJjY1NTM1PT09Y1thXVsxXSYmKGNbYV1bMV09NjU1MzQpO3ZhciBoLGQscCxnLHk9Y1thXVsxXTw2NTUzNT8xOjAsbT1mK3ksYj12Lk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG0sMiksUz0iIix4PSIiLE89IiIsQT0iIixDPSIiLEY9MDtmb3IoYT0wLGk9ZjthPGk7YSsrKXtkPShoPWNbYV0pWzBdLHA9aFsxXSxTKz1EKGQpLHgrPUQocCk7dmFyIFA9ITA7Zm9yKG89MSxzPShnPWhbMl0pLmxlbmd0aDtvPHM7KytvKWlmKGdbb10hPT1nW28tMV0rMSl7UD0hMTticmVha31pZihQKU8rPUQoZ1swXS1kJjY1NTM1KSxBKz1EKDApO2Vsc2V7dmFyIFQ9MioobS1hKSsyKkY7Zm9yKEYrPXAtZCsxLE8rPUQoMCksQSs9RChUKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKUMrPUQoZ1tvXSl9fXk+MCYmKHgrPSLDv8O/IixTKz0iw7/DvyIsTys9IlwwASIsQSs9IlwwXDAiKTt2YXIgST0iXDBcMCIrRCgyKm0pK0QoYi5yYW5nZSkrRChiLmVudHJ5KStEKGIucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytPK0ErQyxFPSIiLGo9IiI7aWYodT4xKXtmb3IobCs9IlwwA1wwXG4iKygwLG4uc3RyaW5nMzIpKDQrOCp1KzQrSS5sZW5ndGgpLEU9IiIsYT0wLGk9Yy5sZW5ndGg7YTxpO2ErKyl7ZD0oaD1jW2FdKVswXTt2YXIgTT0oZz1oWzJdKVswXTtmb3Iobz0xLHM9Zy5sZW5ndGg7bzxzOysrbylnW29dIT09Z1tvLTFdKzEmJihwPWhbMF0rby0xLEUrPSgwLG4uc3RyaW5nMzIpKGQpKygwLG4uc3RyaW5nMzIpKHApKygwLG4uc3RyaW5nMzIpKE0pLGQ9cCsxLE09Z1tvXSk7RSs9KDAsbi5zdHJpbmczMikoZCkrKDAsbi5zdHJpbmczMikoaFsxXSkrKDAsbi5zdHJpbmczMikoTSl9aj0iXDBcZlwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoKzE2KSsiXDBcMFwwXDAiKygwLG4uc3RyaW5nMzIpKEUubGVuZ3RoLzEyKX1yZXR1cm4gbCsiXDAEIitEKEkubGVuZ3RoKzQpK0kraitFfWZ1bmN0aW9uIHooZSx0LHIpe3I9cnx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07dmFyIGE9MCxpPTAscz0wLGM9MCx1PW51bGwsbD0wO2lmKHQpe2Zvcih2YXIgZiBpbiB0KXsodT4oZnw9MCl8fCF1KSYmKHU9ZiksbDxmJiYobD1mKTt2YXIgaD0oMCxvLmdldFVuaWNvZGVSYW5nZUZvcikoZik7aWYoaDwzMilhfD0xPDxoO2Vsc2UgaWYoaDw2NClpfD0xPDxoLTMyO2Vsc2UgaWYoaDw5NilzfD0xPDxoLTY0O2Vsc2V7aWYoIShoPDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PGgtOTZ9fWw+NjU1MzUmJihsPTY1NTM1KX1lbHNlIHU9MCxsPTI1NTt2YXIgZD1lLmJib3h8fFswLDAsMCwwXSxwPXIudW5pdHNQZXJFbXx8MS8oZS5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSxnPWUuYXNjZW50U2NhbGVkPzE6cC9ULHY9ci5hc2NlbnR8fE1hdGgucm91bmQoZyooZS5hc2NlbnR8fGRbM10pKSx5PXIuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTt5PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih5PS15KTt2YXIgbT1yLnlNYXh8fHYsYj0tci55TWlufHwteTtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShzKSsoMCxuLnN0cmluZzMyKShjKSsiKjIxKiIrRChlLml0YWxpY0FuZ2xlPzE6MCkrRCh1fHxlLmZpcnN0Q2hhcikrRChsfHxlLmxhc3RDaGFyKStEKHYpK0QoeSkrIlwwZCIrRChtKStEKGIpKyJcMFwwXDBcMFwwXDBcMFwwIitEKGUueEhlaWdodCkrRChlLmNhcEhlaWdodCkrRCgwKStEKHV8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBXKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIFkoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8VihlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYz1bXTtmb3Iocj0wLG49cy5sZW5ndGg7cjxuO3IrKyl7dmFyIHU9W107Zm9yKGE9MCxpPShvPXRbMV1bcl18fHNbcl0pLmxlbmd0aDthPGk7YSsrKXUucHVzaChEKG8uY2hhckNvZGVBdChhKSkpO2MucHVzaCh1LmpvaW4oIiIpKX12YXIgbD1bcyxjXSxmPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxkPVsiXDBcMCIsIgRcdCJdLHA9cy5sZW5ndGgqZi5sZW5ndGgsZz0iXDBcMCIrRChwKStEKDEyKnArNiksdj0wO2ZvcihyPTAsbj1mLmxlbmd0aDtyPG47cisrKXt2YXIgeT1sW3JdO2ZvcihhPTAsaT15Lmxlbmd0aDthPGk7YSsrKW89eVthXSxnKz1mW3JdK2hbcl0rZFtyXStEKGEpK0Qoby5sZW5ndGgpK0Qodiksdis9by5sZW5ndGh9cmV0dXJuIGcrKHMuam9pbigiIikrYy5qb2luKCIiKSl9dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixhKXtBKHRoaXMsZSksdGhpcy5uYW1lPXQsdGhpcy5wc05hbWU9bnVsbCx0aGlzLm1pbWV0eXBlPW51bGwsdGhpcy5kaXNhYmxlRm9udEZhY2U9ITEsdGhpcy5sb2FkZWROYW1lPWEubG9hZGVkTmFtZSx0aGlzLmlzVHlwZTNGb250PWEuaXNUeXBlM0ZvbnQsdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmNzc0ZvbnRJbmZvPWEuY3NzRm9udEluZm8sdGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgbz0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlNlcmlmKTtpZighbyYmIWEuaXNTaW11bGF0ZWRGbGFncyl7dmFyIHMsYz10LnJlcGxhY2UoL1ssX10vZywiLSIpLnNwbGl0KCItIilbMF0sbD0oMCx1LmdldFNlcmlmRm9udHMpKCksaD1rKGMuc3BsaXQoIisiKSk7dHJ5e2ZvcihoLnMoKTshKHM9aC5uKCkpLmRvbmU7KWlmKGxbcy52YWx1ZV0pe289ITA7YnJlYWt9fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX10aGlzLmlzU2VyaWZGb250PW8sdGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7dmFyIGQ9YS50eXBlLHA9YS5zdWJ0eXBlO3RoaXMudHlwZT1kLHRoaXMuc3VidHlwZT1wO3ZhciBnPXQubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO2lmKHRoaXMuaXNJbnZhbGlkUERGanNGb250PSEhZyx0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1nWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIix0aGlzLmRpZmZlcmVuY2VzPWEuZGlmZmVyZW5jZXMsdGhpcy53aWR0aHM9YS53aWR0aHMsdGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGgsdGhpcy5jb21wb3NpdGU9YS5jb21wb3NpdGUsdGhpcy5jTWFwPWEuY01hcCx0aGlzLmNhcEhlaWdodD1hLmNhcEhlaWdodC9ULHRoaXMuYXNjZW50PWEuYXNjZW50L1QsdGhpcy5kZXNjZW50PWEuZGVzY2VudC9ULHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQsdGhpcy5mb250TWF0cml4PWEuZm9udE1hdHJpeCx0aGlzLmJib3g9YS5iYm94LHRoaXMuZGVmYXVsdEVuY29kaW5nPWEuZGVmYXVsdEVuY29kaW5nLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09YS50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPWEuY2lkRW5jb2Rpbmd8fCIiLHRoaXMudmVydGljYWw9ISFhLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPWEudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9YS5kZWZhdWx0Vk1ldHJpY3MpLCFyfHxyLmlzRW1wdHkpcmV0dXJuIHImJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJyt0KyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChhKTt2YXIgdixtPXcoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLHkucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFUoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHIsYSksMik7ZD1tWzBdLHA9bVsxXSxkPT09dGhpcy50eXBlJiZwPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChkLCIvIikuY29uY2F0KHAsIi4iKSk7dHJ5e3N3aXRjaChkKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIit0KyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBTPSJUeXBlMUMiPT09cHx8IkNJREZvbnRUeXBlMEMiPT09cD9uZXcgZi5DRkZGb250KHIsYSk6bmV3IGIuVHlwZTFGb250KHQscixhKTtqKGEpLHY9dGhpcy5jb252ZXJ0KHQsUyxhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsdj10aGlzLmNoZWNrQW5kUmVwYWlyKHQscixhKSx0aGlzLmlzT3BlblR5cGUmJihqKGEpLGQ9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChkLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9TShhKSx0aGlzLmRhdGE9dix0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGQscCxhLmlzU3RhbmRhcmRGb250KSx0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4LHRoaXMud2lkdGhzPWEud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPWEuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPWEudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1hLnNlYWNNYXB9ZWxzZXtmb3IodmFyIHg9MDt4PDI1Njt4KyspdGhpcy50b0ZvbnRDaGFyW3hdPXRoaXMuZGlmZmVyZW5jZXNbeF18fGEuZGVmYXVsdEVuY29kaW5nW3hdO3RoaXMuZm9udFR5cGU9bi5Gb250VHlwZS5UWVBFM319cmV0dXJuIEYoZSxbe2tleToicmVuZGVyZXIiLGdldDpmdW5jdGlvbigpe3ZhciBlPWguRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bXS5jb25jYXQoSSxFKTpJLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpPWsobik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXZvaWQgMCE9PSh0PXRoaXNbZT1yLnZhbHVlXSkmJihhW2VdPXQpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0se2tleToiZmFsbGJhY2tUb1N5c3RlbUZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5taXNzaW5nRmlsZT0hMDt2YXIgcj10aGlzLm5hbWUsYT10aGlzLnR5cGUsZj10aGlzLnN1YnR5cGUsaD0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKShyKSxwPSgwLHUuZ2V0U3RkRm9udE1hcCkoKSxnPSgwLHUuZ2V0Tm9uU3RkRm9udE1hcCkoKSx2PSEhcFtoXSx5PSEoIWdbaF18fCFwW2dbaF1dKTtoPXBbaF18fGdbaF18fGg7dmFyIG09KDAsZC5nZXRGb250QmFzaWNNZXRyaWNzKSgpW2hdO20mJihpc05hTih0aGlzLmFzY2VudCkmJih0aGlzLmFzY2VudD1tLmFzY2VudC9UKSxpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PW0uZGVzY2VudC9UKSxpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1tLmNhcEhlaWdodC9UKSksdGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoaCksdGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoaCksdGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHIpO3ZhciBiPS9OYXJyb3cvZy50ZXN0KHIpO2lmKHRoaXMucmVtZWFzdXJlPSghdnx8YikmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MCwodnx8eSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7dmFyIHc9ZS5jaWRUb0dpZE1hcCxrPVtdO2lmKCQoaywoMCx1LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3Qocik/JChrLCgwLHUuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QocikmJiQoaywoMCx1LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSksdyl7Zm9yKHZhciBTIGluIGspe3ZhciB4PWtbU107dm9pZCAwIT09d1t4XSYmKGtbK1NdPXdbeF0pfXcubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGwuSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9a1tlXTt2b2lkIDA9PT13W3JdJiYoa1srZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2tbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWssdGhpcy50b1VuaWNvZGU9bmV3IGwuVG9Vbmljb2RlTWFwKGspfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QoaCkpdGhpcy50b0ZvbnRDaGFyPVgoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxzLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGgpKS9XaW5nZGluZ3MvaS50ZXN0KHIpJiYoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuIiksdGhpcy50b0ZvbnRDaGFyPVgoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKHYpe3ZhciBPPVgodGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAscy5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09YXx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBsLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe09bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPU99ZWxzZXt2YXIgQT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKCksQz1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKCF0LmNvbXBvc2l0ZSl7dmFyIG49dC5kaWZmZXJlbmNlc1tlXXx8dC5kZWZhdWx0RW5jb2RpbmdbZV0sYT0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkobixBKTstMSE9PWEmJihyPWEpfUNbK2VdPXJ9KSksdGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1RhaG9tYXxWZXJkYW5hL2kudGVzdChyKSYmJChDLCgwLHUuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKSx0aGlzLnRvRm9udENoYXI9Q31NKGUpLHRoaXMubG9hZGVkTmFtZT1oLnNwbGl0KCItIilbMF0sdGhpcy5mb250VHlwZT0oMCxpLmdldEZvbnRUeXBlKShhLGYsZS5pc1N0YW5kYXJkRm9udCl9fSx7a2V5OiJjaGVja0FuZFJlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBvPVsiT1MvMiIsImNtYXAiLCJoZWFkIiwiaGhlYSIsImhtdHgiLCJtYXhwIiwibmFtZSIsInBvc3QiLCJsb2NhIiwiZ2x5ZiIsImZwZ20iLCJwcmVwIiwiY3Z0ICIsIkNGRiAiXTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyWyJPUy8yIl09bnVsbCxyLmNtYXA9bnVsbCxyLmhlYWQ9bnVsbCxyLmhoZWE9bnVsbCxyLmhtdHg9bnVsbCxyLm1heHA9bnVsbCxyLm5hbWU9bnVsbCxyLnBvc3Q9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgYT1oKGUpO28uaW5jbHVkZXMoYS50YWcpJiYwIT09YS5sZW5ndGgmJihyW2EudGFnXT1hKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MCxlLnNraXAobik7dmFyIG89ZS5nZXRCeXRlcyhhKTtyZXR1cm4gZS5wb3M9aSwiaGVhZCI9PT10JiYob1s4XT1vWzldPW9bMTBdPW9bMTFdPTAsb1sxN118PTMyKSx7dGFnOnQsY2hlY2tzdW06cixsZW5ndGg6YSxvZmZzZXQ6bixkYXRhOm99fWZ1bmN0aW9uIGQoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiB5KGUsdCxyLG4sYSxpKXt2YXIgbz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHItdDw9MTIpcmV0dXJuIG87dmFyIHM9ZS5zdWJhcnJheSh0LHIpLGM9TihzWzBdLHNbMV0pO2lmKGM8MClyZXR1cm4gUihzLDAsYz0tMSksbi5zZXQocyxhKSxvLmxlbmd0aD1zLmxlbmd0aCxvO3ZhciB1LGw9MTAsZj0wO2Zvcih1PTA7dTxjO3UrKylmPTErKHNbbF08PDh8c1tsKzFdKSxsKz0yO3ZhciBoPWwsZD1zW2xdPDw4fHNbbCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz1kO3ZhciBwPWwrPTIrZCxnPTA7Zm9yKHU9MDt1PGY7dSsrKXt2YXIgdj1zW2wrK107MTkyJnYmJihzW2wtMV09NjMmdik7dmFyIHk9MjsyJnY/eT0xOjE2JnYmJih5PTApO3ZhciBtPTI7NCZ2P209MTozMiZ2JiYobT0wKTt2YXIgYj15K207aWYoZys9Yiw4JnYpe3ZhciB3PXNbbCsrXTt1Kz13LGcrPXcqYn19aWYoMD09PWcpcmV0dXJuIG87dmFyIGs9bCtnO3JldHVybiBrPnMubGVuZ3RoP286IWkmJmQ+MD8obi5zZXQocy5zdWJhcnJheSgwLGgpLGEpLG4uc2V0KFswLDBdLGEraCksbi5zZXQocy5zdWJhcnJheShwLGspLGEraCsyKSxrLT1kLHMubGVuZ3RoLWs+MyYmKGs9ayszJi00KSxvLmxlbmd0aD1rLG8pOnMubGVuZ3RoLWs+Mz8oaz1rKzMmLTQsbi5zZXQocy5zdWJhcnJheSgwLGspLGEpLG8ubGVuZ3RoPWssbyk6KG4uc2V0KHMsYSksby5sZW5ndGg9cy5sZW5ndGgsbyl9ZnVuY3Rpb24gYihlKXt2YXIgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjt2YXIgbj1bW10sW11dLGE9ZS5sZW5ndGgsaT1yK2E7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGE8NilyZXR1cm4gbjt2YXIgbyxzLGM9dC5nZXRVaW50MTYoKSx1PXQuZ2V0VWludDE2KCksbD1bXTtmb3Iobz0wO288YyYmdC5wb3MrMTI8PWk7bysrKXt2YXIgZj17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoMT09PWYucGxhdGZvcm0mJjA9PT1mLmVuY29kaW5nJiYwPT09Zi5sYW5ndWFnZXx8Mz09PWYucGxhdGZvcm0mJjE9PT1mLmVuY29kaW5nJiYxMDMzPT09Zi5sYW5ndWFnZSkmJmwucHVzaChmKX1mb3Iobz0wLHM9bC5sZW5ndGg7bzxzO28rKyl7dmFyIGg9bFtvXTtpZighKGgubGVuZ3RoPD0wKSl7dmFyIGQ9cit1K2gub2Zmc2V0O2lmKCEoZCtoLmxlbmd0aD5pKSl7dC5wb3M9ZDt2YXIgcD1oLm5hbWU7aWYoaC5lbmNvZGluZyl7Zm9yKHZhciBnPSIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kz0yKWcrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7blsxXVtwXT1nfWVsc2UgblswXVtwXT10LmdldFN0cmluZyhoLmxlbmd0aCl9fX1yZXR1cm4gbn12YXIgdyxTLHgsTyxBPVswLDAsMCwwLDAsMCwwLDAsLTIsLTIsLTIsLTIsMCwwLC0yLC01LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLC0xLC0xLDEsLTEsLTk5OSwwLDEsMCwtMSwtMiwwLC0xLC0yLC0xLC0xLDAsLTEsLTEsMCwwLC05OTksLTk5OSwtMSwtMSwtMSwtMSwtMiwtOTk5LC0yLC0yLC05OTksMCwtMiwtMiwwLDAsLTIsMCwtMiwwLDAsMCwtMiwtMSwtMSwxLDEsMCwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwtMSwwLC0xLC0xLDAsLTk5OSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwtMiwtOTk5LC05OTksLTk5OSwtOTk5LC05OTksLTEsLTEsLTIsLTIsMCwwLDAsMCwtMSwtMSwtOTk5LC0yLC0yLDAsMCwtMSwtMiwtMiwwLDAsMCwtMSwtMSwtMSwtMl07ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcixhLGksbyxzLGM9ZS5kYXRhLHU9MCxsPTAsZj0wLGg9W10sZD1bXSxwPVtdLGc9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsdj0hMSx5PTAsbT0wLGI9Yy5sZW5ndGg7dTxiOyl7dmFyIHc9Y1t1KytdO2lmKDY0PT09dylpZihhPWNbdSsrXSx2fHxtKXUrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaC5wdXNoKGNbdSsrXSk7ZWxzZSBpZig2NT09PXcpaWYoYT1jW3UrK10sdnx8bSl1Kz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW3UrK10saC5wdXNoKGk8PDh8Y1t1KytdKTtlbHNlIGlmKDE3Nj09KDI0OCZ3KSlpZihhPXctMTc2KzEsdnx8bSl1Kz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChjW3UrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JncpKWlmKGE9dy0xODQrMSx2fHxtKXUrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbdSsrXSxoLnB1c2goaTw8OHxjW3UrK10pO2Vsc2UgaWYoNDMhPT13fHxnKWlmKDQ0IT09d3x8Zyl7aWYoNDU9PT13KWlmKHYpdj0hMSxsPXU7ZWxzZXtpZighKHM9ZC5wb3AoKSkpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO289cC5wb3AoKSxjPXMuZGF0YSx1PXMuaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW29dPWgubGVuZ3RoLXMuc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT13KSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dTtlbHNlIGlmKDg4PT09dykrK3k7ZWxzZSBpZigyNz09PXcpbT15O2Vsc2UgaWYoODk9PT13KW09PT15JiYobT0wKSwtLXk7ZWxzZSBpZigyOD09PXcmJiF2JiYhbSl7dmFyIGs9aC5hdCgtMSk7az4wJiYodSs9ay0xKX19ZWxzZSh2fHxtKSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxnPSEwKSx2PSEwLGY9dSxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmMsaTp1fTtlbHNlIGlmKCF2JiYhbSlpZihvPWguYXQoLTEpLGlzTmFOKG8pKSgwLG4uaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNlIGlmKHQuZnVuY3Rpb25zVXNlZFtvXT0hMCxvIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe3ZhciBTPWgubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbb107aWYoUzwwKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtoLmxlbmd0aD1TfWVsc2UgaWYobyBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFwLmluY2x1ZGVzKG8pKXtpZihkLnB1c2goe2RhdGE6YyxpOnUsc3RhY2tUb3A6aC5sZW5ndGgtMX0pLHAucHVzaChvKSwhKHM9dC5mdW5jdGlvbnNEZWZpbmVkW29dKSlyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7Yz1zLmRhdGEsdT1zLml9aWYoIXYmJiFtKXt2YXIgeD0wO2Zvcih3PD0xNDI/eD1BW3ddOnc+PTE5MiYmdzw9MjIzP3g9LTE6dz49MjI0JiYoeD0tMiksdz49MTEzJiZ3PD0xMTcmJihhPWgucG9wKCksaXNOYU4oYSl8fCh4PTIqLWEpKTt4PDAmJmgubGVuZ3RoPjA7KWgucG9wKCkseCsrO2Zvcig7eD4wOyloLnB1c2goTmFOKSx4LS19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPWc7dmFyIE89W2NdO3U+Yy5sZW5ndGgmJk8ucHVzaChuZXcgVWludDhBcnJheSh1LWMubGVuZ3RoKSksZj5sJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSxPLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe3ZhciByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O3ZhciBpPW5ldyBVaW50OEFycmF5KGEpLG89MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLG8pLG8rPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLE8pfWlmKFUodD1uZXcgbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXt2YXIgRj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixhPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2Zvcih2YXIgcj1lLmdldFVpbnQxNigpLGE9ZS5nZXRVaW50MTYoKSxpPWUuZ2V0SW50MzIoKT4+PjAsbz1bXSxzPTA7czxpO3MrKylvLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7dmFyIGM9e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjpyLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6b307c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gYztjYXNlIDI6cmV0dXJuIGMuZHNpZ1RhZz1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ0xlbmd0aD1lLmdldEludDMyKCk+Pj4wLGMuZHNpZ09mZnNldD1lLmdldEludDMyKCk+Pj4wLGN9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICIuY29uY2F0KHIsIi4iKSl9KGUpLGk9YS5udW1Gb250cyxvPWEub2Zmc2V0VGFibGUscz10LnNwbGl0KCIrIiksYz0wO2M8aTtjKyspe2UucG9zPShlLnN0YXJ0fHwwKStvW2NdO3ZhciBsPWQoZSksZj11KGUsbC5udW1UYWJsZXMpO2lmKCFmLm5hbWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Zm9yKHZhciBoPWIoZi5uYW1lKSxwPTAsZz1oLmxlbmd0aDtwPGc7cCsrKWZvcih2YXIgdj0wLHk9aFtwXS5sZW5ndGg7djx5O3YrKyl7dmFyIG09aFtwXVt2XSYmaFtwXVt2XS5yZXBsYWNlKC9ccy9nLCIiKTtpZihtKXtpZihtPT09dClyZXR1cm57aGVhZGVyOmwsdGFibGVzOmZ9O2lmKCEocy5sZW5ndGg8Mikpe3ZhciB3LFM9ayhzKTt0cnl7Zm9yKFMucygpOyEodz1TLm4oKSkuZG9uZTspe3ZhciB4PXcudmFsdWU7bT09PXgmJihyPXtuYW1lOngsaGVhZGVyOmwsdGFibGVzOmZ9KX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fX19fWlmKHIpcmV0dXJuKDAsbi53YXJuKSgnVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQsICcpKydmYWxsaW5nIGJhY2sgdG8gIicuY29uY2F0KHIubmFtZSwnIiBmb250IGluc3RlYWQuJykpLHtoZWFkZXI6ci5oZWFkZXIsdGFibGVzOnIudGFibGVzfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICInLmNvbmNhdCh0LCciIGZvbnQuJykpfSh0LHRoaXMubmFtZSk7dz1GLmhlYWRlcixTPUYudGFibGVzfWVsc2Ugdz1kKHQpLFM9dSh0LHcubnVtVGFibGVzKTt2YXIgUD0hU1siQ0ZGICJdO2lmKFApe2lmKCFTLmxvY2EpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtTLmdseWZ8fCgoMCxuLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpLFMuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksdGhpcy5pc09wZW5UeXBlPSExfWVsc2V7dmFyIFQ9ci5jb21wb3NpdGUmJigoci5jaWRUb0dpZE1hcHx8W10pLmxlbmd0aD4wfHwhKHIuY01hcCBpbnN0YW5jZW9mIGcuSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09dy52ZXJzaW9uJiYhVHx8IVMuaGVhZHx8IVMuaGhlYXx8IVMubWF4cHx8IVMucG9zdClyZXR1cm4gTz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLHg9bmV3IGYuQ0ZGRm9udChPLHIpLGoociksdGhpcy5jb252ZXJ0KGUseCxyKTtkZWxldGUgUy5nbHlmLGRlbGV0ZSBTLmxvY2EsZGVsZXRlIFMuZnBnbSxkZWxldGUgUy5wcmVwLGRlbGV0ZSBTWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFTLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrUy5tYXhwLm9mZnNldDt2YXIgST10LmdldEludDMyKCksRT10LmdldFVpbnQxNigpO2lmKHIuc2NhbGVGYWN0b3JzJiZyLnNjYWxlRmFjdG9ycy5sZW5ndGg9PT1FJiZQKXt2YXIgTT1yLnNjYWxlRmFjdG9ycyxfPUwoUy5oZWFkLmRhdGFbNTBdLFMuaGVhZC5kYXRhWzUxXSksRD1uZXcgcC5HbHlmVGFibGUoe2dseWZUYWJsZTpTLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzpfLGxvY2FUYWJsZTpTLmxvY2EuZGF0YSxudW1HbHlwaHM6RX0pO0Quc2NhbGUoTSk7dmFyIEI9RC53cml0ZSgpLCQ9Qi5nbHlmLFg9Qi5sb2NhLFY9Qi5pc0xvY2F0aW9uTG9uZztTLmdseWYuZGF0YT0kLFMubG9jYS5kYXRhPVgsViE9PSEhXyYmKFMuaGVhZC5kYXRhWzUwXT0wLFMuaGVhZC5kYXRhWzUxXT1WPzE6MCk7Zm9yKHZhciBLPVMuaG10eC5kYXRhLEo9MDtKPEU7SisrKXt2YXIgWj00KkosUT1NYXRoLnJvdW5kKE1bSl0qTChLW1pdLEtbWisxXSkpO0tbWl09UT4+OCYyNTUsS1taKzFdPTI1NSZRLFIoSyxaKzIsTWF0aC5yb3VuZChNW0pdKk4oS1taKzJdLEtbWiszXSkpKX19dmFyIGVlPUUrMSx0ZT0hMDtlZT42NTUzNSYmKHRlPSExLGVlPUUsKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIikpO3ZhciByZT0wLG5lPTA7ST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYodC5wb3MrPTgsdC5nZXRVaW50MTYoKT4yJiYoUy5tYXhwLmRhdGFbMTRdPTAsUy5tYXhwLmRhdGFbMTVdPTIpLHQucG9zKz00LHJlPXQuZ2V0VWludDE2KCksdC5wb3MrPTQsbmU9dC5nZXRVaW50MTYoKSksUy5tYXhwLmRhdGFbNF09ZWU+PjgsUy5tYXhwLmRhdGFbNV09MjU1JmVlO3ZhciBhZT1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZDKGUsaSksdCYmQyh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KFMuZnBnbSxTLnByZXAsU1siY3Z0ICJdLHJlKTtpZihhZXx8KGRlbGV0ZSBTLmZwZ20sZGVsZXRlIFMucHJlcCxkZWxldGUgU1siY3Z0ICJdKSxmdW5jdGlvbihlLHQscixhLGksbyl7aWYodCl7ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0LGUucG9zKz00LGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yLGUucG9zKz0yO3ZhciBzPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7dmFyIGM9ZS5nZXRVaW50MTYoKTswIT09cyYmKDImTChhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSAiKSsiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCIuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTt2YXIgdT1pLWMtKHIubGVuZ3RoLTQqYz4+MSk7aWYodT4wKXt2YXIgbD1uZXcgVWludDhBcnJheShyLmxlbmd0aCsyKnUpO2wuc2V0KHIuZGF0YSksbyYmKGxbci5sZW5ndGhdPXIuZGF0YVsyXSxsW3IubGVuZ3RoKzFdPXIuZGF0YVszXSksci5kYXRhPWx9fWVsc2UgciYmKHIuZGF0YT1udWxsKX0odCxTLmhoZWEsUy5obXR4LFMuaGVhZCxlZSx0ZSksIVMuaGVhZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbihlLHQscil7dmFyIGE9ZS5kYXRhLGk9KGFbMF08PDI0KSsoYVsxXTw8MTYpKyhhWzJdPDw4KSthWzNdO2k+PjE2IT0xJiYoKDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSksYVswXT0wLGFbMV09MSxhWzJdPTAsYVszXT0wKTt2YXIgbz1MKGFbNTBdLGFbNTFdKTtpZihvPDB8fG8+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrbyk7dmFyIHM9dCsxO2lmKHI9PT1zPDwxKWFbNTBdPTAsYVs1MV09MDtlbHNle2lmKHIhPT1zPDwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICIrbyk7YVs1MF09MCxhWzUxXT0xfX19KFMuaGVhZCxFLFA/Uy5sb2NhLmxlbmd0aDowKTt2YXIgaWU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihQKXt2YXIgb2U9TChTLmhlYWQuZGF0YVs1MF0sUy5oZWFkLmRhdGFbNTFdKSxzZT1mdW5jdGlvbihlLHQscixuLGEsaSxvKXt2YXIgcyxjLHU7bj8ocz00LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+Pj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfSk6KHM9MixjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSx1PWZ1bmN0aW9uKGUsdCxyKXtlW3RdPXI+PjkmMjU1LGVbdCsxXT1yPj4xJjI1NX0pO3ZhciBsPWk/cisxOnIsZj1zKigxK2wpLGg9bmV3IFVpbnQ4QXJyYXkoZik7aC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsZikpLGUuZGF0YT1oO3ZhciBkLHAsZz10LmRhdGEsdj1nLmxlbmd0aCxtPW5ldyBVaW50OEFycmF5KHYpLGI9W107Zm9yKGQ9MCxwPTA7ZDxyKzE7ZCsrLHArPXMpe3ZhciB3PWMoaCxwKTt3PnYmJih3PXYpLGIucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6dyxlbmRPZmZzZXQ6MH0pfWZvcihiLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpLGQ9MDtkPHI7ZCsrKWJbZF0uZW5kT2Zmc2V0PWJbZCsxXS5vZmZzZXQ7Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLGQ9MDtkPHI7ZCsrKXt2YXIgaz1iW2RdLFM9ay5vZmZzZXQseD1rLmVuZE9mZnNldDtpZigwIT09U3x8MCE9PXgpYnJlYWs7dmFyIE89YltkKzFdLm9mZnNldDtpZigwIT09Tyl7YltkXS5lbmRPZmZzZXQ9TzticmVha319dmFyIEE9T2JqZWN0LmNyZWF0ZShudWxsKSxDPTA7Zm9yKHUoaCwwLEMpLGQ9MCxwPXM7ZDxyO2QrKyxwKz1zKXt2YXIgRj15KGcsYltkXS5vZmZzZXQsYltkXS5lbmRPZmZzZXQsbSxDLGEpLFA9Ri5sZW5ndGg7MD09PVAmJihBW2RdPSEwKSxGLnNpemVPZkluc3RydWN0aW9ucz5vJiYobz1GLnNpemVPZkluc3RydWN0aW9ucyksdShoLHAsQys9UCl9aWYoMD09PUMpe3ZhciBUPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAscD1zO2Q8bDtkKysscCs9cyl1KGgscCxULmxlbmd0aCk7dC5kYXRhPVR9ZWxzZSBpZihpKXt2YXIgST1jKGgscyk7bS5sZW5ndGg+SStDP3QuZGF0YT1tLnN1YmFycmF5KDAsSStDKToodC5kYXRhPW5ldyBVaW50OEFycmF5KEkrQyksdC5kYXRhLnNldChtLnN1YmFycmF5KDAsQykpKSx0LmRhdGEuc2V0KG0uc3ViYXJyYXkoMCxJKSxDKSx1KGUuZGF0YSxoLmxlbmd0aC1zLEMrSSl9ZWxzZSB0LmRhdGE9bS5zdWJhcnJheSgwLEMpO3JldHVybnttaXNzaW5nR2x5cGhzOkEsbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm99fShTLmxvY2EsUy5nbHlmLEUsb2UsYWUsdGUsbmUpO2llPXNlLm1pc3NpbmdHbHlwaHMsST49NjU1MzYmJlMubWF4cC5sZW5ndGg+PTIyJiYoUy5tYXhwLmRhdGFbMjZdPXNlLm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxTLm1heHAuZGF0YVsyN109MjU1JnNlLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIVMuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1TLmhoZWEuZGF0YVsxMF0mJjA9PT1TLmhoZWEuZGF0YVsxMV0mJihTLmhoZWEuZGF0YVsxMF09MjU1LFMuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBjZT17dW5pdHNQZXJFbTpMKFMuaGVhZC5kYXRhWzE4XSxTLmhlYWQuZGF0YVsxOV0pLHlNYXg6TChTLmhlYWQuZGF0YVs0Ml0sUy5oZWFkLmRhdGFbNDNdKSx5TWluOk4oUy5oZWFkLmRhdGFbMzhdLFMuaGVhZC5kYXRhWzM5XSksYXNjZW50Ok4oUy5oaGVhLmRhdGFbNF0sUy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6TihTLmhoZWEuZGF0YVs2XSxTLmhoZWEuZGF0YVs3XSksbGluZUdhcDpOKFMuaGhlYS5kYXRhWzhdLFMuaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Y2UuYXNjZW50L2NlLnVuaXRzUGVyRW0sdGhpcy5kZXNjZW50PWNlLmRlc2NlbnQvY2UudW5pdHNQZXJFbSx0aGlzLmxpbmVHYXA9Y2UubGluZUdhcC9jZS51bml0c1BlckVtLHRoaXMuY3NzRm9udEluZm8mJnRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodD8odGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0LHRoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcCk6dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXAsUy5wb3N0JiZmdW5jdGlvbihlLHIsYSl7dmFyIG89KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPW87dmFyIHMsYz1vK2UubGVuZ3RoLHU9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7dmFyIGwsZj0hMDtzd2l0Y2godSl7Y2FzZSA2NTUzNjpzPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOnZhciBoPXQuZ2V0VWludDE2KCk7aWYoaCE9PWEpe2Y9ITE7YnJlYWt9dmFyIGQ9W107Zm9yKGw9MDtsPGg7KytsKXt2YXIgcD10LmdldFVpbnQxNigpO2lmKHA+PTMyNzY4KXtmPSExO2JyZWFrfWQucHVzaChwKX1pZighZilicmVhaztmb3IodmFyIGc9W10sdj1bXTt0LnBvczxjOyl7dmFyIHk9dC5nZXRCeXRlKCk7Zm9yKHYubGVuZ3RoPXksbD0wO2w8eTsrK2wpdltsXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtnLnB1c2godi5qb2luKCIiKSl9Zm9yKHM9W10sbD0wO2w8aDsrK2wpe3ZhciBtPWRbbF07bTwyNTg/cy5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW21dKTpzLnB1c2goZ1ttLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIit1KSxmPSExLHIuZGVmYXVsdEVuY29kaW5nJiYocz1yLmRlZmF1bHRFbmNvZGluZyl9ci5nbHlwaE5hbWVzPXN9KFMucG9zdCxyLEUpLFMucG9zdD17dGFnOiJwb3N0IixkYXRhOlcocil9O3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXtyZXR1cm4haWVbZV19aWYoci5jb21wb3NpdGUpe3ZhciBmZT1yLmNpZFRvR2lkTWFwfHxbXSxoZT0wPT09ZmUubGVuZ3RoO3IuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9SChlLHQsITApKSx0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7dmFyIHI9LTE7aGU/cj10OnZvaWQgMCE9PWZlW3RdJiYocj1mZVt0XSkscj49MCYmcjxFJiZsZShyKSYmKHVlW2VdPXIpfSkpfWVsc2V7dmFyIGRlPWZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybigwLG4ud2FybikoIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgaSxvPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1vLHQuc2tpcCgyKTtmb3IodmFyIHMsYz10LmdldFVpbnQxNigpLHU9ITEsbD0wO2w8YztsKyspe3ZhciBmPXQuZ2V0VWludDE2KCksaD10LmdldFVpbnQxNigpLGQ9dC5nZXRJbnQzMigpPj4+MCxwPSExO2lmKCFzfHxzLnBsYXRmb3JtSWQhPT1mfHxzLmVuY29kaW5nSWQhPT1oKXtpZigwIT09Znx8MCE9PWgmJjEhPT1oJiYzIT09aClpZigxPT09ZiYmMD09PWgpcD0hMDtlbHNlIGlmKDMhPT1mfHwxIT09aHx8IWEmJnMpe2lmKHImJjM9PT1mJiYwPT09aCl7cD0hMDt2YXIgZz0hMDtpZihsPGMtMSl7dmFyIHY9dC5wZWVrQnl0ZXMoMik7TCh2WzBdLHZbMV0pPGYmJihnPSExKX1nJiYodT0hMCl9fWVsc2UgcD0hMCxyfHwodT0hMCk7ZWxzZSBwPSEwO2lmKHAmJihzPXtwbGF0Zm9ybUlkOmYsZW5jb2RpbmdJZDpoLG9mZnNldDpkfSksdSlicmVha319aWYocyYmKHQucG9zPW8rcy5vZmZzZXQpLCFzfHwtMT09PXQucGVla0J5dGUoKSlyZXR1cm4oMCxuLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt2YXIgeSxtLGI9dC5nZXRVaW50MTYoKSx3PSExLGs9W107aWYoMD09PWIpe2Zvcih0LnNraXAoNCkseT0wO3k8MjU2O3krKyl7dmFyIFM9dC5nZXRCeXRlKCk7UyYmay5wdXNoKHtjaGFyQ29kZTp5LGdseXBoSWQ6U30pfXc9ITB9ZWxzZSBpZigyPT09Yil7dC5za2lwKDQpO2Zvcih2YXIgeD1bXSxPPTAsQT0wO0E8MjU2O0ErKyl7dmFyIEM9dC5nZXRVaW50MTYoKT4+Mzt4LnB1c2goQyksTz1NYXRoLm1heChDLE8pfWZvcih2YXIgRj1bXSxQPTA7UDw9TztQKyspRi5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpOKHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IodmFyIFQ9MDtUPDI1NjtUKyspaWYoMD09PXhbVF0pdC5wb3M9RlswXS5pZFJhbmdlUG9zKzIqVCxtPXQuZ2V0VWludDE2KCksay5wdXNoKHtjaGFyQ29kZTpULGdseXBoSWQ6bX0pO2Vsc2V7dmFyIEk9Rlt4W1RdXTtmb3IoeT0wO3k8SS5lbnRyeUNvdW50O3krKyl7dmFyIEU9KFQ8PDgpK3krSS5maXJzdENvZGU7dC5wb3M9SS5pZFJhbmdlUG9zKzIqeSwwIT09KG09dC5nZXRVaW50MTYoKSkmJihtPShtK0kuaWREZWx0YSklNjU1MzYpLGsucHVzaCh7Y2hhckNvZGU6RSxnbHlwaElkOm19KX19fWVsc2UgaWYoND09PWIpe3Quc2tpcCg0KTt2YXIgaj10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTt2YXIgTSxfPVtdO2ZvcihNPTA7TTxqO00rKylfLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7Zm9yKHQuc2tpcCgyKSxNPTA7TTxqO00rKylfW01dLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKE09MDtNPGo7TSsrKV9bTV0uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgUixEPTA7Zm9yKE09MDtNPGo7TSsrKXtpPV9bTV07dmFyIEI9dC5nZXRVaW50MTYoKTtCPyhSPShCPj4xKS0oai1NKSxpLm9mZnNldEluZGV4PVIsRD1NYXRoLm1heChELFIraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX12YXIgVT1bXTtmb3IoeT0wO3k8RDt5KyspVS5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihNPTA7TTxqO00rKyl7bz0oaT1fW01dKS5zdGFydDt2YXIgJD1pLmVuZCxYPWkuZGVsdGE7Zm9yKFI9aS5vZmZzZXRJbmRleCx5PW87eTw9JDt5KyspNjU1MzUhPT15JiYobT0obT1SPDA/eTpVW1IreS1vXSkrWCY2NTUzNSxrLnB1c2goe2NoYXJDb2RlOnksZ2x5cGhJZDptfSkpfX1lbHNlIGlmKDY9PT1iKXt0LnNraXAoNCk7dmFyIEg9dC5nZXRVaW50MTYoKSxxPXQuZ2V0VWludDE2KCk7Zm9yKHk9MDt5PHE7eSsrKXttPXQuZ2V0VWludDE2KCk7dmFyIEc9SCt5O2sucHVzaCh7Y2hhckNvZGU6RyxnbHlwaElkOm19KX19ZWxzZXtpZigxMiE9PWIpcmV0dXJuKDAsbi53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2IpLHtwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfTt0LnNraXAoMTApO3ZhciB6PXQuZ2V0SW50MzIoKT4+PjA7Zm9yKHk9MDt5PHo7eSsrKWZvcih2YXIgVz10LmdldEludDMyKCk+Pj4wLFY9dC5nZXRJbnQzMigpPj4+MCxZPXQuZ2V0SW50MzIoKT4+PjAsSz1XO0s8PVY7SysrKWsucHVzaCh7Y2hhckNvZGU6SyxnbHlwaElkOlkrK30pfWsuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2Zvcih2YXIgSj0xO0o8ay5sZW5ndGg7SisrKWtbSi0xXS5jaGFyQ29kZT09PWtbSl0uY2hhckNvZGUmJihrLnNwbGljZShKLDEpLEotLSk7cmV0dXJue3BsYXRmb3JtSWQ6cy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6cy5lbmNvZGluZ0lkLG1hcHBpbmdzOmssaGFzU2hvcnRDbWFwOnd9fShTLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLHBlPWRlLnBsYXRmb3JtSWQsZ2U9ZGUuZW5jb2RpbmdJZCx2ZT1kZS5tYXBwaW5ncyx5ZT1bXSxtZT0hMTtpZighci5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXIuYmFzZUVuY29kaW5nTmFtZXx8KHllPSgwLGMuZ2V0RW5jb2RpbmcpKHIuYmFzZUVuY29kaW5nTmFtZSkpLHIuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PXBlJiYxPT09Z2V8fDE9PT1wZSYmMD09PWdlKSlmb3IodmFyIGJlPSgwLHMuZ2V0R2x5cGhzVW5pY29kZSkoKSx3ZT0wO3dlPDI1Njt3ZSsrKXt2YXIga2U7aWYoa2U9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t3ZV0/dGhpcy5kaWZmZXJlbmNlc1t3ZV06eWUubGVuZ3RoJiYiIiE9PXllW3dlXT95ZVt3ZV06Yy5TdGFuZGFyZEVuY29kaW5nW3dlXSl7dmFyIFNlPSgwLGkucmVjb3ZlckdseXBoTmFtZSkoa2UsYmUpLHhlPXZvaWQgMDtpZigzPT09cGUmJjE9PT1nZT94ZT1iZVtTZV06MT09PXBlJiYwPT09Z2UmJih4ZT1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihTZSkpLHZvaWQgMD09PXhlKXtpZighci5nbHlwaE5hbWVzJiZyLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciBPZT10aGlzLnRvVW5pY29kZS5nZXQod2UpO09lJiYoeGU9T2UuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PXhlKWNvbnRpbnVlfXZhciBBZSxDZT1rKHZlKTt0cnl7Zm9yKENlLnMoKTshKEFlPUNlLm4oKSkuZG9uZTspe3ZhciBGZT1BZS52YWx1ZTtpZihGZS5jaGFyQ29kZT09PXhlKXt1ZVt3ZV09RmUuZ2x5cGhJZDticmVha319fWNhdGNoKGUpe0NlLmUoZSl9ZmluYWxseXtDZS5mKCl9fX1lbHNlIGlmKDA9PT1wZSl7dmFyIFBlLFRlPWsodmUpO3RyeXtmb3IoVGUucygpOyEoUGU9VGUubigpKS5kb25lOyl7dmFyIEllPVBlLnZhbHVlO3VlW0llLmNoYXJDb2RlXT1JZS5nbHlwaElkfX1jYXRjaChlKXtUZS5lKGUpfWZpbmFsbHl7VGUuZigpfW1lPSEwfWVsc2V7dmFyIEVlLGplPWsodmUpO3RyeXtmb3IoamUucygpOyEoRWU9amUubigpKS5kb25lOyl7dmFyIE1lPUVlLnZhbHVlLF9lPU1lLmNoYXJDb2RlOzM9PT1wZSYmX2U+PTYxNDQwJiZfZTw9NjE2OTUmJihfZSY9MjU1KSx1ZVtfZV09TWUuZ2x5cGhJZH19Y2F0Y2goZSl7amUuZShlKX1maW5hbGx5e2plLmYoKX19aWYoci5nbHlwaE5hbWVzJiYoeWUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKHZhciBMZT0wO0xlPDI1NjsrK0xlKWlmKG1lfHx2b2lkIDA9PT11ZVtMZV0pe3ZhciBSZT10aGlzLmRpZmZlcmVuY2VzW0xlXXx8eWVbTGVdO2lmKFJlKXt2YXIgTmU9ci5nbHlwaE5hbWVzLmluZGV4T2YoUmUpO05lPjAmJmxlKE5lKSYmKHVlW0xlXT1OZSl9fX0wPT09dWUubGVuZ3RoJiYodWVbMF09MCk7dmFyIERlPWVlLTE7aWYodGV8fChEZT0wKSwhci5jc3NGb250SW5mbyl7dmFyIEJlPXEodWUsbGUsRGUsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1CZS50b0ZvbnRDaGFyLFMuY21hcD17dGFnOiJjbWFwIixkYXRhOkcoQmUuY2hhckNvZGVUb0dseXBoSWQsQmUudG9Vbmljb2RlRXh0cmFNYXAsZWUpfSxTWyJPUy8yIl0mJmZ1bmN0aW9uKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3ZhciByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5za2lwKDYpLDA9PT10LmdldFVpbnQxNigpfHwoZS5kYXRhWzhdPWUuZGF0YVs5XT0wLDApKSl9KFNbIk9TLzIiXSx0KXx8KFNbIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOnoocixCZS5jaGFyQ29kZVRvR2x5cGhJZCxjZSl9KX1pZighUCl0cnl7Tz1uZXcgbS5TdHJlYW0oU1siQ0ZGICJdLmRhdGEpLCh4PW5ldyBhLkNGRlBhcnNlcihPLHIsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCkpLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgVWU9bmV3IGEuQ0ZGQ29tcGlsZXIoeCk7U1siQ0ZGICJdLmRhdGE9VWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKFMubmFtZSl7dmFyICRlPWIoUy5uYW1lKTtTLm5hbWUuZGF0YT1ZKGUsJGUpLHRoaXMucHNOYW1lPSRlWzBdWzZdfHxudWxsfWVsc2UgUy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6WSh0aGlzLm5hbWUpfTt2YXIgWGU9bmV3IHYuT3BlblR5cGVGaWxlQnVpbGRlcih3LnZlcnNpb24pO2Zvcih2YXIgSGUgaW4gUylYZS5hZGRUYWJsZShIZSxTW0hlXS5kYXRhKTtyZXR1cm4gWGUudG9BcnJheSgpfX0se2tleToiY29udmVydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludGVybmFsRm9udCYmIShlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe3ZhciByPVtdLG49KDAscy5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KWlmKCFlLmhhc0VuY29kaW5nfHwwIT09ZS5kaWZmZXJlbmNlcy5sZW5ndGgmJnZvaWQgMD09PWUuZGlmZmVyZW5jZXNbYV0pe3ZhciBpPXRbYV0sYz0oMCxvLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxuKTstMSE9PWMmJihyW2FdPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7dmFyIGE9MTt0IGluc3RhbmNlb2YgZi5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTt2YXIgdT10LmdldEdseXBoTWFwcGluZyhyKSxoPW51bGwsZD11LHA9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoaD1xKHUsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWgudG9Gb250Q2hhcixkPWguY2hhckNvZGVUb0dseXBoSWQscD1oLnRvVW5pY29kZUV4dHJhTWFwKTt2YXIgZz10Lm51bUdseXBocztmdW5jdGlvbiB5KGUsdCl7dmFyIHI9bnVsbDtmb3IodmFyIG4gaW4gZSl0PT09ZVtuXSYmKHJ8fChyPVtdKSxyLnB1c2goMHxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHQ9PT1lW3JdKXJldHVybiAwfHI7cmV0dXJuIGguY2hhckNvZGVUb0dseXBoSWRbaC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10LGgubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfXZhciBiPXQuc2VhY3M7aWYoaCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJmImJmIubGVuZ3RoKXt2YXIgdz1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsUz10LmdldENoYXJzZXQoKSx4PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBPIGluIGIpe3ZhciBBPWJbT3w9MF0sQz1jLlN0YW5kYXJkRW5jb2RpbmdbQVsyXV0sRj1jLlN0YW5kYXJkRW5jb2RpbmdbQVszXV0sUD1TLmluZGV4T2YoQyksVD1TLmluZGV4T2YoRik7aWYoIShQPDB8fFQ8MCkpe3ZhciBJPXt4OkFbMF0qd1swXStBWzFdKndbMl0rd1s0XSx5OkFbMF0qd1sxXStBWzFdKndbM10rd1s1XX0sRT15KHUsTyk7aWYoRSl7dmFyIGosTT1rKEUpO3RyeXtmb3IoTS5zKCk7IShqPU0ubigpKS5kb25lOyl7dmFyIF89ai52YWx1ZSxMPWguY2hhckNvZGVUb0dseXBoSWQsUj1tKEwsUCksTj1tKEwsVCk7eFtfXT17YmFzZUZvbnRDaGFyQ29kZTpSLGFjY2VudEZvbnRDaGFyQ29kZTpOLGFjY2VudE9mZnNldDpJfX19Y2F0Y2goZSl7TS5lKGUpfWZpbmFsbHl7TS5mKCl9fX19ci5zZWFjTWFwPXh9dmFyIFU9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSwkPW5ldyB2Lk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4gJC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSwkLmFkZFRhYmxlKCJPUy8yIix6KHIsZCkpLCQuYWRkVGFibGUoImNtYXAiLEcoZCxwLGcpKSwkLmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrQihVKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Ioci5kZXNjZW50KSsiD8O/IitCKHIuYXNjZW50KStEKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIiksJC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Ioci5hc2NlbnQpK0Ioci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Ioci5jYXBIZWlnaHQpK0IoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitEKGcpKSwkLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2Zvcih2YXIgZT10LmNoYXJzdHJpbmdzLHI9dC5jZmY/dC5jZmYud2lkdGhzOm51bGwsbj0iXDBcMFwwXDAiLGE9MSxpPWc7YTxpO2ErKyl7dmFyIG89MDtpZihlKXt2YXIgcz1lW2EtMV07bz0id2lkdGgiaW4gcz9zLndpZHRoOjB9ZWxzZSByJiYobz1NYXRoLmNlaWwoclthXXx8MCkpO24rPUQobykrRCgwKX1yZXR1cm4gbn0oKSksJC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK0QoZykpLCQuYWRkVGFibGUoIm5hbWUiLFkoZSkpLCQuYWRkVGFibGUoInBvc3QiLFcocikpLCQudG9BcnJheSgpfX0se2tleToic3BhY2VXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxyPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07dDxyLmxlbmd0aDt0Kyspe3ZhciBhPXJbdF07aWYoYSBpbiB0aGlzLndpZHRocyl7ZT10aGlzLndpZHRoc1thXTticmVha312YXIgaT0oMCxzLmdldEdseXBoc1VuaWNvZGUpKClbYV0sbz0wO2lmKHRoaXMuY29tcG9zaXRlJiZ0aGlzLmNNYXAuY29udGFpbnMoaSkmJiJzdHJpbmciPT10eXBlb2Yobz10aGlzLmNNYXAubG9va3VwKGkpKSYmKG89SChpLG8pKSwhbyYmdGhpcy50b1VuaWNvZGUmJihvPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoaSkpLG88PTAmJihvPWkpLGU9dGhpcy53aWR0aHNbb10pYnJlYWt9cmV0dXJuIGU9ZXx8dGhpcy5kZWZhdWx0V2lkdGgsKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLGUpfX0se2tleToiX2NoYXJUb0dseXBoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzJiZzLmlzU3BhY2U9PT1pKXJldHVybiBzO3ZhciBjPWU7dGhpcy5jTWFwJiZ0aGlzLmNNYXAuY29udGFpbnMoZSkmJiJzdHJpbmciPT10eXBlb2YoYz10aGlzLmNNYXAubG9va3VwKGUpKSYmKGM9SChlLGMpKSwibnVtYmVyIiE9dHlwZW9mKHI9dGhpcy53aWR0aHNbY10pJiYocj10aGlzLmRlZmF1bHRXaWR0aCk7dmFyIHU9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXSxsPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGwmJihsPVN0cmluZy5mcm9tQ2hhckNvZGUobCkpO3ZhciBmPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpZih0PXRoaXMudG9Gb250Q2hhcltlXXx8ZSx0aGlzLm1pc3NpbmdGaWxlKXt2YXIgaD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT1oJiYiIiE9PWh8fCJUeXBlMSIhPT10aGlzLnR5cGV8fCh0PTMyKSx0PSgwLG8ubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHQpfXRoaXMuaXNUeXBlM0ZvbnQmJihhPXQpO3ZhciBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe2Y9ITA7dmFyIHA9dGhpcy5zZWFjTWFwW2VdO3Q9cC5iYXNlRm9udENoYXJDb2RlLGQ9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHAuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6cC5hY2NlbnRPZmZzZXR9fXZhciBnPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8PTExMTQxMTE/Zz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdCh0KSkpLHM9bmV3IF8oZSxnLGwsZCxyLHUsYSxpLGYpLHRoaXMuX2dseXBoQ2FjaGVbZV09c319LHtrZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUubGVuZ3RoLGE9MDthPG47KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsYSxyKTt2YXIgaT1yLmNoYXJjb2RlLG89ci5sZW5ndGg7YSs9bzt2YXIgcz10aGlzLl9jaGFyVG9HbHlwaChpLDE9PT1vJiYzMj09PWUuY2hhckNvZGVBdChhLTEpKTt0LnB1c2gocyl9ZWxzZSBmb3IodmFyIGM9MCx1PWUubGVuZ3RoO2M8dTsrK2Mpe3ZhciBsPWUuY2hhckNvZGVBdChjKSxmPXRoaXMuX2NoYXJUb0dseXBoKGwsMzI9PT1sKTt0LnB1c2goZil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH19LHtrZXk6ImdldENoYXJQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMuY01hcClmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTA7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO3ZhciBhPXIubGVuZ3RoO3QucHVzaChbbixuK2FdKSxuKz1hfWVsc2UgZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH19LHtrZXk6ImdseXBoQ2FjaGVWYWx1ZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfX0se2tleToiZW5jb2RlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPVtdLG49W10sYT1mdW5jdGlvbigpe3JldHVybiByLmxlbmd0aCUyPT0xfSxpPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgbC5JZGVudGl0eVRvVW5pY29kZU1hcD9mdW5jdGlvbihlKXtyZXR1cm4gdC50b1VuaWNvZGUuY2hhckNvZGVPZihlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpfSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1lLmNvZGVQb2ludEF0KG8pO2lmKGM+NTUyOTUmJihjPDU3MzQ0fHxjPjY1NTMzKSYmbysrLHRoaXMudG9Vbmljb2RlKXt2YXIgdT1pKGMpO2lmKC0xIT09dSl7YSgpJiYoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApO2Zvcih2YXIgZj0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aCh1KToxKS0xO2Y+PTA7Zi0tKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHU+PjgqZiYyNTUpKTtjb250aW51ZX19YSgpfHwoci5wdXNoKG4uam9pbigiIikpLG4ubGVuZ3RoPTApLG4ucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSl9cmV0dXJuIHIucHVzaChuLmpvaW4oIiIpKSxyfX1dKSxlfSgpO3QuRm9udD1LO3ZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtBKHRoaXMsZSksdGhpcy5lcnJvcj10LHRoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIix0aGlzLm1pc3NpbmdGaWxlPSEwfXJldHVybiBGKGUsW3trZXk6ImNoYXJzVG9HbHlwaHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSx7a2V5OiJlbmNvZGVTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlXX19LHtrZXk6ImV4cG9ydERhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1dKSxlfSgpO3QuRXJyb3JGb250PUp9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZUb3BEaWN0PXQuQ0ZGU3RyaW5ncz10LkNGRlN0YW5kYXJkU3RyaW5ncz10LkNGRlByaXZhdGVEaWN0PXQuQ0ZGUGFyc2VyPXQuQ0ZGSW5kZXg9dC5DRkZIZWFkZXI9dC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGQ2hhcnNldD10LkNGRj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY1KSxpPXIoMTY2KTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZChlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBzKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmMoZSx0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxjKGUsdCl9ZnVuY3Rpb24gdShlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1sKGUpO2lmKHQpe3ZhciBhPWwodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWQoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIGQoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHAoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9wKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1mKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmdihlLnByb3RvdHlwZSx0KSxyJiZ2KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXTt0LkNGRlN0YW5kYXJkU3RyaW5ncz1tO3ZhciBiPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLHc9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2codGhpcyxlKSx0aGlzLmJ5dGVzPXQuZ2V0Qnl0ZXMoKSx0aGlzLnByb3BlcnRpZXM9cix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFufXJldHVybiB5KGUsW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBTO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoUCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixmPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZiYmKGUuZm9udE1hdHJpeD1mKTt2YXIgaCxkLHA9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYocCYmKGUuYXNjZW50PU1hdGgubWF4KHBbM10scFsxXSksZS5kZXNjZW50PU1hdGgubWluKHBbMV0scFszXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIGc9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix2PTAseT1nLmNvdW50O3Y8eTsrK3Ype3ZhciBtPWcuZ2V0KHYpLGI9dGhpcy5jcmVhdGVEaWN0KFAsdGhpcy5wYXJzZURpY3QobSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYiksdC5mZEFycmF5LnB1c2goYil9ZD1udWxsLGg9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2UgaD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSksZD10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsaC5jaGFyc2V0KTt0LmNoYXJzZXQ9aCx0LmVuY29kaW5nPWQ7dmFyIHc9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpsLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9dy5jaGFyU3RyaW5ncyx0LnNlYWNzPXcuc2VhY3MsdC53aWR0aHM9dy53aWR0aHMsdH19LHtrZXk6InBhcnNlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmJ5dGVzLHQ9ZS5sZW5ndGgscj0wO3I8dCYmMSE9PWVbcl07KSsrcjtpZihyPj10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTswIT09ciYmKCgwLG4uaW5mbykoImNmZiBkYXRhIGlzIHNoaWZ0ZWQiKSxlPWUuc3ViYXJyYXkociksdGhpcy5ieXRlcz1lKTt2YXIgYT1lWzBdLGk9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybntvYmo6bmV3IHgoYSxpLG8scyksZW5kUG9zOm99fX0se2tleToicGFyc2VEaWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wO3ZhciByLGE9W10saT1bXTt0PTA7Zm9yKHZhciBvPWUubGVuZ3RoO3Q8bzspe3ZhciBzPWVbdF07czw9MjE/KDEyPT09cyYmKHM9czw8OHxlWysrdF0pLGkucHVzaChbcyxhXSksYT1bXSwrK3QpOmEucHVzaCgocj12b2lkIDAsMzA9PT0ocj1lW3QrK10pP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IEEsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGM9YVtlKytdLHU9ZSsoaSsxKSpjLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIGw9MCxmPTA7ZjxjOysrZilsPDw9OCxsKz1hW2UrK107by5wdXNoKHUrbCl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBoPW9bdF0sZD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShoLGQpKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fX0se2tleToicGFyc2VOYW1lSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGkpKX1yZXR1cm4gdH19LHtrZXk6InBhcnNlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgTyxyPTAsYT1lLmNvdW50O3I8YTsrK3Ipe3ZhciBpPWUuZ2V0KHIpO3QuYWRkKCgwLG4uYnl0ZXNUb1N0cmluZykoaSkpfXJldHVybiB0fX0se2tleToiY3JlYXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPW5ldyBlKHIpLHM9aCh0KTt0cnl7Zm9yKHMucygpOyEobj1zLm4oKSkuZG9uZTspe3ZhciBjPShhPW4udmFsdWUsaT0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGEpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGEsaSl8fGQoYSxpKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpKSx1PWNbMF0sbD1jWzFdO28uc2V0QnlLZXkodSxsKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG99fSx7a2V5OiJwYXJzZUNoYXJTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCF0fHxlLmNhbGxEZXB0aD4xMClyZXR1cm4hMTtmb3IodmFyIGk9ZS5zdGFja1NpemUsbz1lLnN0YWNrLHM9dC5sZW5ndGgsYz0wO2M8czspe3ZhciB1PXRbYysrXSxsPW51bGw7aWYoMTI9PT11KXt2YXIgZj10W2MrK107MD09PWY/KHRbYy0yXT0xMzksdFtjLTFdPTIyLGk9MCk6bD13W2ZdfWVsc2UgaWYoMjg9PT11KW9baV09KHRbY108PDI0fHRbYysxXTw8MTYpPj4xNixjKz0yLGkrKztlbHNlIGlmKDE0PT09dSl7aWYoaT49NCYmKGktPTQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSlyZXR1cm4gZS5zZWFjPW8uc2xpY2UoaSxpKzQpLCExO2w9Ylt1XX1lbHNlIGlmKHU+PTMyJiZ1PD0yNDYpb1tpXT11LTEzOSxpKys7ZWxzZSBpZih1Pj0yNDcmJnU8PTI1NClvW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtjXSsxMDg6LSh1LTI1MTw8OCktdFtjXS0xMDgsYysrLGkrKztlbHNlIGlmKDI1NT09PXUpb1tpXT0odFtjXTw8MjR8dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKS82NTUzNixjKz00LGkrKztlbHNlIGlmKDE5PT09dXx8MjA9PT11KWUuaGludHMrPWk+PjEsYys9ZS5oaW50cys3Pj4zLGklPTIsbD1iW3VdO2Vsc2V7aWYoMTA9PT11fHwyOT09PXUpe3ZhciBoPXZvaWQgMDtpZighKGg9MTA9PT11P3I6YSkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrbC5pZCksITE7dmFyIGQ9MzI3Njg7aC5jb3VudDwxMjQwP2Q9MTA3OmguY291bnQ8MzM5MDAmJihkPTExMzEpO3ZhciBwPW9bLS1pXStkO2lmKHA8MHx8cD49aC5jb3VudHx8aXNOYU4ocCkpcmV0dXJuIGw9Ylt1XSwoMCxuLndhcm4pKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitsLmlkKSwhMTtpZihlLnN0YWNrU2l6ZT1pLGUuY2FsbERlcHRoKyssIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsaC5nZXQocCkscixhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tLGk9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT11KXJldHVybiBlLnN0YWNrU2l6ZT1pLCEwO2lmKDA9PT11JiZjPT09dC5sZW5ndGgpdFtjLTFdPTE0LGw9YlsxNF07ZWxzZXtpZig5PT09dSl7dC5jb3B5V2l0aGluKGMtMSxjLC0xKSxjLT0xLHMtPTE7Y29udGludWV9bD1iW3VdfX1pZihsKXtpZihsLnN0ZW0mJihlLmhpbnRzKz1pPj4xLDM9PT11fHwyMz09PXU/ZS5oYXNWU3RlbXM9ITA6IWUuaGFzVlN0ZW1zfHwxIT09dSYmMTghPT11fHwoKDAsbi53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIiksdFtjLTFdPTE9PT11PzM6MjMpKSwibWluImluIGwmJiFlLnVuZGVmU3RhY2smJmk8bC5taW4pcmV0dXJuKDAsbi53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2wuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrbC5taW4pLDA9PT1pJiYodFtjLTFdPTE0LCEwKTtlLmZpcnN0U3RhY2tDbGVhcmluZyYmbC5zdGFja0NsZWFyaW5nJiYoZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKGktPWwubWluKT49MiYmbC5zdGVtP2klPTI6aT4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIiksaT4wJiYoZS53aWR0aD1vW2ktMV0pKSwic3RhY2tEZWx0YSJpbiBsPygic3RhY2tGbiJpbiBsJiZsLnN0YWNrRm4obyxpKSxpKz1sLnN0YWNrRGVsdGEpOmwuc3RhY2tDbGVhcmluZz9pPTA6bC5yZXNldFN0YWNrPyhpPTAsZS51bmRlZlN0YWNrPSExKTpsLnVuZGVmU3RhY2smJihpPTAsZS51bmRlZlN0YWNrPSEwLGUuZmlyc3RTdGFja0NsZWFyaW5nPSExKX19cmV0dXJuIHM8dC5sZW5ndGgmJnQuZmlsbCgxNCxzKSxlLnN0YWNrU2l6ZT1pLCEwfX0se2tleToicGFyc2VDaGFyU3RyaW5ncyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY2hhclN0cmluZ3Mscj1lLmxvY2FsU3VickluZGV4LGE9ZS5nbG9iYWxTdWJySW5kZXgsaT1lLmZkU2VsZWN0LG89ZS5mZEFycmF5LHM9ZS5wcml2YXRlRGljdCxjPVtdLHU9W10sbD10LmNvdW50LGY9MDtmPGw7ZisrKXt2YXIgaD10LmdldChmKSxkPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX0scD0hMCxnPW51bGwsdj1zO2lmKGkmJm8ubGVuZ3RoKXt2YXIgeT1pLmdldEZESW5kZXgoZik7LTE9PT15JiYoKDAsbi53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKSxwPSExKSx5Pj1vLmxlbmd0aCYmKCgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpLHA9ITEpLHAmJihnPSh2PW9beV0ucHJpdmF0ZURpY3QpLnN1YnJzSW5kZXgpfWVsc2UgciYmKGc9cik7aWYocCYmKHA9dGhpcy5wYXJzZUNoYXJTdHJpbmcoZCxoLGcsYSkpLG51bGwhPT1kLndpZHRoKXt2YXIgbT12LmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO3VbZl09bStkLndpZHRofWVsc2V7dmFyIGI9di5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTt1W2ZdPWJ9bnVsbCE9PWQuc2VhYyYmKGNbZl09ZC5zZWFjKSxwfHx0LnNldChmLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczp1fX19LHtrZXk6ImVtcHR5UHJpdmF0ZURpY3Rpb25hcnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChJLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fX0se2tleToicGFyc2VQcml2YXRlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNOYW1lKCJQcml2YXRlIikpe3ZhciB0PWUuZ2V0QnlOYW1lKCJQcml2YXRlIik7aWYoQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoKXt2YXIgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLG89dGhpcy5wYXJzZURpY3QoaSkscz10aGlzLmNyZWF0ZURpY3QoSSxvLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1zLHMuZ2V0QnlOYW1lKCJTdWJycyIpKXt2YXIgYz1zLmdldEJ5TmFtZSgiU3VicnMiKSx1PW4rYztpZigwPT09Y3x8dT49dGhpcy5ieXRlcy5sZW5ndGgpdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2Vsc2V7dmFyIGw9dGhpcy5wYXJzZUluZGV4KHUpO3Muc3VicnNJbmRleD1sLm9ian19fX1lbHNlIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIil9ZWxzZSB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl9fSx7a2V5OiJwYXJzZUNoYXJzZXRzIix2YWx1ZTpmdW5jdGlvbihlLHQscixpKXtpZigwPT09ZSlyZXR1cm4gbmV3IGooITAsRS5JU09fQURPQkUsYS5JU09BZG9iZUNoYXJzZXQpO2lmKDE9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVCxhLkV4cGVydENoYXJzZXQpO2lmKDI9PT1lKXJldHVybiBuZXcgaighMCxFLkVYUEVSVF9TVUJTRVQsYS5FeHBlcnRTdWJzZXRDaGFyc2V0KTt2YXIgbyxzLGMsdT10aGlzLmJ5dGVzLGw9ZSxmPXVbZSsrXSxoPVtpPzA6Ii5ub3RkZWYiXTtzd2l0Y2godC09MSxmKXtjYXNlIDA6Zm9yKGM9MDtjPHQ7YysrKW89dVtlKytdPDw4fHVbZSsrXSxoLnB1c2goaT9vOnIuZ2V0KG8pKTticmVhaztjYXNlIDE6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89dVtlKytdPDw4fHVbZSsrXSxzPXVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2Nhc2UgMjpmb3IoO2gubGVuZ3RoPD10Oylmb3Iobz11W2UrK108PDh8dVtlKytdLHM9dVtlKytdPDw4fHVbZSsrXSxjPTA7Yzw9cztjKyspaC5wdXNoKGk/bysrOnIuZ2V0KG8rKykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX12YXIgZD1lLHA9dS5zdWJhcnJheShsLGQpO3JldHVybiBuZXcgaighMSxmLGgscCl9fSx7a2V5OiJwYXJzZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbyxzLGMsdT1PYmplY3QuY3JlYXRlKG51bGwpLGw9dGhpcy5ieXRlcyxmPSExLGg9bnVsbDtpZigwPT09ZXx8MT09PWUpe2Y9ITAsbz1lO3ZhciBkPWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKHM9MCxjPWEubGVuZ3RoO3M8YztzKyspe3ZhciBwPWQuaW5kZXhPZihhW3NdKTstMSE9PXAmJih1W3BdPXMpfX1lbHNle3ZhciBnPWU7c3dpdGNoKDEyNyYobz1sW2UrK10pKXtjYXNlIDA6dmFyIHY9bFtlKytdO2ZvcihzPTE7czw9djtzKyspdVtsW2UrK11dPXM7YnJlYWs7Y2FzZSAxOnZhciB5PWxbZSsrXSxtPTE7Zm9yKHM9MDtzPHk7cysrKWZvcih2YXIgYj1sW2UrK10sdz1sW2UrK10saz1iO2s8PWIrdztrKyspdVtrXT1tKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KG8sIiBpbiBDRkYiKSl9dmFyIFM9ZTsxMjgmbyYmKGxbZ10mPTEyNyxmdW5jdGlvbigpe3ZhciB0PWxbZSsrXTtmb3Iocz0wO3M8dDtzKyspe3ZhciBuPWxbZSsrXSxpPShsW2UrK108PDgpKygyNTUmbFtlKytdKTt1W25dPWEuaW5kZXhPZihyLmdldChpKSl9fSgpKSxoPWwuc3ViYXJyYXkoZyxTKX1yZXR1cm4gbmV3IE0oZixvJj0xMjcsdSxoKX19LHtrZXk6InBhcnNlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBjPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGM7KytyKXt2YXIgdT1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09dSYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx1PTApO2Zvcih2YXIgbD1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPXU7aDxmOysraClvLnB1c2gobCl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IF8oaSxvKX19XSksZX0oKTt0LkNGRlBhcnNlcj1rO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2codGhpcyxlKSx0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyBPLHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiB5KGUsW3trZXk6ImR1cGxpY2F0ZUZpcnN0R2x5cGgiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGFyU3RyaW5ncy5jb3VudD49NjU1MzUpKDAsbi53YXJuKSgiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7ZWxzZXt2YXIgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKSx0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfX19LHtrZXk6Imhhc0dseXBoSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fV0pLGV9KCk7dC5DRkY9Uzt2YXIgeD15KChmdW5jdGlvbiBlKHQscixuLGEpe2codGhpcyxlKSx0aGlzLm1ham9yPXQsdGhpcy5taW5vcj1yLHRoaXMuaGRyU2l6ZT1uLHRoaXMub2ZmU2l6ZT1hfSkpO3QuQ0ZGSGVhZGVyPXg7dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMuc3RyaW5ncz1bXX1yZXR1cm4geShlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0zOTA/bVtlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOm1bMF19fSx7a2V5OiJnZXRTSUQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW0uaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDotMSE9PSh0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpKT90KzM5MTotMX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9fSx7a2V5OiJjb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fV0pLGV9KCk7dC5DRkZTdHJpbmdzPU87dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiB5KGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMub2JqZWN0cy5wdXNoKGUpfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfX0se2tleToiY291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1dKSxlfSgpO3QuQ0ZGSW5kZXg9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5rZXlUb05hbWVNYXA9dC5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9dC5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz10LmRlZmF1bHRzLHRoaXMudHlwZXM9dC50eXBlcyx0aGlzLm9wY29kZXM9dC5vcGNvZGVzLHRoaXMub3JkZXI9dC5vcmRlcix0aGlzLnN0cmluZ3M9cix0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6InNldEJ5S2V5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwO3ZhciByLGE9aCh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYoaXNOYU4oaSkpcmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJy5jb25jYXQodCwnIiBmb3Iga2V5ICInKS5jb25jYXQoZSwnIi4nKSksITB9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXZhciBvPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1vJiYic2lkIiE9PW8mJiJvZmZzZXQiIT09b3x8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH19LHtrZXk6InNldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH19LHtrZXk6Imhhc05hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfX0se2tleToiZ2V0QnlOYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19fSx7a2V5OiJyZW1vdmVCeU5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19fV0sW3trZXk6ImNyZWF0ZVRhYmxlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfSxuPWgoZSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlLGk9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Iua2V5VG9OYW1lTWFwW2ldPWFbMV0sci5uYW1lVG9LZXlNYXBbYVsxXV09aSxyLnR5cGVzW2ldPWFbMl0sci5kZWZhdWx0c1tpXT1hWzNdLHIub3Bjb2Rlc1tpXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dLHIub3JkZXIucHVzaChpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9fV0pLGV9KCksRj1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLFA9ZnVuY3Rpb24oZSl7cyhyLGUpO3ZhciB0PXUocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHIudGFibGVzLGUpKS5wcml2YXRlRGljdD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKEYpKX19XSkscn0oQyk7dC5DRkZUb3BEaWN0PVA7dmFyIFQ9W1s2LCJCbHVlVmFsdWVzIiwiZGVsdGEiLG51bGxdLFs3LCJPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFs4LCJGYW1pbHlCbHVlcyIsImRlbHRhIixudWxsXSxbOSwiRmFtaWx5T3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbWzEyLDldLCJCbHVlU2NhbGUiLCJudW0iLC4wMzk2MjVdLFtbMTIsMTBdLCJCbHVlU2hpZnQiLCJudW0iLDddLFtbMTIsMTFdLCJCbHVlRnV6eiIsIm51bSIsMV0sWzEwLCJTdGRIVyIsIm51bSIsbnVsbF0sWzExLCJTdGRWVyIsIm51bSIsbnVsbF0sW1sxMiwxMl0sIlN0ZW1TbmFwSCIsImRlbHRhIixudWxsXSxbWzEyLDEzXSwiU3RlbVNuYXBWIiwiZGVsdGEiLG51bGxdLFtbMTIsMTRdLCJGb3JjZUJvbGQiLCJudW0iLDBdLFtbMTIsMTddLCJMYW5ndWFnZUdyb3VwIiwibnVtIiwwXSxbWzEyLDE4XSwiRXhwYW5zaW9uRmFjdG9yIiwibnVtIiwuMDZdLFtbMTIsMTldLCJpbml0aWFsUmFuZG9tU2VlZCIsIm51bSIsMF0sWzIwLCJkZWZhdWx0V2lkdGhYIiwibnVtIiwwXSxbMjEsIm5vbWluYWxXaWR0aFgiLCJudW0iLDBdLFsxOSwiU3VicnMiLCJvZmZzZXQiLG51bGxdXSxJPWZ1bmN0aW9uKGUpe3MocixlKTt2YXIgdD11KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGcodGhpcyxyKSwobj10LmNhbGwodGhpcyxyLnRhYmxlcyxlKSkuc3VicnNJbmRleD1udWxsLG59cmV0dXJuIHkocixudWxsLFt7a2V5OiJ0YWJsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKFQpKX19XSkscn0oQyk7dC5DRkZQcml2YXRlRGljdD1JO3ZhciBFPXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9LGo9eSgoZnVuY3Rpb24gZSh0LHIsbixhKXtnKHRoaXMsZSksdGhpcy5wcmVkZWZpbmVkPXQsdGhpcy5mb3JtYXQ9cix0aGlzLmNoYXJzZXQ9bix0aGlzLnJhdz1hfSkpO3QuQ0ZGQ2hhcnNldD1qO3ZhciBNPXkoKGZ1bmN0aW9uIGUodCxyLG4sYSl7Zyh0aGlzLGUpLHRoaXMucHJlZGVmaW5lZD10LHRoaXMuZm9ybWF0PXIsdGhpcy5lbmNvZGluZz1uLHRoaXMucmF3PWF9KSksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXtnKHRoaXMsZSksdGhpcy5mb3JtYXQ9dCx0aGlzLmZkU2VsZWN0PXJ9cmV0dXJuIHkoZSxbe2tleToiZ2V0RkRJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8ZT49dGhpcy5mZFNlbGVjdC5sZW5ndGg/LTE6dGhpcy5mZFNlbGVjdFtlXX19XSksZX0oKTt0LkNGRkZEU2VsZWN0PV87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zyh0aGlzLGUpLHRoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB5KGUsW3trZXk6ImlzVHJhY2tpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c319LHtrZXk6InRyYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH19LHtrZXk6Im9mZnNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9fSx7a2V5OiJzZXRFbnRyeUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Zm9yKHZhciBhPXIuZGF0YSxpPXRoaXMub2Zmc2V0c1tlXSxvPTAscz10Lmxlbmd0aDtvPHM7KytvKXt2YXIgYz01Km8raSx1PWMrMSxsPWMrMixmPWMrMyxoPWMrNDtpZigyOSE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtsXXx8MCE9PWFbZl18fDAhPT1hW2hdKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO3ZhciBkPXRbb107YVtjXT0yOSxhW3VdPWQ+PjI0JjI1NSxhW2xdPWQ+PjE2JjI1NSxhW2ZdPWQ+PjgmMjU1LGFbaF09MjU1JmR9fX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2codGhpcyxlKSx0aGlzLmNmZj10fXJldHVybiB5KGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7dmFyIG8scz1oKGUuZmRBcnJheSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9aS5zbGljZSgwKTtjLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKHU9bi5VdGlsLnRyYW5zZm9ybSh1LGMuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKSxjLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsdSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX12YXIgbD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7bCYmbC5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKSxlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQoZi5vdXRwdXQpO3ZhciBkPWYudHJhY2tlcnNbMF0scD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQocCk7dmFyIGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGcpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClkLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHY9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZCh2KX12YXIgeT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7ZC5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKHkpO3ZhciBtPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGQuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQobSksZS5pc0NJREZvbnQpe2Quc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIGI9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYiksZj10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGQuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZChmLm91dHB1dCk7dmFyIHc9Zi50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHcsdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZF0sdCksdC5hZGQoWzBdKSx0LmRhdGF9fSx7a2V5OiJlbmNvZGVOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfX0se2tleToiZW5jb2RlRmxvYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQudG9TdHJpbmcoKSxuPWUuRW5jb2RlRmxvYXRSZWdFeHAuZXhlYyhyKTtpZihuKXt2YXIgYT1wYXJzZUZsb2F0KCIxZSIrKChuWzJdPytuWzJdOjApK25bMV0ubGVuZ3RoKSk7cj0oTWF0aC5yb3VuZCh0KmEpL2EpLnRvU3RyaW5nKCl9dmFyIGksbyxzPSIiO2ZvcihpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYz1yW2ldO3MrPSJlIj09PWM/Ii0iPT09clsrK2ldPyJjIjoiYiI6Ii4iPT09Yz8iYSI6Ii0iPT09Yz8iZSI6Y312YXIgdT1bMzBdO2ZvcihpPTAsbz0ocys9MSZzLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2k8bztpKz0yKXUucHVzaChwYXJzZUludChzLnN1YnN0cmluZyhpLGkrMiksMTYpKTtyZXR1cm4gdX19LHtrZXk6ImVuY29kZUludGVnZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXX19LHtrZXk6ImNvbXBpbGVIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfX0se2tleToiY29tcGlsZU5hbWVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgQSxhPWgoZSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXtmb3IodmFyIGk9dC52YWx1ZSxvPU1hdGgubWluKGkubGVuZ3RoLDEyNykscz1uZXcgQXJyYXkobyksYz0wO2M8bztjKyspe3ZhciB1PWlbY107KHU8IiEifHx1PiJ+Inx8IlsiPT09dXx8Il0iPT09dXx8IigiPT09dXx8IikiPT09dXx8InsiPT09dXx8In0iPT09dXx8IjwiPT09dXx8Ij4iPT09dXx8Ii8iPT09dXx8IiUiPT09dSkmJih1PSJfIiksc1tjXT11fSIiPT09KHM9cy5qb2luKCIiKSkmJihzPSJCYWRfRm9udF9OYW1lIiksci5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShzKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleChyKX19LHtrZXk6ImNvbXBpbGVUb3BEaWN0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9W10saT1uZXcgQSxvPWgoZSk7dHJ5e2ZvcihvLnMoKTshKG49by5uKCkpLmRvbmU7KXt2YXIgcz1uLnZhbHVlO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyk7YS5wdXNoKGMpLGkuYWRkKHUpLGMub2Zmc2V0KHQpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6aT10aGlzLmNvbXBpbGVJbmRleChpLGEpfX19LHtrZXk6ImNvbXBpbGVQcml2YXRlRGljdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGM9bmV3IEwsdT10aGlzLmNvbXBpbGVEaWN0KHMsYyksbD1yLmxlbmd0aDtpZihjLm9mZnNldChsKSx1Lmxlbmd0aHx8KGw9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbdS5sZW5ndGgsbF0sciksci5hZGQodSkscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7Yy5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW3UubGVuZ3RoXSxyKSxyLmFkZChmKX19fX0se2tleToiY29tcGlsZURpY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1bXSxpPWgoZS5vcmRlcik7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlO2lmKHMgaW4gZS52YWx1ZXMpe3ZhciBjPWUudmFsdWVzW3NdLHU9ZS50eXBlc1tzXTtpZihBcnJheS5pc0FycmF5KHUpfHwodT1bdV0pLEFycmF5LmlzQXJyYXkoYyl8fChjPVtjXSksMCE9PWMubGVuZ3RoKXtmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpe3ZhciBkPXVbbF0scD1jW2xdO3N3aXRjaChkKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIocCkpKTticmVhaztjYXNlIm9mZnNldCI6dmFyIGc9ZS5rZXlUb05hbWVNYXBbc107dC5pc1RyYWNraW5nKGcpfHx0LnRyYWNrKGcsYS5sZW5ndGgpLGEucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2guYXBwbHkoYSxvKHRoaXMuZW5jb2RlTnVtYmVyKHApKSk7Zm9yKHZhciB2PTEseT1jLmxlbmd0aDt2PHk7Kyt2KWEucHVzaC5hcHBseShhLG8odGhpcy5lbmNvZGVOdW1iZXIoY1t2XSkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChkKSl9fWEucHVzaC5hcHBseShhLG8oZS5vcGNvZGVzW3NdKSl9fX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIGF9fSx7a2V5OiJjb21waWxlU3RyaW5nSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEEsYT1oKGUpO3RyeXtmb3IoYS5zKCk7ISh0PWEubigpKS5kb25lOyl7dmFyIGk9dC52YWx1ZTtyLmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKGkpKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHIpfX0se2tleToiY29tcGlsZUdsb2JhbFN1YnJJbmRleCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7dGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZSkpfX0se2tleToiY29tcGlsZUNoYXJTdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEEscj0wO3I8ZS5jb3VudDtyKyspe3ZhciBuPWUuZ2V0KHIpOzAhPT1uLmxlbmd0aD90LmFkZChuKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX19LHtrZXk6ImNvbXBpbGVDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXQtMTtpZihhKWk9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLG8+PjgmMjU1LDI1NSZvXSk7ZWxzZXsoaT1uZXcgVWludDhBcnJheSgxKzIqbykpWzBdPTA7Zm9yKHZhciBzPTAsYz1lLmNoYXJzZXQubGVuZ3RoLHU9ITEsbD0xO2w8aS5sZW5ndGg7bCs9Mil7dmFyIGY9MDtpZihzPGMpe3ZhciBoPWUuY2hhcnNldFtzKytdOy0xPT09KGY9ci5nZXRTSUQoaCkpJiYoZj0wLHV8fCh1PSEwLCgwLG4ud2FybikoIkNvdWxkbid0IGZpbmQgIi5jb25jYXQoaCwiIGluIENGRiBzdHJpbmdzIikpKSl9aVtsXT1mPj44JjI1NSxpW2wrMV09MjU1JmZ9fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfX0se2tleToiY29tcGlsZUVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9fSx7a2V5OiJjb21waWxlRkRTZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmZvcm1hdDtzd2l0Y2gobil7Y2FzZSAwOmZvcigodD1uZXcgVWludDhBcnJheSgxK2UuZmRTZWxlY3QubGVuZ3RoKSlbMF09bixyPTA7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspdFtyKzFdPWUuZmRTZWxlY3Rbcl07YnJlYWs7Y2FzZSAzOnZhciBhPWUuZmRTZWxlY3RbMF0saT1bbiwwLDAsMCwwLGFdO2ZvcihyPTE7cjxlLmZkU2VsZWN0Lmxlbmd0aDtyKyspe3ZhciBvPWUuZmRTZWxlY3Rbcl07byE9PWEmJihpLnB1c2gocj4+OCYyNTUsMjU1JnIsbyksYT1vKX12YXIgcz0oaS5sZW5ndGgtMykvMztpWzFdPXM+PjgmMjU1LGlbMl09MjU1JnMsaS5wdXNoKHI+PjgmMjU1LDI1NSZyKSx0PW5ldyBVaW50OEFycmF5KGkpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHQpfX0se2tleToiY29tcGlsZVR5cGVkQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KytyKXRbcl09ZVtyXTtyZXR1cm4gdH19LHtrZXk6ImNvbXBpbGVJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLHI9ZS5vYmplY3RzLG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuWzAsMF07dmFyIGEsaSxzPVtuPj44JjI1NSwyNTUmbl0sYz0xO2ZvcihhPTA7YTxuOysrYSljKz1yW2FdLmxlbmd0aDtpPWM8MjU2PzE6Yzw2NTUzNj8yOmM8MTY3NzcyMTY/Mzo0LHMucHVzaChpKTt2YXIgdT0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP3MucHVzaCgyNTUmdSk6Mj09PWk/cy5wdXNoKHU+PjgmMjU1LDI1NSZ1KTozPT09aT9zLnB1c2godT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1KTpzLnB1c2godT4+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnUpLHJbYV0mJih1Kz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXRbYV0mJnRbYV0ub2Zmc2V0KHMubGVuZ3RoKSxzLnB1c2guYXBwbHkocyxvKHJbYV0pKTtyZXR1cm4gc319XSxbe2tleToiRW5jb2RlRmxvYXRSZWdFeHAiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfX1dKSxlfSgpO3QuQ0ZGQ29tcGlsZXI9Un0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDAsdC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXSx0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sdC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMCx0LmdldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBhO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBzO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTt2YXIgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsIiIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsIiIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsIiIsIiIsIiIsImlzdXBlcmlvciIsIiIsIiIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsIiIsIiIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCIiLCJEb3RhY2NlbnRzbWFsbCIsIiIsIiIsIk1hY3JvbnNtYWxsIiwiIiwiIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiIiwiIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdO3QuRXhwZXJ0RW5jb2Rpbmc9cjt2YXIgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTt2YXIgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7dmFyIG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiYnVsbGV0IiwiRXVybyIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwiZmxvcmluIiwicXVvdGVkYmxiYXNlIiwiZWxsaXBzaXMiLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJjaXJjdW1mbGV4IiwicGVydGhvdXNhbmQiLCJTY2Fyb24iLCJndWlsc2luZ2xsZWZ0IiwiT0UiLCJidWxsZXQiLCJaY2Fyb24iLCJidWxsZXQiLCJidWxsZXQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsImJ1bGxldCIsImVuZGFzaCIsImVtZGFzaCIsInRpbGRlIiwidHJhZGVtYXJrIiwic2Nhcm9uIiwiZ3VpbHNpbmdscmlnaHQiLCJvZSIsImJ1bGxldCIsInpjYXJvbiIsIllkaWVyZXNpcyIsInNwYWNlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImN1cnJlbmN5IiwieWVuIiwiYnJva2VuYmFyIiwic2VjdGlvbiIsImRpZXJlc2lzIiwiY29weXJpZ2h0Iiwib3JkZmVtaW5pbmUiLCJndWlsbGVtb3RsZWZ0IiwibG9naWNhbG5vdCIsImh5cGhlbiIsInJlZ2lzdGVyZWQiLCJtYWNyb24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJhY3V0ZSIsIm11IiwicGFyYWdyYXBoIiwicGVyaW9kY2VudGVyZWQiLCJjZWRpbGxhIiwib25lc3VwZXJpb3IiLCJvcmRtYXNjdWxpbmUiLCJndWlsbGVtb3RyaWdodCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93biIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJBRSIsIkNjZWRpbGxhIiwiRWdyYXZlIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIkV0aCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT3RpbGRlIiwiT2RpZXJlc2lzIiwibXVsdGlwbHkiLCJPc2xhc2giLCJVZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIllhY3V0ZSIsIlRob3JuIiwiZ2VybWFuZGJscyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYXRpbGRlIiwiYWRpZXJlc2lzIiwiYXJpbmciLCJhZSIsImNjZWRpbGxhIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImV0aCIsIm50aWxkZSIsIm9ncmF2ZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib3RpbGRlIiwib2RpZXJlc2lzIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ5YWN1dGUiLCJ0aG9ybiIsInlkaWVyZXNpcyJdO3QuV2luQW5zaUVuY29kaW5nPW87dmFyIHM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPXM7dmFyIGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwLHQuZ2V0Rm9udFR5cGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3N3aXRjaChlKXtjYXNlIlR5cGUxIjpyZXR1cm4gcj9uLkZvbnRUeXBlLlRZUEUxU1RBTkRBUkQ6IlR5cGUxQyI9PT10P24uRm9udFR5cGUuVFlQRTFDOm4uRm9udFR5cGUuVFlQRTE7Y2FzZSJDSURGb250VHlwZTAiOnJldHVybiJDSURGb250VHlwZTBDIj09PXQ/bi5Gb250VHlwZS5DSURGT05UVFlQRTBDOm4uRm9udFR5cGUuQ0lERk9OVFRZUEUwO2Nhc2UiT3BlblR5cGUiOnJldHVybiBuLkZvbnRUeXBlLk9QRU5UWVBFO2Nhc2UiVHJ1ZVR5cGUiOnJldHVybiBuLkZvbnRUeXBlLlRSVUVUWVBFO2Nhc2UiQ0lERm9udFR5cGUyIjpyZXR1cm4gbi5Gb250VHlwZS5DSURGT05UVFlQRTI7Y2FzZSJNTVR5cGUxIjpyZXR1cm4gbi5Gb250VHlwZS5NTVRZUEUxO2Nhc2UiVHlwZTAiOnJldHVybiBuLkZvbnRUeXBlLlRZUEUwO2RlZmF1bHQ6cmV0dXJuIG4uRm9udFR5cGUuVU5LTk9XTn19LHQubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyxfXS9nLCItIikucmVwbGFjZSgvXHMvZywiIil9LHQucmVjb3ZlckdseXBoTmFtZT1jLHQudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixvLHUsbD1PYmplY3QuY3JlYXRlKG51bGwpLGY9ISEoZS5mbGFncyZzLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KWZvcih1PXQsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpZm9yKHU9KDAsYS5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKSxvPTA7bzx1Lmxlbmd0aDtvKyspbj1yLmluZGV4T2YodVtvXSksbFtvXT1uPj0wP246MDtlbHNlIGlmKGYpZm9yKG8gaW4gdClsW29dPXRbb107ZWxzZSBmb3IodT1hLlN0YW5kYXJkRW5jb2Rpbmcsbz0wO288dS5sZW5ndGg7bysrKW49ci5pbmRleE9mKHVbb10pLGxbb109bj49MD9uOjA7dmFyIGgsZD1lLmRpZmZlcmVuY2VzO2lmKGQpZm9yKG8gaW4gZCl7dmFyIHA9ZFtvXTtpZigtMT09PShuPXIuaW5kZXhPZihwKSkpe2h8fChoPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSk7dmFyIGc9YyhwLGgpO2chPT1wJiYobj1yLmluZGV4T2YoZykpfWxbb109bj49MD9uOjB9cmV0dXJuIGx9O3ZhciBuPXIoMiksYT1yKDE2NiksaT1yKDE2OCksbz1yKDE2OSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7dmFyIHM9e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07ZnVuY3Rpb24gYyhlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7dmFyIHI9KDAsby5nZXRVbmljb2RlRm9yR2x5cGgpKGUsdCk7aWYoLTEhPT1yKWZvcih2YXIgYSBpbiB0KWlmKHRbYV09PT1yKXJldHVybiBhO3JldHVybigwLG4uaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1zLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDEzNSk7Y29uc3QgYT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsbi5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQscik9PntyLnIodCksci5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+cCxnZXRDaGFyVW5pY29kZUNhdGVnb3J5OigpPT5kLGdldE5vcm1hbGl6ZWRVbmljb2RlczooKT0+dSxnZXRVbmljb2RlRm9yR2x5cGg6KCk9Pm8sZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5jLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5pLHJldmVyc2VJZlJ0bDooKT0+bH0pO3ZhciBuPXIoMTM1KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/YSgpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBvKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBjKGUpe2ZvcihsZXQgdD0wLHI9cy5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1zW3RdO2lmKGU+PXIuYmVnaW4mJmU8ci5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgdT0oMCxuLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIsKoIiwiIMyIIiwiwq8iLCIgzIQiLCLCtCIsIiDMgSIsIsK1IiwizrwiLCLCuCIsIiDMpyIsIsSyIiwiSUoiLCLEsyIsImlqIiwixL8iLCJMwrciLCLFgCIsImzCtyIsIsWJIiwiyrxuIiwixb8iLCJzIiwix4QiLCJExb0iLCLHhSIsIkTFviIsIseGIiwiZMW+Iiwix4ciLCJMSiIsIseIIiwiTGoiLCLHiSIsImxqIiwix4oiLCJOSiIsIseLIiwiTmoiLCLHjCIsIm5qIiwix7EiLCJEWiIsIseyIiwiRHoiLCLHsyIsImR6Iiwiy5giLCIgzIYiLCLLmSIsIiDMhyIsIsuaIiwiIMyKIiwiy5siLCIgzKgiLCLLnCIsIiDMgyIsIsudIiwiIMyLIiwizboiLCIgzYUiLCLOhCIsIiDMgSIsIs+QIiwizrIiLCLPkSIsIs64Iiwiz5IiLCLOpSIsIs+VIiwiz4YiLCLPliIsIs+AIiwiz7AiLCLOuiIsIs+xIiwiz4EiLCLPsiIsIs+CIiwiz7QiLCLOmCIsIs+1IiwizrUiLCLPuSIsIs6jIiwi1ociLCLVpdaCIiwi2bUiLCLYp9m0Iiwi2bYiLCLZiNm0Iiwi2bciLCLbh9m0Iiwi2bgiLCLZitm0Iiwi4LizIiwi4LmN4LiyIiwi4LqzIiwi4LuN4LqyIiwi4LucIiwi4Lqr4LqZIiwi4LudIiwi4Lqr4LqhIiwi4L23Iiwi4L6y4L6BIiwi4L25Iiwi4L6z4L6BIiwi4bqaIiwiYcq+Iiwi4b69IiwiIMyTIiwi4b6/IiwiIMyTIiwi4b+AIiwiIM2CIiwi4b++IiwiIMyUIiwi4oCCIiwiICIsIuKAgyIsIiAiLCLigIQiLCIgIiwi4oCFIiwiICIsIuKAhiIsIiAiLCLigIgiLCIgIiwi4oCJIiwiICIsIuKAiiIsIiAiLCLigJciLCIgzLMiLCLigKQiLCIuIiwi4oClIiwiLi4iLCLigKYiLCIuLi4iLCLigLMiLCLigLLigLIiLCLigLQiLCLigLLigLLigLIiLCLigLYiLCLigLXigLUiLCLigLciLCLigLXigLXigLUiLCLigLwiLCIhISIsIuKAviIsIiDMhSIsIuKBhyIsIj8/Iiwi4oGIIiwiPyEiLCLigYkiLCIhPyIsIuKBlyIsIuKAsuKAsuKAsuKAsiIsIuKBnyIsIiAiLCLigqgiLCJScyIsIuKEgCIsImEvYyIsIuKEgSIsImEvcyIsIuKEgyIsIsKwQyIsIuKEhSIsImMvbyIsIuKEhiIsImMvdSIsIuKEhyIsIsaQIiwi4oSJIiwiwrBGIiwi4oSWIiwiTm8iLCLihKEiLCJURUwiLCLihLUiLCLXkCIsIuKEtiIsIteRIiwi4oS3Iiwi15IiLCLihLgiLCLXkyIsIuKEuyIsIkZBWCIsIuKFoCIsIkkiLCLihaEiLCJJSSIsIuKFoiIsIklJSSIsIuKFoyIsIklWIiwi4oWkIiwiViIsIuKFpSIsIlZJIiwi4oWmIiwiVklJIiwi4oWnIiwiVklJSSIsIuKFqCIsIklYIiwi4oWpIiwiWCIsIuKFqiIsIlhJIiwi4oWrIiwiWElJIiwi4oWsIiwiTCIsIuKFrSIsIkMiLCLiha4iLCJEIiwi4oWvIiwiTSIsIuKFsCIsImkiLCLihbEiLCJpaSIsIuKFsiIsImlpaSIsIuKFsyIsIml2Iiwi4oW0IiwidiIsIuKFtSIsInZpIiwi4oW2IiwidmlpIiwi4oW3IiwidmlpaSIsIuKFuCIsIml4Iiwi4oW5IiwieCIsIuKFuiIsInhpIiwi4oW7IiwieGlpIiwi4oW8IiwibCIsIuKFvSIsImMiLCLihb4iLCJkIiwi4oW/IiwibSIsIuKIrCIsIuKIq+KIqyIsIuKIrSIsIuKIq+KIq+KIqyIsIuKIryIsIuKIruKIriIsIuKIsCIsIuKIruKIruKIriIsIuKRtCIsIigxKSIsIuKRtSIsIigyKSIsIuKRtiIsIigzKSIsIuKRtyIsIig0KSIsIuKRuCIsIig1KSIsIuKRuSIsIig2KSIsIuKRuiIsIig3KSIsIuKRuyIsIig4KSIsIuKRvCIsIig5KSIsIuKRvSIsIigxMCkiLCLikb4iLCIoMTEpIiwi4pG/IiwiKDEyKSIsIuKSgCIsIigxMykiLCLikoEiLCIoMTQpIiwi4pKCIiwiKDE1KSIsIuKSgyIsIigxNikiLCLikoQiLCIoMTcpIiwi4pKFIiwiKDE4KSIsIuKShiIsIigxOSkiLCLikociLCIoMjApIiwi4pKIIiwiMS4iLCLikokiLCIyLiIsIuKSiiIsIjMuIiwi4pKLIiwiNC4iLCLikowiLCI1LiIsIuKSjSIsIjYuIiwi4pKOIiwiNy4iLCLiko8iLCI4LiIsIuKSkCIsIjkuIiwi4pKRIiwiMTAuIiwi4pKSIiwiMTEuIiwi4pKTIiwiMTIuIiwi4pKUIiwiMTMuIiwi4pKVIiwiMTQuIiwi4pKWIiwiMTUuIiwi4pKXIiwiMTYuIiwi4pKYIiwiMTcuIiwi4pKZIiwiMTguIiwi4pKaIiwiMTkuIiwi4pKbIiwiMjAuIiwi4pKcIiwiKGEpIiwi4pKdIiwiKGIpIiwi4pKeIiwiKGMpIiwi4pKfIiwiKGQpIiwi4pKgIiwiKGUpIiwi4pKhIiwiKGYpIiwi4pKiIiwiKGcpIiwi4pKjIiwiKGgpIiwi4pKkIiwiKGkpIiwi4pKlIiwiKGopIiwi4pKmIiwiKGspIiwi4pKnIiwiKGwpIiwi4pKoIiwiKG0pIiwi4pKpIiwiKG4pIiwi4pKqIiwiKG8pIiwi4pKrIiwiKHApIiwi4pKsIiwiKHEpIiwi4pKtIiwiKHIpIiwi4pKuIiwiKHMpIiwi4pKvIiwiKHQpIiwi4pKwIiwiKHUpIiwi4pKxIiwiKHYpIiwi4pKyIiwiKHcpIiwi4pKzIiwiKHgpIiwi4pK0IiwiKHkpIiwi4pK1IiwiKHopIiwi4qiMIiwi4oir4oir4oir4oirIiwi4qm0IiwiOjo9Iiwi4qm1IiwiPT0iLCLiqbYiLCI9PT0iLCLiup8iLCLmr40iLCLiu7MiLCLpvp8iLCLivIAiLCLkuIAiLCLivIEiLCLkuKgiLCLivIIiLCLkuLYiLCLivIMiLCLkuL8iLCLivIQiLCLkuZkiLCLivIUiLCLkuoUiLCLivIYiLCLkuowiLCLivIciLCLkuqAiLCLivIgiLCLkuroiLCLivIkiLCLlhL8iLCLivIoiLCLlhaUiLCLivIsiLCLlhasiLCLivIwiLCLlhoIiLCLivI0iLCLlhpYiLCLivI4iLCLlhqsiLCLivI8iLCLlh6AiLCLivJAiLCLlh7UiLCLivJEiLCLliIAiLCLivJIiLCLlipsiLCLivJMiLCLli7kiLCLivJQiLCLljJUiLCLivJUiLCLljJoiLCLivJYiLCLljLgiLCLivJciLCLljYEiLCLivJgiLCLljZwiLCLivJkiLCLljakiLCLivJoiLCLljoIiLCLivJsiLCLljrYiLCLivJwiLCLlj4giLCLivJ0iLCLlj6MiLCLivJ4iLCLlm5ciLCLivJ8iLCLlnJ8iLCLivKAiLCLlo6siLCLivKEiLCLlpIIiLCLivKIiLCLlpIoiLCLivKMiLCLlpJUiLCLivKQiLCLlpKciLCLivKUiLCLlpbMiLCLivKYiLCLlrZAiLCLivKciLCLlroAiLCLivKgiLCLlr7giLCLivKkiLCLlsI8iLCLivKoiLCLlsKIiLCLivKsiLCLlsLgiLCLivKwiLCLlsa4iLCLivK0iLCLlsbEiLCLivK4iLCLlt5siLCLivK8iLCLlt6UiLCLivLAiLCLlt7EiLCLivLEiLCLlt74iLCLivLIiLCLlubIiLCLivLMiLCLluboiLCLivLQiLCLlub8iLCLivLUiLCLlu7QiLCLivLYiLCLlu74iLCLivLciLCLlvIsiLCLivLgiLCLlvJMiLCLivLkiLCLlvZAiLCLivLoiLCLlvaEiLCLivLsiLCLlvbMiLCLivLwiLCLlv4MiLCLivL0iLCLmiIgiLCLivL4iLCLmiLYiLCLivL8iLCLmiYsiLCLivYAiLCLmlK8iLCLivYEiLCLmlLQiLCLivYIiLCLmlociLCLivYMiLCLmlpciLCLivYQiLCLmlqQiLCLivYUiLCLmlrkiLCLivYYiLCLml6AiLCLivYciLCLml6UiLCLivYgiLCLmm7AiLCLivYkiLCLmnIgiLCLivYoiLCLmnKgiLCLivYsiLCLmrKAiLCLivYwiLCLmraIiLCLivY0iLCLmrbkiLCLivY4iLCLmrrMiLCLivY8iLCLmr4siLCLivZAiLCLmr5QiLCLivZEiLCLmr5siLCLivZIiLCLmsI8iLCLivZMiLCLmsJQiLCLivZQiLCLmsLQiLCLivZUiLCLngasiLCLivZYiLCLniKoiLCLivZciLCLniLYiLCLivZgiLCLniLsiLCLivZkiLCLniL8iLCLivZoiLCLniYciLCLivZsiLCLniZkiLCLivZwiLCLniZsiLCLivZ0iLCLniqwiLCLivZ4iLCLnjoQiLCLivZ8iLCLnjokiLCLivaAiLCLnk5wiLCLivaEiLCLnk6YiLCLivaIiLCLnlJgiLCLivaMiLCLnlJ8iLCLivaQiLCLnlKgiLCLivaUiLCLnlLAiLCLivaYiLCLnlosiLCLivaciLCLnlpIiLCLivagiLCLnmbYiLCLivakiLCLnmb0iLCLivaoiLCLnmq4iLCLivasiLCLnmr8iLCLivawiLCLnm64iLCLiva0iLCLnn5siLCLiva4iLCLnn6IiLCLiva8iLCLnn7MiLCLivbAiLCLnpLoiLCLivbEiLCLnprgiLCLivbIiLCLnpr4iLCLivbMiLCLnqbQiLCLivbQiLCLnq4siLCLivbUiLCLnq7kiLCLivbYiLCLnsbMiLCLivbciLCLns7giLCLivbgiLCLnvLYiLCLivbkiLCLnvZEiLCLivboiLCLnvooiLCLivbsiLCLnvr0iLCLivbwiLCLogIEiLCLivb0iLCLogIwiLCLivb4iLCLogJIiLCLivb8iLCLogLMiLCLivoAiLCLogb8iLCLivoEiLCLogokiLCLivoIiLCLoh6MiLCLivoMiLCLoh6oiLCLivoQiLCLoh7MiLCLivoUiLCLoh7wiLCLivoYiLCLoiIwiLCLivociLCLoiJsiLCLivogiLCLoiJ8iLCLivokiLCLoia4iLCLivooiLCLoibIiLCLivosiLCLoibgiLCLivowiLCLomY0iLCLivo0iLCLomasiLCLivo4iLCLooYAiLCLivo8iLCLooYwiLCLivpAiLCLooaMiLCLivpEiLCLopb4iLCLivpIiLCLoposiLCLivpMiLCLop5IiLCLivpQiLCLoqIAiLCLivpUiLCLosLciLCLivpYiLCLosYYiLCLivpciLCLosZUiLCLivpgiLCLosbgiLCLivpkiLCLosp0iLCLivpoiLCLotaQiLCLivpsiLCLotbAiLCLivpwiLCLotrMiLCLivp0iLCLouqsiLCLivp4iLCLou4oiLCLivp8iLCLovpsiLCLivqAiLCLovrAiLCLivqEiLCLovrUiLCLivqIiLCLpgpEiLCLivqMiLCLphYkiLCLivqQiLCLph4YiLCLivqUiLCLph4wiLCLivqYiLCLph5EiLCLivqciLCLplbciLCLivqgiLCLploAiLCLivqkiLCLpmJwiLCLivqoiLCLpmrYiLCLivqsiLCLpmrkiLCLivqwiLCLpm6giLCLivq0iLCLpnZEiLCLivq4iLCLpnZ4iLCLivq8iLCLpnaIiLCLivrAiLCLpnakiLCLivrEiLCLpn4siLCLivrIiLCLpn60iLCLivrMiLCLpn7MiLCLivrQiLCLpoIEiLCLivrUiLCLpoqgiLCLivrYiLCLpo5siLCLivrciLCLpo58iLCLivrgiLCLpppYiLCLivrkiLCLpppkiLCLivroiLCLppqwiLCLivrsiLCLpqqgiLCLivrwiLCLpq5giLCLivr0iLCLpq58iLCLivr4iLCLprKUiLCLivr8iLCLprK8iLCLiv4AiLCLprLIiLCLiv4EiLCLprLwiLCLiv4IiLCLprZoiLCLiv4MiLCLps6UiLCLiv4QiLCLpubUiLCLiv4UiLCLpub8iLCLiv4YiLCLpuqUiLCLiv4ciLCLpursiLCLiv4giLCLpu4MiLCLiv4kiLCLpu40iLCLiv4oiLCLpu5EiLCLiv4siLCLpu7kiLCLiv4wiLCLpu70iLCLiv40iLCLpvI4iLCLiv44iLCLpvJMiLCLiv48iLCLpvKAiLCLiv5AiLCLpvLsiLCLiv5EiLCLpvYoiLCLiv5IiLCLpvZIiLCLiv5MiLCLpvo0iLCLiv5QiLCLpvpwiLCLiv5UiLCLpvqAiLCLjgLYiLCLjgJIiLCLjgLgiLCLljYEiLCLjgLkiLCLljYQiLCLjgLoiLCLljYUiLCLjgpsiLCIg44KZIiwi44KcIiwiIOOCmiIsIuOEsSIsIuGEgCIsIuOEsiIsIuGEgSIsIuOEsyIsIuGGqiIsIuOEtCIsIuGEgiIsIuOEtSIsIuGGrCIsIuOEtiIsIuGGrSIsIuOEtyIsIuGEgyIsIuOEuCIsIuGEhCIsIuOEuSIsIuGEhSIsIuOEuiIsIuGGsCIsIuOEuyIsIuGGsSIsIuOEvCIsIuGGsiIsIuOEvSIsIuGGsyIsIuOEviIsIuGGtCIsIuOEvyIsIuGGtSIsIuOFgCIsIuGEmiIsIuOFgSIsIuGEhiIsIuOFgiIsIuGEhyIsIuOFgyIsIuGEiCIsIuOFhCIsIuGEoSIsIuOFhSIsIuGEiSIsIuOFhiIsIuGEiiIsIuOFhyIsIuGEiyIsIuOFiCIsIuGEjCIsIuOFiSIsIuGEjSIsIuOFiiIsIuGEjiIsIuOFiyIsIuGEjyIsIuOFjCIsIuGEkCIsIuOFjSIsIuGEkSIsIuOFjiIsIuGEkiIsIuOFjyIsIuGFoSIsIuOFkCIsIuGFoiIsIuOFkSIsIuGFoyIsIuOFkiIsIuGFpCIsIuOFkyIsIuGFpSIsIuOFlCIsIuGFpiIsIuOFlSIsIuGFpyIsIuOFliIsIuGFqCIsIuOFlyIsIuGFqSIsIuOFmCIsIuGFqiIsIuOFmSIsIuGFqyIsIuOFmiIsIuGFrCIsIuOFmyIsIuGFrSIsIuOFnCIsIuGFriIsIuOFnSIsIuGFryIsIuOFniIsIuGFsCIsIuOFnyIsIuGFsSIsIuOFoCIsIuGFsiIsIuOFoSIsIuGFsyIsIuOFoiIsIuGFtCIsIuOFoyIsIuGFtSIsIuOFpCIsIuGFoCIsIuOFpSIsIuGElCIsIuOFpiIsIuGElSIsIuOFpyIsIuGHhyIsIuOFqCIsIuGHiCIsIuOFqSIsIuGHjCIsIuOFqiIsIuGHjiIsIuOFqyIsIuGHkyIsIuOFrCIsIuGHlyIsIuOFrSIsIuGHmSIsIuOFriIsIuGEnCIsIuOFryIsIuGHnSIsIuOFsCIsIuGHnyIsIuOFsSIsIuGEnSIsIuOFsiIsIuGEniIsIuOFsyIsIuGEoCIsIuOFtCIsIuGEoiIsIuOFtSIsIuGEoyIsIuOFtiIsIuGEpyIsIuOFtyIsIuGEqSIsIuOFuCIsIuGEqyIsIuOFuSIsIuGErCIsIuOFuiIsIuGErSIsIuOFuyIsIuGEriIsIuOFvCIsIuGEryIsIuOFvSIsIuGEsiIsIuOFviIsIuGEtiIsIuOFvyIsIuGFgCIsIuOGgCIsIuGFhyIsIuOGgSIsIuGFjCIsIuOGgiIsIuGHsSIsIuOGgyIsIuGHsiIsIuOGhCIsIuGFlyIsIuOGhSIsIuGFmCIsIuOGhiIsIuGFmSIsIuOGhyIsIuGGhCIsIuOGiCIsIuGGhSIsIuOGiSIsIuGGiCIsIuOGiiIsIuGGkSIsIuOGiyIsIuGGkiIsIuOGjCIsIuGGlCIsIuOGjSIsIuGGniIsIuOGjiIsIuGGoSIsIuOIgCIsIijhhIApIiwi44iBIiwiKOGEgikiLCLjiIIiLCIo4YSDKSIsIuOIgyIsIijhhIUpIiwi44iEIiwiKOGEhikiLCLjiIUiLCIo4YSHKSIsIuOIhiIsIijhhIkpIiwi44iHIiwiKOGEiykiLCLjiIgiLCIo4YSMKSIsIuOIiSIsIijhhI4pIiwi44iKIiwiKOGEjykiLCLjiIsiLCIo4YSQKSIsIuOIjCIsIijhhJEpIiwi44iNIiwiKOGEkikiLCLjiI4iLCIo4YSA4YWhKSIsIuOIjyIsIijhhILhhaEpIiwi44iQIiwiKOGEg+GFoSkiLCLjiJEiLCIo4YSF4YWhKSIsIuOIkiIsIijhhIbhhaEpIiwi44iTIiwiKOGEh+GFoSkiLCLjiJQiLCIo4YSJ4YWhKSIsIuOIlSIsIijhhIvhhaEpIiwi44iWIiwiKOGEjOGFoSkiLCLjiJciLCIo4YSO4YWhKSIsIuOImCIsIijhhI/hhaEpIiwi44iZIiwiKOGEkOGFoSkiLCLjiJoiLCIo4YSR4YWhKSIsIuOImyIsIijhhJLhhaEpIiwi44icIiwiKOGEjOGFrikiLCLjiJ0iLCIo4YSL4YWp4YSM4YWl4YarKSIsIuOIniIsIijhhIvhhanhhJLhha4pIiwi44igIiwiKOS4gCkiLCLjiKEiLCIo5LqMKSIsIuOIoiIsIijkuIkpIiwi44ijIiwiKOWbmykiLCLjiKQiLCIo5LqUKSIsIuOIpSIsIijlha0pIiwi44imIiwiKOS4gykiLCLjiKciLCIo5YWrKSIsIuOIqCIsIijkuZ0pIiwi44ipIiwiKOWNgSkiLCLjiKoiLCIo5pyIKSIsIuOIqyIsIijngaspIiwi44isIiwiKOawtCkiLCLjiK0iLCIo5pyoKSIsIuOIriIsIijph5EpIiwi44ivIiwiKOWcnykiLCLjiLAiLCIo5pelKSIsIuOIsSIsIijmoKopIiwi44iyIiwiKOaciSkiLCLjiLMiLCIo56S+KSIsIuOItCIsIijlkI0pIiwi44i1IiwiKOeJuSkiLCLjiLYiLCIo6LKhKSIsIuOItyIsIijnpZ0pIiwi44i4IiwiKOWKtCkiLCLjiLkiLCIo5LujKSIsIuOIuiIsIijlkbwpIiwi44i7IiwiKOWtpikiLCLjiLwiLCIo55ujKSIsIuOIvSIsIijkvIEpIiwi44i+IiwiKOizhykiLCLjiL8iLCIo5Y2UKSIsIuOJgCIsIijnpa0pIiwi44mBIiwiKOS8kSkiLCLjiYIiLCIo6IeqKSIsIuOJgyIsIijoh7MpIiwi44uAIiwiMeaciCIsIuOLgSIsIjLmnIgiLCLji4IiLCIz5pyIIiwi44uDIiwiNOaciCIsIuOLhCIsIjXmnIgiLCLji4UiLCI25pyIIiwi44uGIiwiN+aciCIsIuOLhyIsIjjmnIgiLCLji4giLCI55pyIIiwi44uJIiwiMTDmnIgiLCLji4oiLCIxMeaciCIsIuOLiyIsIjEy5pyIIiwi442YIiwiMOeCuSIsIuONmSIsIjHngrkiLCLjjZoiLCIy54K5Iiwi442bIiwiM+eCuSIsIuONnCIsIjTngrkiLCLjjZ0iLCI154K5Iiwi442eIiwiNueCuSIsIuONnyIsIjfngrkiLCLjjaAiLCI454K5Iiwi442hIiwiOeeCuSIsIuONoiIsIjEw54K5Iiwi442jIiwiMTHngrkiLCLjjaQiLCIxMueCuSIsIuONpSIsIjEz54K5Iiwi442mIiwiMTTngrkiLCLjjaciLCIxNeeCuSIsIuONqCIsIjE254K5Iiwi442pIiwiMTfngrkiLCLjjaoiLCIxOOeCuSIsIuONqyIsIjE554K5Iiwi442sIiwiMjDngrkiLCLjja0iLCIyMeeCuSIsIuONriIsIjIy54K5Iiwi442vIiwiMjPngrkiLCLjjbAiLCIyNOeCuSIsIuOPoCIsIjHml6UiLCLjj6EiLCIy5pelIiwi44+iIiwiM+aXpSIsIuOPoyIsIjTml6UiLCLjj6QiLCI15pelIiwi44+lIiwiNuaXpSIsIuOPpiIsIjfml6UiLCLjj6ciLCI45pelIiwi44+oIiwiOeaXpSIsIuOPqSIsIjEw5pelIiwi44+qIiwiMTHml6UiLCLjj6siLCIxMuaXpSIsIuOPrCIsIjEz5pelIiwi44+tIiwiMTTml6UiLCLjj64iLCIxNeaXpSIsIuOPryIsIjE25pelIiwi44+wIiwiMTfml6UiLCLjj7EiLCIxOOaXpSIsIuOPsiIsIjE55pelIiwi44+zIiwiMjDml6UiLCLjj7QiLCIyMeaXpSIsIuOPtSIsIjIy5pelIiwi44+2IiwiMjPml6UiLCLjj7ciLCIyNOaXpSIsIuOPuCIsIjI15pelIiwi44+5IiwiMjbml6UiLCLjj7oiLCIyN+aXpSIsIuOPuyIsIjI45pelIiwi44+8IiwiMjnml6UiLCLjj70iLCIzMOaXpSIsIuOPviIsIjMx5pelIiwi76yAIiwiZmYiLCLvrIEiLCJmaSIsIu+sgiIsImZsIiwi76yDIiwiZmZpIiwi76yEIiwiZmZsIiwi76yFIiwixb90Iiwi76yGIiwic3QiLCLvrJMiLCLVtNW2Iiwi76yUIiwi1bTVpSIsIu+slSIsItW01asiLCLvrJYiLCLVvtW2Iiwi76yXIiwi1bTVrSIsIu+tjyIsIteQ15wiLCLvrZAiLCLZsSIsIu+tkSIsItmxIiwi762SIiwi2bsiLCLvrZMiLCLZuyIsIu+tlCIsItm7Iiwi762VIiwi2bsiLCLvrZYiLCLZviIsIu+tlyIsItm+Iiwi762YIiwi2b4iLCLvrZkiLCLZviIsIu+tmiIsItqAIiwi762bIiwi2oAiLCLvrZwiLCLagCIsIu+tnSIsItqAIiwi762eIiwi2boiLCLvrZ8iLCLZuiIsIu+toCIsItm6Iiwi762hIiwi2boiLCLvraIiLCLZvyIsIu+toyIsItm/Iiwi762kIiwi2b8iLCLvraUiLCLZvyIsIu+tpiIsItm5Iiwi762nIiwi2bkiLCLvragiLCLZuSIsIu+tqSIsItm5Iiwi762qIiwi2qQiLCLvrasiLCLapCIsIu+trCIsItqkIiwi762tIiwi2qQiLCLvra4iLCLapiIsIu+tryIsItqmIiwi762wIiwi2qYiLCLvrbEiLCLapiIsIu+tsiIsItqEIiwi762zIiwi2oQiLCLvrbQiLCLahCIsIu+ttSIsItqEIiwi7622Iiwi2oMiLCLvrbciLCLagyIsIu+tuCIsItqDIiwi7625Iiwi2oMiLCLvrboiLCLahiIsIu+tuyIsItqGIiwi7628Iiwi2oYiLCLvrb0iLCLahiIsIu+tviIsItqHIiwi762/Iiwi2ociLCLvroAiLCLahyIsIu+ugSIsItqHIiwi766CIiwi2o0iLCLvroMiLCLajSIsIu+uhCIsItqMIiwi766FIiwi2owiLCLvroYiLCLajiIsIu+uhyIsItqOIiwi766IIiwi2ogiLCLvrokiLCLaiCIsIu+uiiIsItqYIiwi766LIiwi2pgiLCLvrowiLCLakSIsIu+ujSIsItqRIiwi766OIiwi2qkiLCLvro8iLCLaqSIsIu+ukCIsItqpIiwi766RIiwi2qkiLCLvrpIiLCLaryIsIu+ukyIsItqvIiwi766UIiwi2q8iLCLvrpUiLCLaryIsIu+uliIsItqzIiwi766XIiwi2rMiLCLvrpgiLCLasyIsIu+umSIsItqzIiwi766aIiwi2rEiLCLvrpsiLCLasSIsIu+unCIsItqxIiwi766dIiwi2rEiLCLvrp4iLCLauiIsIu+unyIsItq6Iiwi766gIiwi2rsiLCLvrqEiLCLauyIsIu+uoiIsItq7Iiwi766jIiwi2rsiLCLvrqQiLCLbgCIsIu+upSIsItuAIiwi766mIiwi24EiLCLvrqciLCLbgSIsIu+uqCIsItuBIiwi766pIiwi24EiLCLvrqoiLCLaviIsIu+uqyIsItq+Iiwi766sIiwi2r4iLCLvrq0iLCLaviIsIu+uriIsItuSIiwi766vIiwi25IiLCLvrrAiLCLbkyIsIu+usSIsItuTIiwi76+TIiwi2q0iLCLvr5QiLCLarSIsIu+vlSIsItqtIiwi76+WIiwi2q0iLCLvr5ciLCLbhyIsIu+vmCIsItuHIiwi76+ZIiwi24YiLCLvr5oiLCLbhiIsIu+vmyIsItuIIiwi76+cIiwi24giLCLvr50iLCLZtyIsIu+vniIsItuLIiwi76+fIiwi24siLCLvr6AiLCLbhSIsIu+voSIsItuFIiwi76+iIiwi24kiLCLvr6MiLCLbiSIsIu+vpCIsItuQIiwi76+lIiwi25AiLCLvr6YiLCLbkCIsIu+vpyIsItuQIiwi76+oIiwi2YkiLCLvr6kiLCLZiSIsIu+vqiIsItim2KciLCLvr6siLCLYptinIiwi76+sIiwi2KbblSIsIu+vrSIsItim25UiLCLvr64iLCLYptmIIiwi76+vIiwi2KbZiCIsIu+vsCIsItim24ciLCLvr7EiLCLYptuHIiwi76+yIiwi2KbbhiIsIu+vsyIsItim24YiLCLvr7QiLCLYptuIIiwi76+1Iiwi2KbbiCIsIu+vtiIsItim25AiLCLvr7ciLCLYptuQIiwi76+4Iiwi2KbbkCIsIu+vuSIsItim2YkiLCLvr7oiLCLYptmJIiwi76+7Iiwi2KbZiSIsIu+vvCIsItuMIiwi76+9Iiwi24wiLCLvr74iLCLbjCIsIu+vvyIsItuMIiwi77CAIiwi2KbYrCIsIu+wgSIsItim2K0iLCLvsIIiLCLYptmFIiwi77CDIiwi2KbZiSIsIu+whCIsItim2YoiLCLvsIUiLCLYqNisIiwi77CGIiwi2KjYrSIsIu+whyIsItio2K4iLCLvsIgiLCLYqNmFIiwi77CJIiwi2KjZiSIsIu+wiiIsItio2YoiLCLvsIsiLCLYqtisIiwi77CMIiwi2KrYrSIsIu+wjSIsItiq2K4iLCLvsI4iLCLYqtmFIiwi77CPIiwi2KrZiSIsIu+wkCIsItiq2YoiLCLvsJEiLCLYq9isIiwi77CSIiwi2KvZhSIsIu+wkyIsItir2YkiLCLvsJQiLCLYq9mKIiwi77CVIiwi2KzYrSIsIu+wliIsItis2YUiLCLvsJciLCLYrdisIiwi77CYIiwi2K3ZhSIsIu+wmSIsItiu2KwiLCLvsJoiLCLYrtitIiwi77CbIiwi2K7ZhSIsIu+wnCIsItiz2KwiLCLvsJ0iLCLYs9itIiwi77CeIiwi2LPYriIsIu+wnyIsItiz2YUiLCLvsKAiLCLYtditIiwi77ChIiwi2LXZhSIsIu+woiIsIti22KwiLCLvsKMiLCLYttitIiwi77CkIiwi2LbYriIsIu+wpSIsIti22YUiLCLvsKYiLCLYt9itIiwi77CnIiwi2LfZhSIsIu+wqCIsIti42YUiLCLvsKkiLCLYudisIiwi77CqIiwi2LnZhSIsIu+wqyIsIti62KwiLCLvsKwiLCLYutmFIiwi77CtIiwi2YHYrCIsIu+wriIsItmB2K0iLCLvsK8iLCLZgdiuIiwi77CwIiwi2YHZhSIsIu+wsSIsItmB2YkiLCLvsLIiLCLZgdmKIiwi77CzIiwi2YLYrSIsIu+wtCIsItmC2YUiLCLvsLUiLCLZgtmJIiwi77C2Iiwi2YLZiiIsIu+wtyIsItmD2KciLCLvsLgiLCLZg9isIiwi77C5Iiwi2YPYrSIsIu+wuiIsItmD2K4iLCLvsLsiLCLZg9mEIiwi77C8Iiwi2YPZhSIsIu+wvSIsItmD2YkiLCLvsL4iLCLZg9mKIiwi77C/Iiwi2YTYrCIsIu+xgCIsItmE2K0iLCLvsYEiLCLZhNiuIiwi77GCIiwi2YTZhSIsIu+xgyIsItmE2YkiLCLvsYQiLCLZhNmKIiwi77GFIiwi2YXYrCIsIu+xhiIsItmF2K0iLCLvsYciLCLZhdiuIiwi77GIIiwi2YXZhSIsIu+xiSIsItmF2YkiLCLvsYoiLCLZhdmKIiwi77GLIiwi2YbYrCIsIu+xjCIsItmG2K0iLCLvsY0iLCLZhtiuIiwi77GOIiwi2YbZhSIsIu+xjyIsItmG2YkiLCLvsZAiLCLZhtmKIiwi77GRIiwi2YfYrCIsIu+xkiIsItmH2YUiLCLvsZMiLCLZh9mJIiwi77GUIiwi2YfZiiIsIu+xlSIsItmK2KwiLCLvsZYiLCLZititIiwi77GXIiwi2YrYriIsIu+xmCIsItmK2YUiLCLvsZkiLCLZitmJIiwi77GaIiwi2YrZiiIsIu+xmyIsItiw2bAiLCLvsZwiLCLYsdmwIiwi77GdIiwi2YnZsCIsIu+xniIsIiDZjNmRIiwi77GfIiwiINmN2ZEiLCLvsaAiLCIg2Y7ZkSIsIu+xoSIsIiDZj9mRIiwi77GiIiwiINmQ2ZEiLCLvsaMiLCIg2ZHZsCIsIu+xpCIsItim2LEiLCLvsaUiLCLYptiyIiwi77GmIiwi2KbZhSIsIu+xpyIsItim2YYiLCLvsagiLCLYptmJIiwi77GpIiwi2KbZiiIsIu+xqiIsItio2LEiLCLvsasiLCLYqNiyIiwi77GsIiwi2KjZhSIsIu+xrSIsItio2YYiLCLvsa4iLCLYqNmJIiwi77GvIiwi2KjZiiIsIu+xsCIsItiq2LEiLCLvsbEiLCLYqtiyIiwi77GyIiwi2KrZhSIsIu+xsyIsItiq2YYiLCLvsbQiLCLYqtmJIiwi77G1Iiwi2KrZiiIsIu+xtiIsItir2LEiLCLvsbciLCLYq9iyIiwi77G4Iiwi2KvZhSIsIu+xuSIsItir2YYiLCLvsboiLCLYq9mJIiwi77G7Iiwi2KvZiiIsIu+xvCIsItmB2YkiLCLvsb0iLCLZgdmKIiwi77G+Iiwi2YLZiSIsIu+xvyIsItmC2YoiLCLvsoAiLCLZg9inIiwi77KBIiwi2YPZhCIsIu+ygiIsItmD2YUiLCLvsoMiLCLZg9mJIiwi77KEIiwi2YPZiiIsIu+yhSIsItmE2YUiLCLvsoYiLCLZhNmJIiwi77KHIiwi2YTZiiIsIu+yiCIsItmF2KciLCLvsokiLCLZhdmFIiwi77KKIiwi2YbYsSIsIu+yiyIsItmG2LIiLCLvsowiLCLZhtmFIiwi77KNIiwi2YbZhiIsIu+yjiIsItmG2YkiLCLvso8iLCLZhtmKIiwi77KQIiwi2YnZsCIsIu+ykSIsItmK2LEiLCLvspIiLCLZitiyIiwi77KTIiwi2YrZhSIsIu+ylCIsItmK2YYiLCLvspUiLCLZitmJIiwi77KWIiwi2YrZiiIsIu+ylyIsItim2KwiLCLvspgiLCLYptitIiwi77KZIiwi2KbYriIsIu+ymiIsItim2YUiLCLvspsiLCLYptmHIiwi77KcIiwi2KjYrCIsIu+ynSIsItio2K0iLCLvsp4iLCLYqNiuIiwi77KfIiwi2KjZhSIsIu+yoCIsItio2YciLCLvsqEiLCLYqtisIiwi77KiIiwi2KrYrSIsIu+yoyIsItiq2K4iLCLvsqQiLCLYqtmFIiwi77KlIiwi2KrZhyIsIu+ypiIsItir2YUiLCLvsqciLCLYrNitIiwi77KoIiwi2KzZhSIsIu+yqSIsItit2KwiLCLvsqoiLCLYrdmFIiwi77KrIiwi2K7YrCIsIu+yrCIsItiu2YUiLCLvsq0iLCLYs9isIiwi77KuIiwi2LPYrSIsIu+yryIsItiz2K4iLCLvsrAiLCLYs9mFIiwi77KxIiwi2LXYrSIsIu+ysiIsIti12K4iLCLvsrMiLCLYtdmFIiwi77K0Iiwi2LbYrCIsIu+ytSIsIti22K0iLCLvsrYiLCLYttiuIiwi77K3Iiwi2LbZhSIsIu+yuCIsIti32K0iLCLvsrkiLCLYuNmFIiwi77K6Iiwi2LnYrCIsIu+yuyIsIti52YUiLCLvsrwiLCLYutisIiwi77K9Iiwi2LrZhSIsIu+yviIsItmB2KwiLCLvsr8iLCLZgditIiwi77OAIiwi2YHYriIsIu+zgSIsItmB2YUiLCLvs4IiLCLZgtitIiwi77ODIiwi2YLZhSIsIu+zhCIsItmD2KwiLCLvs4UiLCLZg9itIiwi77OGIiwi2YPYriIsIu+zhyIsItmD2YQiLCLvs4giLCLZg9mFIiwi77OJIiwi2YTYrCIsIu+ziiIsItmE2K0iLCLvs4siLCLZhNiuIiwi77OMIiwi2YTZhSIsIu+zjSIsItmE2YciLCLvs44iLCLZhdisIiwi77OPIiwi2YXYrSIsIu+zkCIsItmF2K4iLCLvs5EiLCLZhdmFIiwi77OSIiwi2YbYrCIsIu+zkyIsItmG2K0iLCLvs5QiLCLZhtiuIiwi77OVIiwi2YbZhSIsIu+zliIsItmG2YciLCLvs5ciLCLZh9isIiwi77OYIiwi2YfZhSIsIu+zmSIsItmH2bAiLCLvs5oiLCLZitisIiwi77ObIiwi2YrYrSIsIu+znCIsItmK2K4iLCLvs50iLCLZitmFIiwi77OeIiwi2YrZhyIsIu+znyIsItim2YUiLCLvs6AiLCLYptmHIiwi77OhIiwi2KjZhSIsIu+zoiIsItio2YciLCLvs6MiLCLYqtmFIiwi77OkIiwi2KrZhyIsIu+zpSIsItir2YUiLCLvs6YiLCLYq9mHIiwi77OnIiwi2LPZhSIsIu+zqCIsItiz2YciLCLvs6kiLCLYtNmFIiwi77OqIiwi2LTZhyIsIu+zqyIsItmD2YQiLCLvs6wiLCLZg9mFIiwi77OtIiwi2YTZhSIsIu+zriIsItmG2YUiLCLvs68iLCLZhtmHIiwi77OwIiwi2YrZhSIsIu+zsSIsItmK2YciLCLvs7IiLCLZgNmO2ZEiLCLvs7MiLCLZgNmP2ZEiLCLvs7QiLCLZgNmQ2ZEiLCLvs7UiLCLYt9mJIiwi77O2Iiwi2LfZiiIsIu+ztyIsIti52YkiLCLvs7giLCLYudmKIiwi77O5Iiwi2LrZiSIsIu+zuiIsIti62YoiLCLvs7siLCLYs9mJIiwi77O8Iiwi2LPZiiIsIu+zvSIsIti02YkiLCLvs74iLCLYtNmKIiwi77O/Iiwi2K3ZiSIsIu+0gCIsItit2YoiLCLvtIEiLCLYrNmJIiwi77SCIiwi2KzZiiIsIu+0gyIsItiu2YkiLCLvtIQiLCLYrtmKIiwi77SFIiwi2LXZiSIsIu+0hiIsIti12YoiLCLvtIciLCLYttmJIiwi77SIIiwi2LbZiiIsIu+0iSIsIti02KwiLCLvtIoiLCLYtNitIiwi77SLIiwi2LTYriIsIu+0jCIsIti02YUiLCLvtI0iLCLYtNixIiwi77SOIiwi2LPYsSIsIu+0jyIsIti12LEiLCLvtJAiLCLYttixIiwi77SRIiwi2LfZiSIsIu+0kiIsIti32YoiLCLvtJMiLCLYudmJIiwi77SUIiwi2LnZiiIsIu+0lSIsIti62YkiLCLvtJYiLCLYutmKIiwi77SXIiwi2LPZiSIsIu+0mCIsItiz2YoiLCLvtJkiLCLYtNmJIiwi77SaIiwi2LTZiiIsIu+0myIsItit2YkiLCLvtJwiLCLYrdmKIiwi77SdIiwi2KzZiSIsIu+0niIsItis2YoiLCLvtJ8iLCLYrtmJIiwi77SgIiwi2K7ZiiIsIu+0oSIsIti12YkiLCLvtKIiLCLYtdmKIiwi77SjIiwi2LbZiSIsIu+0pCIsIti22YoiLCLvtKUiLCLYtNisIiwi77SmIiwi2LTYrSIsIu+0pyIsIti02K4iLCLvtKgiLCLYtNmFIiwi77SpIiwi2LTYsSIsIu+0qiIsItiz2LEiLCLvtKsiLCLYtdixIiwi77SsIiwi2LbYsSIsIu+0rSIsIti02KwiLCLvtK4iLCLYtNitIiwi77SvIiwi2LTYriIsIu+0sCIsIti02YUiLCLvtLEiLCLYs9mHIiwi77SyIiwi2LTZhyIsIu+0syIsIti32YUiLCLvtLQiLCLYs9isIiwi77S1Iiwi2LPYrSIsIu+0tiIsItiz2K4iLCLvtLciLCLYtNisIiwi77S4Iiwi2LTYrSIsIu+0uSIsIti02K4iLCLvtLoiLCLYt9mFIiwi77S7Iiwi2LjZhSIsIu+0vCIsItin2YsiLCLvtL0iLCLYp9mLIiwi77WQIiwi2KrYrNmFIiwi77WRIiwi2KrYrdisIiwi77WSIiwi2KrYrdisIiwi77WTIiwi2KrYrdmFIiwi77WUIiwi2KrYrtmFIiwi77WVIiwi2KrZhdisIiwi77WWIiwi2KrZhditIiwi77WXIiwi2KrZhdiuIiwi77WYIiwi2KzZhditIiwi77WZIiwi2KzZhditIiwi77WaIiwi2K3ZhdmKIiwi77WbIiwi2K3ZhdmJIiwi77WcIiwi2LPYrdisIiwi77WdIiwi2LPYrNitIiwi77WeIiwi2LPYrNmJIiwi77WfIiwi2LPZhditIiwi77WgIiwi2LPZhditIiwi77WhIiwi2LPZhdisIiwi77WiIiwi2LPZhdmFIiwi77WjIiwi2LPZhdmFIiwi77WkIiwi2LXYrditIiwi77WlIiwi2LXYrditIiwi77WmIiwi2LXZhdmFIiwi77WnIiwi2LTYrdmFIiwi77WoIiwi2LTYrdmFIiwi77WpIiwi2LTYrNmKIiwi77WqIiwi2LTZhdiuIiwi77WrIiwi2LTZhdiuIiwi77WsIiwi2LTZhdmFIiwi77WtIiwi2LTZhdmFIiwi77WuIiwi2LbYrdmJIiwi77WvIiwi2LbYrtmFIiwi77WwIiwi2LbYrtmFIiwi77WxIiwi2LfZhditIiwi77WyIiwi2LfZhditIiwi77WzIiwi2LfZhdmFIiwi77W0Iiwi2LfZhdmKIiwi77W1Iiwi2LnYrNmFIiwi77W2Iiwi2LnZhdmFIiwi77W3Iiwi2LnZhdmFIiwi77W4Iiwi2LnZhdmJIiwi77W5Iiwi2LrZhdmFIiwi77W6Iiwi2LrZhdmKIiwi77W7Iiwi2LrZhdmJIiwi77W8Iiwi2YHYrtmFIiwi77W9Iiwi2YHYrtmFIiwi77W+Iiwi2YLZhditIiwi77W/Iiwi2YLZhdmFIiwi77aAIiwi2YTYrdmFIiwi77aBIiwi2YTYrdmKIiwi77aCIiwi2YTYrdmJIiwi77aDIiwi2YTYrNisIiwi77aEIiwi2YTYrNisIiwi77aFIiwi2YTYrtmFIiwi77aGIiwi2YTYrtmFIiwi77aHIiwi2YTZhditIiwi77aIIiwi2YTZhditIiwi77aJIiwi2YXYrdisIiwi77aKIiwi2YXYrdmFIiwi77aLIiwi2YXYrdmKIiwi77aMIiwi2YXYrNitIiwi77aNIiwi2YXYrNmFIiwi77aOIiwi2YXYrtisIiwi77aPIiwi2YXYrtmFIiwi77aSIiwi2YXYrNiuIiwi77aTIiwi2YfZhdisIiwi77aUIiwi2YfZhdmFIiwi77aVIiwi2YbYrdmFIiwi77aWIiwi2YbYrdmJIiwi77aXIiwi2YbYrNmFIiwi77aYIiwi2YbYrNmFIiwi77aZIiwi2YbYrNmJIiwi77aaIiwi2YbZhdmKIiwi77abIiwi2YbZhdmJIiwi77acIiwi2YrZhdmFIiwi77adIiwi2YrZhdmFIiwi77aeIiwi2KjYrtmKIiwi77afIiwi2KrYrNmKIiwi77agIiwi2KrYrNmJIiwi77ahIiwi2KrYrtmKIiwi77aiIiwi2KrYrtmJIiwi77ajIiwi2KrZhdmKIiwi77akIiwi2KrZhdmJIiwi77alIiwi2KzZhdmKIiwi77amIiwi2KzYrdmJIiwi77anIiwi2KzZhdmJIiwi77aoIiwi2LPYrtmJIiwi77apIiwi2LXYrdmKIiwi77aqIiwi2LTYrdmKIiwi77arIiwi2LbYrdmKIiwi77asIiwi2YTYrNmKIiwi77atIiwi2YTZhdmKIiwi77auIiwi2YrYrdmKIiwi77avIiwi2YrYrNmKIiwi77awIiwi2YrZhdmKIiwi77axIiwi2YXZhdmKIiwi77ayIiwi2YLZhdmKIiwi77azIiwi2YbYrdmKIiwi77a0Iiwi2YLZhditIiwi77a1Iiwi2YTYrdmFIiwi77a2Iiwi2LnZhdmKIiwi77a3Iiwi2YPZhdmKIiwi77a4Iiwi2YbYrNitIiwi77a5Iiwi2YXYrtmKIiwi77a6Iiwi2YTYrNmFIiwi77a7Iiwi2YPZhdmFIiwi77a8Iiwi2YTYrNmFIiwi77a9Iiwi2YbYrNitIiwi77a+Iiwi2KzYrdmKIiwi77a/Iiwi2K3YrNmKIiwi77eAIiwi2YXYrNmKIiwi77eBIiwi2YHZhdmKIiwi77eCIiwi2KjYrdmKIiwi77eDIiwi2YPZhdmFIiwi77eEIiwi2LnYrNmFIiwi77eFIiwi2LXZhdmFIiwi77eGIiwi2LPYrtmKIiwi77eHIiwi2YbYrNmKIiwi77mJIiwi4oC+Iiwi77mKIiwi4oC+Iiwi77mLIiwi4oC+Iiwi77mMIiwi4oC+Iiwi77mNIiwiXyIsIu+5jiIsIl8iLCLvuY8iLCJfIiwi77qAIiwi2KEiLCLvuoEiLCLYoiIsIu+6giIsItiiIiwi77qDIiwi2KMiLCLvuoQiLCLYoyIsIu+6hSIsItikIiwi77qGIiwi2KQiLCLvuociLCLYpSIsIu+6iCIsItilIiwi77qJIiwi2KYiLCLvuooiLCLYpiIsIu+6iyIsItimIiwi77qMIiwi2KYiLCLvuo0iLCLYpyIsIu+6jiIsItinIiwi77qPIiwi2KgiLCLvupAiLCLYqCIsIu+6kSIsItioIiwi77qSIiwi2KgiLCLvupMiLCLYqSIsIu+6lCIsItipIiwi77qVIiwi2KoiLCLvupYiLCLYqiIsIu+6lyIsItiqIiwi77qYIiwi2KoiLCLvupkiLCLYqyIsIu+6miIsItirIiwi77qbIiwi2KsiLCLvupwiLCLYqyIsIu+6nSIsItisIiwi77qeIiwi2KwiLCLvup8iLCLYrCIsIu+6oCIsItisIiwi77qhIiwi2K0iLCLvuqIiLCLYrSIsIu+6oyIsItitIiwi77qkIiwi2K0iLCLvuqUiLCLYriIsIu+6piIsItiuIiwi77qnIiwi2K4iLCLvuqgiLCLYriIsIu+6qSIsItivIiwi77qqIiwi2K8iLCLvuqsiLCLYsCIsIu+6rCIsItiwIiwi77qtIiwi2LEiLCLvuq4iLCLYsSIsIu+6ryIsItiyIiwi77qwIiwi2LIiLCLvurEiLCLYsyIsIu+6siIsItizIiwi77qzIiwi2LMiLCLvurQiLCLYsyIsIu+6tSIsIti0Iiwi77q2Iiwi2LQiLCLvurciLCLYtCIsIu+6uCIsIti0Iiwi77q5Iiwi2LUiLCLvuroiLCLYtSIsIu+6uyIsIti1Iiwi77q8Iiwi2LUiLCLvur0iLCLYtiIsIu+6viIsIti2Iiwi77q/Iiwi2LYiLCLvu4AiLCLYtiIsIu+7gSIsIti3Iiwi77uCIiwi2LciLCLvu4MiLCLYtyIsIu+7hCIsIti3Iiwi77uFIiwi2LgiLCLvu4YiLCLYuCIsIu+7hyIsIti4Iiwi77uIIiwi2LgiLCLvu4kiLCLYuSIsIu+7iiIsIti5Iiwi77uLIiwi2LkiLCLvu4wiLCLYuSIsIu+7jSIsIti6Iiwi77uOIiwi2LoiLCLvu48iLCLYuiIsIu+7kCIsIti6Iiwi77uRIiwi2YEiLCLvu5IiLCLZgSIsIu+7kyIsItmBIiwi77uUIiwi2YEiLCLvu5UiLCLZgiIsIu+7liIsItmCIiwi77uXIiwi2YIiLCLvu5giLCLZgiIsIu+7mSIsItmDIiwi77uaIiwi2YMiLCLvu5siLCLZgyIsIu+7nCIsItmDIiwi77udIiwi2YQiLCLvu54iLCLZhCIsIu+7nyIsItmEIiwi77ugIiwi2YQiLCLvu6EiLCLZhSIsIu+7oiIsItmFIiwi77ujIiwi2YUiLCLvu6QiLCLZhSIsIu+7pSIsItmGIiwi77umIiwi2YYiLCLvu6ciLCLZhiIsIu+7qCIsItmGIiwi77upIiwi2YciLCLvu6oiLCLZhyIsIu+7qyIsItmHIiwi77usIiwi2YciLCLvu60iLCLZiCIsIu+7riIsItmIIiwi77uvIiwi2YkiLCLvu7AiLCLZiSIsIu+7sSIsItmKIiwi77uyIiwi2YoiLCLvu7MiLCLZiiIsIu+7tCIsItmKIiwi77u1Iiwi2YTYoiIsIu+7tiIsItmE2KIiLCLvu7ciLCLZhNijIiwi77u4Iiwi2YTYoyIsIu+7uSIsItmE2KUiLCLvu7oiLCLZhNilIiwi77u7Iiwi2YTYpyIsIu+7vCIsItmE2KciXX0pKTtmdW5jdGlvbiBsKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYodDw9MXx8IWZ1bmN0aW9uKGUpe2xldCB0PXNbMTNdO3JldHVybiBlPj10LmJlZ2luJiZlPHQuZW5kfHwodD1zWzExXSxlPj10LmJlZ2luJiZlPHQuZW5kKX0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCByPVtdO2ZvcihsZXQgbj10LTE7bj49MDtuLS0pci5wdXNoKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfWNvbnN0IGY9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGg9bmV3IE1hcDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9aC5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCByPWUubWF0Y2goZiksbj17aXNXaGl0ZXNwYWNlOiEoIXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFyfHwhclsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIXJ8fCFyWzNdKX07cmV0dXJuIGguc2V0KGUsbiksbn1mdW5jdGlvbiBwKCl7aC5jbGVhcigpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPXQuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9dm9pZCAwLHQuZ2V0U3RhbmRhcmRGb250TmFtZT1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciBuPXIoMTM1KSxhPXIoMTY3KSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGUuQ291cmllcj0iQ291cmllciIsZS5TeW1ib2w9IlN5bWJvbCIsZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyIsZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiLGVbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIixlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWw9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbE1UPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3PSJDb3VyaWVyIixlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCIsZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIixlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCIsZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO3ZhciBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkZveGl0U2Fucy5wZmIiLGVbIkhlbHZldGljYS1Cb2xkIl09IkZveGl0U2Fuc0JvbGQucGZiIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iRm94aXRTYW5zQm9sZEl0YWxpYy5wZmIiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkZveGl0U2Fuc0l0YWxpYy5wZmIiLGVbIlRpbWVzLVJvbWFuIl09IkZveGl0U2VyaWYucGZiIixlWyJUaW1lcy1Cb2xkIl09IkZveGl0U2VyaWZCb2xkLnBmYiIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJGb3hpdFNlcmlmQm9sZEl0YWxpYy5wZmIiLGVbIlRpbWVzLUl0YWxpYyJdPSJGb3hpdFNlcmlmSXRhbGljLnBmYiIsZS5TeW1ib2w9IkZveGl0U3ltYm9sLnBmYiIsZS5aYXBmRGluZ2JhdHM9IkZveGl0RGluZ2JhdHMucGZiIixlWyJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIl09IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkIl09IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixlWyJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiJ9KSk7dC5nZXRGb250TmFtZVRvRmlsZU1hcD1vO3ZhciBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyIsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0iWmFwZkRpbmdiYXRzIn0pKTt0LmdldE5vblN0ZEZvbnRNYXA9czt2YXIgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO3ZhciB1PSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMCxlLlN5bWJvbD0hMCxlLlphcGZEaW5nYmF0cz0hMH0pKTt0LmdldFN5bWJvbHNGb250cz11O3ZhciBsPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyXT0xMCxlWzNdPTMyLGVbNF09MzMsZVs1XT0zNCxlWzZdPTM1LGVbN109MzYsZVs4XT0zNyxlWzldPTM4LGVbMTBdPTM5LGVbMTFdPTQwLGVbMTJdPTQxLGVbMTNdPTQyLGVbMTRdPTQzLGVbMTVdPTQ0LGVbMTZdPTQ1LGVbMTddPTQ2LGVbMThdPTQ3LGVbMTldPTQ4LGVbMjBdPTQ5LGVbMjFdPTUwLGVbMjJdPTUxLGVbMjNdPTUyLGVbMjRdPTUzLGVbMjVdPTU0LGVbMjZdPTU1LGVbMjddPTU2LGVbMjhdPTU3LGVbMjldPTU4LGVbMzBdPTg5NCxlWzMxXT02MCxlWzMyXT02MSxlWzMzXT02MixlWzM0XT02MyxlWzM1XT02NCxlWzM2XT02NSxlWzM3XT02NixlWzM4XT02NyxlWzM5XT02OCxlWzQwXT02OSxlWzQxXT03MCxlWzQyXT03MSxlWzQzXT03MixlWzQ0XT03MyxlWzQ1XT03NCxlWzQ2XT03NSxlWzQ3XT03NixlWzQ4XT03NyxlWzQ5XT03OCxlWzUwXT03OSxlWzUxXT04MCxlWzUyXT04MSxlWzUzXT04MixlWzU0XT04MyxlWzU1XT04NCxlWzU2XT04NSxlWzU3XT04NixlWzU4XT04NyxlWzU5XT04OCxlWzYwXT04OSxlWzYxXT05MCxlWzYyXT05MSxlWzYzXT05MixlWzY0XT05MyxlWzY1XT05NCxlWzY2XT05NSxlWzY3XT05NixlWzY4XT05NyxlWzY5XT05OCxlWzcwXT05OSxlWzcxXT0xMDAsZVs3Ml09MTAxLGVbNzNdPTEwMixlWzc0XT0xMDMsZVs3NV09MTA0LGVbNzZdPTEwNSxlWzc3XT0xMDYsZVs3OF09MTA3LGVbNzldPTEwOCxlWzgwXT0xMDksZVs4MV09MTEwLGVbODJdPTExMSxlWzgzXT0xMTIsZVs4NF09MTEzLGVbODVdPTExNCxlWzg2XT0xMTUsZVs4N109MTE2LGVbODhdPTExNyxlWzg5XT0xMTgsZVs5MF09MTE5LGVbOTFdPTEyMCxlWzkyXT0xMjEsZVs5M109MTIyLGVbOTRdPTEyMyxlWzk1XT0xMjQsZVs5Nl09MTI1LGVbOTddPTEyNixlWzk4XT0xOTYsZVs5OV09MTk3LGVbMTAwXT0xOTksZVsxMDFdPTIwMSxlWzEwMl09MjA5LGVbMTAzXT0yMTQsZVsxMDRdPTIyMCxlWzEwNV09MjI1LGVbMTA2XT0yMjQsZVsxMDddPTIyNixlWzEwOF09MjI4LGVbMTA5XT0yMjcsZVsxMTBdPTIyOSxlWzExMV09MjMxLGVbMTEyXT0yMzMsZVsxMTNdPTIzMixlWzExNF09MjM0LGVbMTE1XT0yMzUsZVsxMTZdPTIzNyxlWzExN109MjM2LGVbMTE4XT0yMzgsZVsxMTldPTIzOSxlWzEyMF09MjQxLGVbMTIxXT0yNDMsZVsxMjJdPTI0MixlWzEyM109MjQ0LGVbMTI0XT0yNDYsZVsxMjVdPTI0NSxlWzEyNl09MjUwLGVbMTI3XT0yNDksZVsxMjhdPTI1MSxlWzEyOV09MjUyLGVbMTMwXT04MjI0LGVbMTMxXT0xNzYsZVsxMzJdPTE2MixlWzEzM109MTYzLGVbMTM0XT0xNjcsZVsxMzVdPTgyMjYsZVsxMzZdPTE4MixlWzEzN109MjIzLGVbMTM4XT0xNzQsZVsxMzldPTE2OSxlWzE0MF09ODQ4MixlWzE0MV09MTgwLGVbMTQyXT0xNjgsZVsxNDNdPTg4MDAsZVsxNDRdPTE5OCxlWzE0NV09MjE2LGVbMTQ2XT04NzM0LGVbMTQ3XT0xNzcsZVsxNDhdPTg4MDQsZVsxNDldPTg4MDUsZVsxNTBdPTE2NSxlWzE1MV09MTgxLGVbMTUyXT04NzA2LGVbMTUzXT04NzIxLGVbMTU0XT04NzE5LGVbMTU2XT04NzQ3LGVbMTU3XT0xNzAsZVsxNThdPTE4NixlWzE1OV09ODQ4NixlWzE2MF09MjMwLGVbMTYxXT0yNDgsZVsxNjJdPTE5MSxlWzE2M109MTYxLGVbMTY0XT0xNzIsZVsxNjVdPTg3MzAsZVsxNjZdPTQwMixlWzE2N109ODc3NixlWzE2OF09ODcxMCxlWzE2OV09MTcxLGVbMTcwXT0xODcsZVsxNzFdPTgyMzAsZVsxNzldPTgyMjAsZVsxODBdPTgyMjEsZVsxODFdPTgyMTYsZVsxODJdPTgyMTcsZVsyMDBdPTE5MyxlWzIwM109MjA1LGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjZdPTM1MixlWzIyN109MzUzLGVbMjI4XT0zODEsZVsyMjldPTM4MixlWzIzM109MjIxLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY3XT0yODIsZVsyNjhdPTI4MyxlWzI2OV09MzEzLGVbMjc1XT0zMjMsZVsyNzZdPTMyNCxlWzI3OF09MzI4LGVbMjgzXT0zNDQsZVsyODRdPTM0NSxlWzI4NV09MzQ2LGVbMjg2XT0zNDcsZVsyOTJdPTM2NyxlWzI5NV09Mzc3LGVbMjk2XT0zNzgsZVsyOThdPTM4MCxlWzMwNV09OTYzLGVbMzA2XT05NjQsZVszMDddPTk2NixlWzMwOF09ODIxNSxlWzMwOV09ODI1MixlWzMxMF09ODMxOSxlWzMxMV09ODM1OSxlWzMxMl09ODU5MixlWzMxM109ODU5MyxlWzMzN109OTU1MixlWzQ5M109MTAzOSxlWzQ5NF09MTA0MCxlWzY3Ml09MTQ4OCxlWzY3M109MTQ4OSxlWzY3NF09MTQ5MCxlWzY3NV09MTQ5MSxlWzY3Nl09MTQ5MixlWzY3N109MTQ5MyxlWzY3OF09MTQ5NCxlWzY3OV09MTQ5NSxlWzY4MF09MTQ5NixlWzY4MV09MTQ5NyxlWzY4Ml09MTQ5OCxlWzY4M109MTQ5OSxlWzY4NF09MTUwMCxlWzY4NV09MTUwMSxlWzY4Nl09MTUwMixlWzY4N109MTUwMyxlWzY4OF09MTUwNCxlWzY4OV09MTUwNSxlWzY5MF09MTUwNixlWzY5MV09MTUwNyxlWzY5Ml09MTUwOCxlWzY5M109MTUwOSxlWzY5NF09MTUxMCxlWzY5NV09MTUxMSxlWzY5Nl09MTUxMixlWzY5N109MTUxMyxlWzY5OF09MTUxNCxlWzcwNV09MTUyNCxlWzcwNl09ODM2MixlWzcxMF09NjQyODgsZVs3MTFdPTY0Mjk4LGVbNzU5XT0xNjE3LGVbNzYxXT0xNzc2LGVbNzYzXT0xNzc4LGVbNzc1XT0xNjUyLGVbNzc3XT0xNzY0LGVbNzc4XT0xNzgwLGVbNzc5XT0xNzgxLGVbNzgwXT0xNzgyLGVbNzgyXT03NzEsZVs3ODNdPTY0NzI2LGVbNzg2XT04MzYzLGVbNzg4XT04NTMyLGVbNzkwXT03NjgsZVs3OTFdPTc2OSxlWzc5Ml09NzY4LGVbNzk1XT04MDMsZVs3OTddPTY0MzM2LGVbNzk4XT02NDMzNyxlWzc5OV09NjQzNDIsZVs4MDBdPTY0MzQzLGVbODAxXT02NDM0NCxlWzgwMl09NjQzNDUsZVs4MDNdPTY0MzYyLGVbODA0XT02NDM2MyxlWzgwNV09NjQzNjQsZVsyNDI0XT03ODIxLGVbMjQyNV09NzgyMixlWzI0MjZdPTc4MjMsZVsyNDI3XT03ODI0LGVbMjQyOF09NzgyNSxlWzI0MjldPTc4MjYsZVsyNDMwXT03ODI3LGVbMjQzM109NzY4MixlWzI2NzhdPTgwNDUsZVsyNjc5XT04MDQ2LGVbMjgzMF09MTU1MixlWzI4MzhdPTY4NixlWzI4NDBdPTc1MSxlWzI4NDJdPTc1MyxlWzI4NDNdPTc1NCxlWzI4NDRdPTc1NSxlWzI4NDZdPTc1NyxlWzI4NTZdPTc2NyxlWzI4NTddPTg0OCxlWzI4NThdPTg0OSxlWzI4NjJdPTg1MyxlWzI4NjNdPTg1NCxlWzI4NjRdPTg1NSxlWzI4NjVdPTg2MSxlWzI4NjZdPTg2MixlWzI5MDZdPTc0NjAsZVsyOTA4XT03NDYyLGVbMjkwOV09NzQ2MyxlWzI5MTBdPTc0NjQsZVsyOTEyXT03NDY2LGVbMjkxM109NzQ2NyxlWzI5MTRdPTc0NjgsZVsyOTE2XT03NDcwLGVbMjkxN109NzQ3MSxlWzI5MThdPTc0NzIsZVsyOTIwXT03NDc0LGVbMjkyMV09NzQ3NSxlWzI5MjJdPTc0NzYsZVsyOTI0XT03NDc4LGVbMjkyNV09NzQ3OSxlWzI5MjZdPTc0ODAsZVsyOTI4XT03NDgyLGVbMjkyOV09NzQ4MyxlWzI5MzBdPTc0ODQsZVsyOTMyXT03NDg2LGVbMjkzM109NzQ4NyxlWzI5MzRdPTc0ODgsZVsyOTM2XT03NDkwLGVbMjkzN109NzQ5MSxlWzI5MzhdPTc0OTIsZVsyOTQwXT03NDk0LGVbMjk0MV09NzQ5NSxlWzI5NDJdPTc0OTYsZVsyOTQ0XT03NDk4LGVbMjk0Nl09NzUwMCxlWzI5NDhdPTc1MDIsZVsyOTUwXT03NTA0LGVbMjk1MV09NzUwNSxlWzI5NTJdPTc1MDYsZVsyOTU0XT03NTA4LGVbMjk1NV09NzUwOSxlWzI5NTZdPTc1MTAsZVsyOTU4XT03NTEyLGVbMjk1OV09NzUxMyxlWzI5NjBdPTc1MTQsZVsyOTYyXT03NTE2LGVbMjk2M109NzUxNyxlWzI5NjRdPTc1MTgsZVsyOTY2XT03NTIwLGVbMjk2N109NzUyMSxlWzI5NjhdPTc1MjIsZVsyOTcwXT03NTI0LGVbMjk3MV09NzUyNSxlWzI5NzJdPTc1MjYsZVsyOTc0XT03NTI4LGVbMjk3NV09NzUyOSxlWzI5NzZdPTc1MzAsZVsyOTc4XT0xNTM3LGVbMjk3OV09MTUzOCxlWzI5ODBdPTE1MzksZVsyOTgyXT0xNTQ5LGVbMjk4M109MTU1MSxlWzI5ODRdPTE1NTIsZVsyOTg2XT0xNTU0LGVbMjk4N109MTU1NSxlWzI5ODhdPTE1NTYsZVsyOTkwXT0xNjIzLGVbMjk5MV09MTYyNCxlWzI5OTVdPTE3NzUsZVsyOTk5XT0xNzkxLGVbMzAwMl09NjQyOTAsZVszMDAzXT02NDI5MSxlWzMwMDRdPTY0MjkyLGVbMzAwNl09NjQyOTQsZVszMDA3XT02NDI5NSxlWzMwMDhdPTY0Mjk2LGVbMzAxMV09MTkwMCxlWzMwMTRdPTgyMjMsZVszMDE1XT04MjQ0LGVbMzAxN109NzUzMixlWzMwMThdPTc1MzMsZVszMDE5XT03NTM0LGVbMzA3NV09NzU5MCxlWzMwNzZdPTc1OTEsZVszMDc5XT03NTk0LGVbMzA4MF09NzU5NSxlWzMwODNdPTc1OTgsZVszMDg0XT03NTk5LGVbMzA4N109NzYwMixlWzMwODhdPTc2MDMsZVszMDkxXT03NjA2LGVbMzA5Ml09NzYwNyxlWzMwOTVdPTc2MTAsZVszMDk2XT03NjExLGVbMzA5OV09NzYxNCxlWzMxMDBdPTc2MTUsZVszMTAzXT03NjE4LGVbMzEwNF09NzYxOSxlWzMxMDddPTgzMzcsZVszMTA4XT04MzM4LGVbMzExNl09MTg4NCxlWzMxMTldPTE4ODUsZVszMTIwXT0xODg1LGVbMzEyM109MTg4NixlWzMxMjRdPTE4ODYsZVszMTI3XT0xODg3LGVbMzEyOF09MTg4NyxlWzMxMzFdPTE4ODgsZVszMTMyXT0xODg4LGVbMzEzNV09MTg4OSxlWzMxMzZdPTE4ODksZVszMTM5XT0xODkwLGVbMzE0MF09MTg5MCxlWzMxNDNdPTE4OTEsZVszMTQ0XT0xODkxLGVbMzE0N109MTg5MixlWzMxNDhdPTE4OTIsZVszMTUzXT01ODAsZVszMTU0XT01ODEsZVszMTU3XT01ODQsZVszMTU4XT01ODUsZVszMTYxXT01ODgsZVszMTYyXT01ODksZVszMTY1XT04OTEsZVszMTY2XT04OTIsZVszMTY5XT0xMjc0LGVbMzE3MF09MTI3NSxlWzMxNzNdPTEyNzgsZVszMTc0XT0xMjc5LGVbMzE4MV09NzYyMixlWzMxODJdPTc2MjMsZVszMjgyXT0xMTc5OSxlWzMzMTZdPTU3OCxlWzMzNzldPTQyNzg1LGVbMzM5M109MTE1OSxlWzM0MTZdPTgzNzd9KSk7dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9bDt2YXIgZj0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPWY7dmFyIGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzFdPTMyLGVbNF09NjUsZVs1XT0xOTIsZVs2XT0xOTMsZVs5XT0xOTYsZVsxN109NjYsZVsxOF09NjcsZVsyMV09MjY4LGVbMjRdPTY4LGVbMjhdPTY5LGVbMjldPTIwMCxlWzMwXT0yMDEsZVszMl09MjgyLGVbMzhdPTcwLGVbMzldPTcxLGVbNDRdPTcyLGVbNDddPTczLGVbNDhdPTIwNCxlWzQ5XT0yMDUsZVs1OF09NzQsZVs2MF09NzUsZVs2Ml09NzYsZVs2OF09NzcsZVs2OV09NzgsZVs3NV09NzksZVs3Nl09MjEwLGVbODBdPTIxNCxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzkyXT0zNDQsZVs5NF09ODMsZVs5N109MzUyLGVbMTAwXT04NCxlWzEwNF09ODUsZVsxMDldPTIyMCxlWzExNV09ODYsZVsxMTZdPTg3LGVbMTIxXT04OCxlWzEyMl09ODksZVsxMjRdPTIyMSxlWzEyN109OTAsZVsxMjldPTM4MSxlWzI1OF09OTcsZVsyNTldPTIyNCxlWzI2MF09MjI1LGVbMjYzXT0yMjgsZVsyNjhdPTI2MSxlWzI3MV09OTgsZVsyNzJdPTk5LGVbMjczXT0yNjMsZVsyNzVdPTI2OSxlWzI4Ml09MTAwLGVbMjg2XT0xMDEsZVsyODddPTIzMixlWzI4OF09MjMzLGVbMjkwXT0yODMsZVsyOTVdPTI4MSxlWzI5Nl09MTAyLGVbMzM2XT0xMDMsZVszNDZdPTEwNCxlWzM0OV09MTA1LGVbMzUwXT0yMzYsZVszNTFdPTIzNyxlWzM2MV09MTA2LGVbMzY0XT0xMDcsZVszNjddPTEwOCxlWzM3MV09MzIyLGVbMzczXT0xMDksZVszNzRdPTExMCxlWzM4MV09MTExLGVbMzgyXT0yNDIsZVszODNdPTI0MyxlWzM4Nl09MjQ2LGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbMzk4XT0zNDUsZVs0MDBdPTExNSxlWzQwMV09MzQ3LGVbNDAzXT0zNTMsZVs0MTBdPTExNixlWzQzN109MTE3LGVbNDQyXT0yNTIsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ1N109MjUzLGVbNDYwXT0xMjIsZVs0NjJdPTM4MixlWzQ2M109MzgwLGVbODUzXT00NCxlWzg1NV09NTgsZVs4NTZdPTQ2LGVbODc2XT00NyxlWzg3OF09NDUsZVs4ODJdPTQ1LGVbODk0XT00MCxlWzg5NV09NDEsZVs4OTZdPTkxLGVbODk3XT05MyxlWzkyM109NjQsZVsxMDA0XT00OCxlWzEwMDVdPTQ5LGVbMTAwNl09NTAsZVsxMDA3XT01MSxlWzEwMDhdPTUyLGVbMTAwOV09NTMsZVsxMDEwXT01NCxlWzEwMTFdPTU1LGVbMTAxMl09NTYsZVsxMDEzXT01NyxlWzEwODFdPTM3LGVbMTA4NV09NDMsZVsxMDg2XT00NX0pKTt0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVG9Vbmljb2RlTWFwPXQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtpKHRoaXMsZSksdGhpcy5fbWFwPXR9cmV0dXJuIHMoZSxbe2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfX0se2tleToiYW1lbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX1dKSxlfSgpO3QuVG9Vbmljb2RlTWFwPWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMuZmlyc3RDaGFyPXQsdGhpcy5sYXN0Q2hhcj1yfXJldHVybiBzKGUsW3trZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfX0se2tleToiY2hhckNvZGVPZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9fSx7a2V5OiJhbWVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fV0pLGV9KCk7dC5JZGVudGl0eVRvVW5pY29kZU1hcD11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigxNjcpLGk9cigyKTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnByb3BlcnRpZXM9cjt2YXIgbz1uZXcgbi5DRkZQYXJzZXIodCxyLGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1vLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO3ZhciBzPW5ldyBuLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTt0aGlzLnNlYWNzPXRoaXMuY2ZmLnNlYWNzO3RyeXt0aGlzLmRhdGE9cy5jb21waWxlKCl9Y2F0Y2goZSl7KDAsaS53YXJuKSgiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK3IubG9hZGVkTmFtZSksdGhpcy5kYXRhPXR9dGhpcy5fY3JlYXRlQnVpbHRJbkVuY29kaW5nKCl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJudW1HbHlwaHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudH19LHtrZXk6ImdldENoYXJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsaT1uLmNpZFRvR2lkTWFwLG89bi5jTWFwLHM9ci5jaGFyc2V0LmNoYXJzZXQ7aWYobi5jb21wb3NpdGUpe3ZhciBjLHU7aWYoaSYmaS5sZW5ndGg+MCl7Yz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgbD0wLGY9aS5sZW5ndGg7bDxmO2wrKyl7dmFyIGg9aVtsXTt2b2lkIDAhPT1oJiYoY1toXT1sKX19aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxzLmxlbmd0aDt0Kyspe3ZhciBkPXNbdF07dT1vLmNoYXJDb2RlT2YoZCksYyYmdm9pZCAwIT09Y1t1XSYmKHU9Y1t1XSksZVt1XT10fWVsc2UgZm9yKHQ9MDt0PHIuY2hhclN0cmluZ3MuY291bnQ7dCsrKWVbdT1vLmNoYXJDb2RlT2YodCldPXQ7cmV0dXJuIGV9dmFyIHA9ci5lbmNvZGluZz9yLmVuY29kaW5nLmVuY29kaW5nOm51bGw7cmV0dXJuIG4uaXNJbnRlcm5hbEZvbnQmJihwPW4uZGVmYXVsdEVuY29kaW5nKSwoMCxhLnR5cGUxRm9udEdseXBoTWFwcGluZykobixwLHMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9fSx7a2V5OiJfY3JlYXRlQnVpbHRJbkVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2ZmLHQ9ZS5jaGFyc2V0LHI9ZS5lbmNvZGluZztpZih0JiZyKXt2YXIgbj10LmNoYXJzZXQsYT1yLmVuY29kaW5nLGk9W107Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107aWYocz49MCl7dmFyIGM9bltzXTtjJiYoaVtvXT1jKX19aS5sZW5ndGg+MCYmKHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2Rpbmc9aSl9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQ0ZGRm9udD1jfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTY0KSxpPXIoMTY4KSxvPXIoMTY2KSxzPXIoMTM5KTtmdW5jdGlvbiBjKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1mKGUpO2lmKHQpe3ZhciBhPWYodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxoKGUpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWgoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1oKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNik+PjE2fWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gbShlLHQpLzE2Mzg0fWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5sZW5ndGgscj0zMjc2ODtyZXR1cm4gdDwxMjQwP3I9MTA3OnQ8MzM5MDAmJihyPTExMzEpLHJ9ZnVuY3Rpb24gUyhlLHQscil7dmFyIGEsaSxvLHM9MT09PXkoZSx0KzIpP3YoZSx0KzgpOnYoZSx0KzE2KSxjPXkoZSx0K3MpO2lmKDQ9PT1jKXt5KGUsdCtzKzIpO3ZhciB1PXkoZSx0K3MrNik+PjE7Zm9yKGk9dCtzKzE0LGE9W10sbz0wO288dTtvKyssaSs9MilhW29dPXtlbmQ6eShlLGkpfTtmb3IoaSs9MixvPTA7bzx1O28rKyxpKz0yKWFbb10uc3RhcnQ9eShlLGkpO2ZvcihvPTA7bzx1O28rKyxpKz0yKWFbb10uaWREZWx0YT15KGUsaSk7Zm9yKG89MDtvPHU7bysrLGkrPTIpe3ZhciBsPXkoZSxpKTtpZigwIT09bCl7YVtvXS5pZHM9W107Zm9yKHZhciBmPTAsaD1hW29dLmVuZC1hW29dLnN0YXJ0KzE7ZjxoO2YrKylhW29dLmlkc1tmXT15KGUsaStsKSxsKz0yfX1yZXR1cm4gYX1pZigxMj09PWMpe3ZhciBkPXYoZSx0K3MrMTIpO2ZvcihpPXQrcysxNixhPVtdLG89MDtvPGQ7bysrKXQ9dihlLGkpLGEucHVzaCh7c3RhcnQ6dCxlbmQ6dihlLGkrNCksaWREZWx0YTp2KGUsaSs4KS10fSksaSs9MTI7cmV0dXJuIGF9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGNtYXA6ICIuY29uY2F0KGMpKX1mdW5jdGlvbiB4KGUsdCxyLG4pe3ZhciBpPW5ldyBhLkNGRlBhcnNlcihuZXcgcy5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmkuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczppLnRvcERpY3QucHJpdmF0ZURpY3QmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleCYmaS5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgcj10LmNvZGVQb2ludEF0KDApLG49MCxhPTAsaT1lLmxlbmd0aC0xO2E8aTspe3ZhciBvPWEraSsxPj4xO3I8ZVtvXS5zdGFydD9pPW8tMTphPW99cmV0dXJuIGVbYV0uc3RhcnQ8PXImJnI8PWVbYV0uZW5kJiYobj1lW2FdLmlkRGVsdGErKGVbYV0uaWRzP2VbYV0uaWRzW3ItZVthXS5zdGFydF06cikmNjU1MzUpLHtjaGFyQ29kZTpyLGdseXBoSWQ6bn19ZnVuY3Rpb24gQShlLHQscil7ZnVuY3Rpb24gbihlLHIpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBhKGUscil7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UscixuLGFdfSl9dmFyIG8scz0wLGM9bShlLHMpLHU9MCxsPTA7aWYocys9MTAsYzwwKWRve289eShlLHMpO3ZhciBmPXkoZSxzKzIpO3MrPTQ7dmFyIGg9dm9pZCAwLGQ9dm9pZCAwOzEmbz8oMiZvPyhoPW0oZSxzKSxkPW0oZSxzKzIpKTooaD15KGUscyksZD15KGUscysyKSkscys9NCk6MiZvPyhoPWIoZSxzKyspLGQ9YihlLHMrKykpOihoPWVbcysrXSxkPWVbcysrXSksMiZvPyh1PWgsbD1kKToodT0wLGw9MCk7dmFyIHA9MSxnPTEsdj0wLGs9MDs4Jm8/KHA9Zz13KGUscykscys9Mik6NjQmbz8ocD13KGUscyksZz13KGUscysyKSxzKz00KToxMjgmbyYmKHA9dyhlLHMpLHY9dyhlLHMrMiksaz13KGUscys0KSxnPXcoZSxzKzYpLHMrPTgpO3ZhciBTPXIuZ2x5cGhzW2ZdO1MmJih0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbcCx2LGssZyx1LGxdfSksQShTLHQsciksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJm8pO2Vsc2V7dmFyIHgsTyxDPVtdO2Zvcih4PTA7eDxjO3grKylDLnB1c2goeShlLHMpKSxzKz0yO3MrPTIreShlLHMpO2Zvcih2YXIgRj1DLmF0KC0xKSsxLFA9W107UC5sZW5ndGg8Rjspe3ZhciBUPTE7Zm9yKDgmKG89ZVtzKytdKSYmKFQrPWVbcysrXSk7VC0tID4wOylQLnB1c2goe2ZsYWdzOm99KX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgxOCZQW3hdLmZsYWdzKXtjYXNlIDA6dSs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSAyOnUtPWVbcysrXTticmVhaztjYXNlIDE4OnUrPWVbcysrXX1QW3hdLng9dX1mb3IoeD0wO3g8Rjt4Kyspe3N3aXRjaCgzNiZQW3hdLmZsYWdzKXtjYXNlIDA6bCs9bShlLHMpLHMrPTI7YnJlYWs7Y2FzZSA0OmwtPWVbcysrXTticmVhaztjYXNlIDM2OmwrPWVbcysrXX1QW3hdLnk9bH12YXIgST0wO2ZvcihzPTA7czxjO3MrKyl7dmFyIEU9Q1tzXSxqPVAuc2xpY2UoSSxFKzEpO2lmKDEmalswXS5mbGFncylqLnB1c2goalswXSk7ZWxzZSBpZigxJmouYXQoLTEpLmZsYWdzKWoudW5zaGlmdChqLmF0KC0xKSk7ZWxzZXt2YXIgTT17ZmxhZ3M6MSx4OihqWzBdLngrai5hdCgtMSkueCkvMix5OihqWzBdLnkrai5hdCgtMSkueSkvMn07ai51bnNoaWZ0KE0pLGoucHVzaChNKX1mb3IobihqWzBdLngsalswXS55KSx4PTEsTz1qLmxlbmd0aDt4PE87eCsrKTEmalt4XS5mbGFncz9hKGpbeF0ueCxqW3hdLnkpOjEmalt4KzFdLmZsYWdzPyhpKGpbeF0ueCxqW3hdLnksalt4KzFdLngsalt4KzFdLnkpLHgrKyk6aShqW3hdLngsalt4XS55LChqW3hdLngralt4KzFdLngpLzIsKGpbeF0ueStqW3grMV0ueSkvMik7ST1FKzF9fX1mdW5jdGlvbiBDKGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gcyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxvKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLG9dfSl9dmFyIHU9W10sbD0wLGY9MCxoPTA7IWZ1bmN0aW9uIGUoZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDspe3ZhciBnPSExLHY9ZFtwKytdLHk9dm9pZCAwLG09dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLFM9dm9pZCAwLHg9dm9pZCAwLEE9dm9pZCAwLEY9dm9pZCAwO3N3aXRjaCh2KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpoKz11Lmxlbmd0aD4+MSxnPSEwO2JyZWFrO2Nhc2UgNDpmKz11LnBvcCgpLGkobCxmKSxnPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3UubGVuZ3RoPjA7KWwrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNjpmb3IoO3UubGVuZ3RoPjAmJihzKGwrPXUuc2hpZnQoKSxmKSwwIT09dS5sZW5ndGgpOylmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgNzpmb3IoO3UubGVuZ3RoPjAmJihmKz11LnNoaWZ0KCkscyhsLGYpLDAhPT11Lmxlbmd0aCk7KXMobCs9dS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgODpmb3IoO3UubGVuZ3RoPjA7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2Nhc2UgMTA6aWYoQT11LnBvcCgpLEY9bnVsbCxyLmlzQ0ZGQ0lERm9udCl7dmFyIFA9ci5mZFNlbGVjdC5nZXRGREluZGV4KGEpO2lmKFA+PTAmJlA8ci5mZEFycmF5Lmxlbmd0aCl7dmFyIFQ9ci5mZEFycmF5W1BdLEk9dm9pZCAwO1QucHJpdmF0ZURpY3QmJlQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKEk9VC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpLEkmJihGPUlbQSs9ayhJKV0pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tBK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKHY9ZFtwKytdKXtjYXNlIDM0Om09KHk9bCt1LnNoaWZ0KCkpK3Uuc2hpZnQoKSxTPWYrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LGYsbSxTLGwsUyksbT0oeT1sK3Uuc2hpZnQoKSkrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksYyh5LFMsbSxmLGwsZik7YnJlYWs7Y2FzZSAzNTp5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKSx1LnBvcCgpO2JyZWFrO2Nhc2UgMzY6Yyh5PWwrdS5zaGlmdCgpLFM9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx4PVMrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCkseCksYyh5PWwrdS5zaGlmdCgpLHgsbT15K3Uuc2hpZnQoKSx4K3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGYpO2JyZWFrO2Nhc2UgMzc6dmFyIEU9bCxqPWY7eT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZikseT1sK3Uuc2hpZnQoKSxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0sZj13LE1hdGguYWJzKGwtRSk+TWF0aC5hYnMoZi1qKT9sKz11LnNoaWZ0KCk6Zis9dS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KHYpKX1icmVhaztjYXNlIDE0OmlmKHUubGVuZ3RoPj00KXt2YXIgTT11LnBvcCgpLF89dS5wb3AoKTtmPXUucG9wKCksbD11LnBvcCgpLHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNsYXRlIixhcmdzOltsLGZdfSk7dmFyIEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbTV1dKSk7QyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpLHQucHVzaCh7Y21kOiJyZXN0b3JlIn0pLEw9TyhyLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShyLmdseXBoTmFtZU1hcFtvLlN0YW5kYXJkRW5jb2RpbmdbX11dKSksQyhyLmdseXBoc1tMLmdseXBoSWRdLHQscixMLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6cCs9KGgrPXUubGVuZ3RoPj4xKSs3Pj4zLGc9ITA7YnJlYWs7Y2FzZSAyMTpmKz11LnBvcCgpLGkobCs9dS5wb3AoKSxmKSxnPSEwO2JyZWFrO2Nhc2UgMjI6aShsKz11LnBvcCgpLGYpLGc9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3UubGVuZ3RoPjI7KXk9bCt1LnNoaWZ0KCksYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrdS5zaGlmdCgpLGMoeSxiLG0sdyxsLGYpO2wrPXUuc2hpZnQoKSxmKz11LnNoaWZ0KCkscyhsLGYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDt1Lmxlbmd0aD42OylsKz11LnNoaWZ0KCksZis9dS5zaGlmdCgpLHMobCxmKTt5PWwrdS5zaGlmdCgpLGI9Zit1LnNoaWZ0KCksbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGw9bSt1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbCxmKTticmVhaztjYXNlIDI2OmZvcih1Lmxlbmd0aCUyJiYobCs9dS5zaGlmdCgpKTt1Lmxlbmd0aD4wOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGwsZik7YnJlYWs7Y2FzZSAyNzpmb3IodS5sZW5ndGglMiYmKGYrPXUuc2hpZnQoKSk7dS5sZW5ndGg+MDspYyh5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcpO2JyZWFrO2Nhc2UgMjg6dS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpBPXUucG9wKCkrci5nc3VicnNCaWFzLChGPXIuZ3N1YnJzW0FdKSYmZShGKTticmVhaztjYXNlIDMwOmZvcig7dS5sZW5ndGg+MCYmKHk9bCxiPWYrdS5zaGlmdCgpLG09eSt1LnNoaWZ0KCksdz1iK3Uuc2hpZnQoKSxsPW0rdS5zaGlmdCgpLGY9dysoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxjKHksYixtLHcsbCxmKSwwIT09dS5sZW5ndGgpOyl5PWwrdS5zaGlmdCgpLGI9ZixtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksZj13K3Uuc2hpZnQoKSxjKHksYixtLHcsbD1tKygxPT09dS5sZW5ndGg/dS5zaGlmdCgpOjApLGYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDt1Lmxlbmd0aD4wJiYoeT1sK3Uuc2hpZnQoKSxiPWYsbT15K3Uuc2hpZnQoKSx3PWIrdS5zaGlmdCgpLGY9dyt1LnNoaWZ0KCksYyh5LGIsbSx3LGw9bSsoMT09PXUubGVuZ3RoP3Uuc2hpZnQoKTowKSxmKSwwIT09dS5sZW5ndGgpOyl5PWwsYj1mK3Uuc2hpZnQoKSxtPXkrdS5zaGlmdCgpLHc9Yit1LnNoaWZ0KCksbD1tK3Uuc2hpZnQoKSxmPXcrKDE9PT11Lmxlbmd0aD91LnNoaWZ0KCk6MCksYyh5LGIsbSx3LGwsZik7YnJlYWs7ZGVmYXVsdDppZih2PDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdCh2KSk7djwyNDc/dS5wdXNoKHYtMTM5KTp2PDI1MT91LnB1c2goMjU2Kih2LTI0NykrZFtwKytdKzEwOCk6djwyNTU/dS5wdXNoKDI1NiotKHYtMjUxKS1kW3ArK10tMTA4KToodS5wdXNoKChkW3BdPDwyNHxkW3ArMV08PDE2fGRbcCsyXTw8OHxkW3ArM10pLzY1NTM2KSxwKz00KX1nJiYodS5sZW5ndGg9MCl9fShlKX12YXIgRj1bXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtkKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb21waWxlZEZvbnQuIiksdGhpcy5mb250TWF0cml4PXQsdGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBnKGUsW3trZXk6ImdldFBhdGhKcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkLGE9dGhpcy5jb21waWxlZEdseXBoc1tuXTtpZighYSl0cnl7YT10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tuXSxuKSx0aGlzLmNvbXBpbGVkR2x5cGhzW25dPWF9Y2F0Y2goZSl7dGhyb3cgdGhpcy5jb21waWxlZEdseXBoc1tuXT1GLHZvaWQgMD09PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXSYmKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtyXT1uKSxlfXJldHVybiB2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl09biksYX19LHtrZXk6ImNvbXBpbGVHbHlwaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZXx8MD09PWUubGVuZ3RofHwxND09PWVbMF0pcmV0dXJuIEY7dmFyIHI9dGhpcy5mb250TWF0cml4O2lmKHRoaXMuaXNDRkZDSURGb250KXt2YXIgYT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7YT49MCYmYTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2FdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfXZhciBpPVt7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOnIuc2xpY2UoKX0se2NtZDoic2NhbGUiLGFyZ3M6WyJzaXplIiwiLXNpemUiXX1dO3JldHVybiB0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Tyh0aGlzLmNtYXAsZSkscj10LmNoYXJDb2RlLG49dC5nbHlwaElkO3JldHVybiB2b2lkIDAhPT10aGlzLmNvbXBpbGVkR2x5cGhzW25dJiZ2b2lkIDAhPT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbcl19fV0pLGV9KCksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gZCh0aGlzLHIpLChpPXQuY2FsbCh0aGlzLGF8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSkuZ2x5cGhzPWUsaS5jbWFwPW4saX1yZXR1cm4gZyhyLFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQpe0EoZSx0LHRoaXMpfX1dKSxyfShQKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsbyl7dmFyIHM7cmV0dXJuIGQodGhpcyxyKSwocz10LmNhbGwodGhpcyxhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKSkuZ2x5cGhzPWUuZ2x5cGhzLHMuZ3N1YnJzPWUuZ3N1YnJzfHxbXSxzLnN1YnJzPWUuc3VicnN8fFtdLHMuY21hcD1uLHMuZ2x5cGhOYW1lTWFwPW98fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSxzLmdzdWJyc0JpYXM9ayhzLmdzdWJycykscy5zdWJyc0JpYXM9ayhzLnN1YnJzKSxzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxzLmZkU2VsZWN0PWUuZmRTZWxlY3Qscy5mZEFycmF5PWUuZmRBcnJheSxzfXJldHVybiBnKHIsW3trZXk6ImNvbXBpbGVHbHlwaEltcGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtDKGUsdCx0aGlzLHIpfX1dKSxyfShQKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2QodGhpcyxlKX1yZXR1cm4gZyhlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYSxpLG8scyxjLHU9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxsPXkodSw0KSxmPTAsaD0xMjtmPGw7ZisrLGgrPTE2KXt2YXIgZD0oMCxuLmJ5dGVzVG9TdHJpbmcpKHUuc3ViYXJyYXkoaCxoKzQpKSxwPXYodSxoKzgpLGc9dih1LGgrMTIpO3N3aXRjaChkKXtjYXNlImNtYXAiOnI9Uyh1LHApO2JyZWFrO2Nhc2UiZ2x5ZiI6YT11LnN1YmFycmF5KHAscCtnKTticmVhaztjYXNlImxvY2EiOmk9dS5zdWJhcnJheShwLHArZyk7YnJlYWs7Y2FzZSJoZWFkIjpjPXkodSxwKzE4KSxzPXkodSxwKzUwKTticmVhaztjYXNlIkNGRiAiOm89eCh1LHAscCtnLHQpfX1pZihhKXt2YXIgbT1jP1sxL2MsMCwwLDEvYywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9dik6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDIqeShlLHQpfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBjPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGMpKSxvPWN9cmV0dXJuIGl9KGEsaSxzKSxyLG0pfXJldHVybiBuZXcgSShvLHIsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19XSksZX0oKTt0LkZvbnRSZW5kZXJlckZhY3Rvcnk9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgbj1yKDEzNSksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YTt2YXIgaT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9LGVbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fSxlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fSxlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn0sZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM30sZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9LGVbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX0sZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9LGVbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn0sZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfSxlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO3QuZ2V0Rm9udEJhc2ljTWV0cmljcz1pfSwoZSx0KT0+e2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8aShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1pKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIHQmJmMoZS5wcm90b3R5cGUsdCksciYmYyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuR2x5ZlRhYmxlPXZvaWQgMDt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5nbHlmVGFibGUsbj10LmlzR2x5cGhMb2NhdGlvbnNMb25nLGE9dC5sb2NhVGFibGUsaT10Lm51bUdseXBocztzKHRoaXMsZSksdGhpcy5nbHlwaHM9W107Zm9yKHZhciBvPW5ldyBEYXRhVmlldyhhLmJ1ZmZlcixhLmJ5dGVPZmZzZXQsYS5ieXRlTGVuZ3RoKSxjPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSx1PW4/NDoyLGw9bj9vLmdldFVpbnQzMigwKToyKm8uZ2V0VWludDE2KDApLGg9MCxkPTA7ZDxpO2QrKyl7aCs9dTt2YXIgcD1uP28uZ2V0VWludDMyKGgpOjIqby5nZXRVaW50MTYoaCk7aWYocCE9PWwpe3ZhciBnPWYucGFyc2UobCxjKTt0aGlzLmdseXBocy5wdXNoKGcpLGw9cH1lbHNlIHRoaXMuZ2x5cGhzLnB1c2gobmV3IGYoe30pKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0LmdldFNpemUoKSszJi00KX0pLDApfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplKCksdD1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKGUpKSxyPWU+MTMxMDcwLG49cj80OjIsaT1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCh0aGlzLmdseXBocy5sZW5ndGgrMSkqbikpO3I/aS5zZXRVaW50MzIoMCwwKTppLnNldFVpbnQxNigwLDApO3ZhciBvLHM9MCxjPTAsdT1hKHRoaXMuZ2x5cGhzKTt0cnl7Zm9yKHUucygpOyEobz11Lm4oKSkuZG9uZTspcz0ocys9by52YWx1ZS53cml0ZShzLHQpKSszJi00LGMrPW4scj9pLnNldFVpbnQzMihjLHMpOmkuc2V0VWludDE2KGMscz4+MSl9Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJue2lzTG9jYXRpb25Mb25nOnIsbG9jYTpuZXcgVWludDhBcnJheShpLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8cjt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fV0pLGV9KCk7dC5HbHlmVGFibGU9bDt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5oZWFkZXIsbj12b2lkIDA9PT1yP251bGw6cixhPXQuc2ltcGxlLGk9dm9pZCAwPT09YT9udWxsOmEsbz10LmNvbXBvc2l0ZXMsYz12b2lkIDA9PT1vP251bGw6bztzKHRoaXMsZSksdGhpcy5oZWFkZXI9bix0aGlzLnNpbXBsZT1pLHRoaXMuY29tcG9zaXRlcz1jfXJldHVybiB1KGUsW3trZXk6ImdldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuZ2V0U2l6ZSgpfSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO3ZhciByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2V7dmFyIG4saT1hKHRoaXMuY29tcG9zaXRlcyk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KWUrPW4udmFsdWUud3JpdGUoZSx0KX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuIGUtcn19LHtrZXk6InNjYWxlIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmhlYWRlcil7dmFyIHQ9KHRoaXMuaGVhZGVyLnhNaW4rdGhpcy5oZWFkZXIueE1heCkvMjtpZih0aGlzLmhlYWRlci5zY2FsZSh0LGUpLHRoaXMuc2ltcGxlKXRoaXMuc2ltcGxlLnNjYWxlKHQsZSk7ZWxzZXt2YXIgcixuPWEodGhpcy5jb21wb3NpdGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5zY2FsZSh0LGUpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fX1dLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgYT1yKGgucGFyc2UodCxuKSwyKSxpPWFbMF0sbz1hWzFdO2lmKHQrPWksby5udW1iZXJPZkNvbnRvdXJzPDApe2Zvcih2YXIgcz1bXTs7KXt2YXIgYz1yKGcucGFyc2UodCxuKSwyKSx1PWNbMF0sbD1jWzFdO2lmKHQrPXUscy5wdXNoKGwpLCEoMzImbC5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBlKHtoZWFkZXI6byxjb21wb3NpdGVzOnN9KX1yZXR1cm4gbmV3IGUoe2hlYWRlcjpvLHNpbXBsZTpwLnBhcnNlKHQsbixvLm51bWJlck9mQ29udG91cnMpfSl9fV0pLGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5udW1iZXJPZkNvbnRvdXJzLG49dC54TWluLGE9dC55TWluLGk9dC54TWF4LG89dC55TWF4O3ModGhpcyxlKSx0aGlzLm51bWJlck9mQ29udG91cnM9cix0aGlzLnhNaW49bix0aGlzLnlNaW49YSx0aGlzLnhNYXg9aSx0aGlzLnlNYXg9b31yZXR1cm4gdShlLFt7a2V5OiJnZXRTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxMH19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfX0se2tleToic2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuWzEwLG5ldyBlKHtudW1iZXJPZkNvbnRvdXJzOnIuZ2V0SW50MTYodCkseE1pbjpyLmdldEludDE2KHQrMikseU1pbjpyLmdldEludDE2KHQrNCkseE1heDpyLmdldEludDE2KHQrNikseU1heDpyLmdldEludDE2KHQrOCl9KV19fV0pLGV9KCksZD11KChmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LnhDb29yZGluYXRlcyxhPXQueUNvb3JkaW5hdGVzO3ModGhpcyxlKSx0aGlzLnhDb29yZGluYXRlcz1uLHRoaXMueUNvb3JkaW5hdGVzPWEsdGhpcy5mbGFncz1yfSkpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuY29udG91cnMsbj10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5jb250b3Vycz1yLHRoaXMuaW5zdHJ1Y3Rpb25zPW59cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgscj0wLG49MCxpPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihpLnMoKTshKGU9aS5uKCkpLmRvbmU7KXt2YXIgbz1lLnZhbHVlO3QrPW8uZmxhZ3MubGVuZ3RoO2Zvcih2YXIgcz0wLGM9by54Q29vcmRpbmF0ZXMubGVuZ3RoO3M8YztzKyspe3ZhciB1PW8ueENvb3JkaW5hdGVzW3NdLGw9by55Q29vcmRpbmF0ZXNbc10sZj1NYXRoLmFicyh1LXIpO2Y+MjU1P3QrPTI6Zj4wJiYodCs9MSkscj11LChmPU1hdGguYWJzKGwtbikpPjI1NT90Kz0yOmY+MCYmKHQrPTEpLG49bH19fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiB0fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1lLGk9W10sbz1bXSxzPVtdLGM9MCx1PTAsbD1hKHRoaXMuY29udG91cnMpO3RyeXtmb3IobC5zKCk7IShyPWwubigpKS5kb25lOyl7Zm9yKHZhciBmPXIudmFsdWUsaD0wLGQ9Zi54Q29vcmRpbmF0ZXMubGVuZ3RoO2g8ZDtoKyspe3ZhciBwPWYuZmxhZ3NbaF0sZz1mLnhDb29yZGluYXRlc1toXSx2PWctYztpZigwPT09dilwfD0xNixpLnB1c2goMCk7ZWxzZXt2YXIgeT1NYXRoLmFicyh2KTt5PD0yNTU/KHB8PXY+PTA/MTg6MixpLnB1c2goeSkpOmkucHVzaCh2KX1jPWc7dmFyIG09Zi55Q29vcmRpbmF0ZXNbaF07aWYoMD09KHY9bS11KSlwfD0zMixvLnB1c2goMCk7ZWxzZXt2YXIgYj1NYXRoLmFicyh2KTtiPD0yNTU/KHB8PXY+PTA/MzY6NCxvLnB1c2goYikpOm8ucHVzaCh2KX11PW0scy5wdXNoKHApfXQuc2V0VWludDE2KGUsaS5sZW5ndGgtMSksZSs9Mn19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtmb3IodmFyIHc9MCxrPXM7dzxrLmxlbmd0aDt3Kyspe3ZhciBTPWtbd107dC5zZXRVaW50OChlKyssUyl9Zm9yKHZhciB4PTAsTz1pLmxlbmd0aDt4PE87eCsrKXt2YXIgQT1pW3hdLEM9c1t4XTsyJkM/dC5zZXRVaW50OChlKyssQSk6MTYmQ3x8KHQuc2V0SW50MTYoZSxBKSxlKz0yKX1mb3IodmFyIEY9MCxQPW8ubGVuZ3RoO0Y8UDtGKyspe3ZhciBUPW9bRl0sST1zW0ZdOzQmST90LnNldFVpbnQ4KGUrKyxUKTozMiZJfHwodC5zZXRJbnQxNihlLFQpLGUrPTIpfXJldHVybiBlLW59fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWEodGhpcy5jb250b3Vycyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO2lmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKHZhciBvPTAscz1pLnhDb29yZGluYXRlcy5sZW5ndGg7bzxzO28rKylpLnhDb29yZGluYXRlc1tvXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW29dLWUpKnQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPVtdLGk9MDtpPG47aSsrKXt2YXIgbz1yLmdldFVpbnQxNih0KTt0Kz0yLGEucHVzaChvKX12YXIgcz1hW24tMV0rMSxjPXIuZ2V0VWludDE2KHQpO3QrPTI7dmFyIHU9bmV3IFVpbnQ4QXJyYXkocikuc2xpY2UodCx0K2MpO3QrPWM7Zm9yKHZhciBsPVtdLGY9MDtmPHM7dCsrLGYrKyl7dmFyIGg9ci5nZXRVaW50OCh0KTtpZihsLnB1c2goaCksOCZoKXt2YXIgcD1yLmdldFVpbnQ4KCsrdCk7aF49ODtmb3IodmFyIGc9MDtnPHA7ZysrKWwucHVzaChoKTtmKz1wfX1mb3IodmFyIHY9W10seT1bXSxtPVtdLGI9W10sdz1bXSxrPTAsUz0wLHg9MDt4PHM7eCsrKXt2YXIgTz1sW3hdO2lmKDImTyl7dmFyIEE9ci5nZXRVaW50OCh0KyspO1MrPTE2Jk8/QTotQSx5LnB1c2goUyl9ZWxzZSAxNiZPfHwoUys9ci5nZXRJbnQxNih0KSx0Kz0yKSx5LnB1c2goUyk7YVtrXT09PXgmJihrKyssdi5wdXNoKHkpLHk9W10pfVM9MCxrPTA7Zm9yKHZhciBDPTA7QzxzO0MrKyl7dmFyIEY9bFtDXTtpZig0JkYpe3ZhciBQPXIuZ2V0VWludDgodCsrKTtTKz0zMiZGP1A6LVAsbS5wdXNoKFMpfWVsc2UgMzImRnx8KFMrPXIuZ2V0SW50MTYodCksdCs9MiksbS5wdXNoKFMpO2IucHVzaCgxJkZ8NjQmRiksYVtrXT09PUMmJih5PXZba10saysrLHcucHVzaChuZXcgZCh7ZmxhZ3M6Yix4Q29vcmRpbmF0ZXM6eSx5Q29vcmRpbmF0ZXM6bX0pKSxtPVtdLGI9W10pfXJldHVybiBuZXcgZSh7Y29udG91cnM6dyxpbnN0cnVjdGlvbnM6dX0pfX1dKSxlfSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZmxhZ3Msbj10LmdseXBoSW5kZXgsYT10LmFyZ3VtZW50MSxpPXQuYXJndW1lbnQyLG89dC50cmFuc2YsYz10Lmluc3RydWN0aW9ucztzKHRoaXMsZSksdGhpcy5mbGFncz1yLHRoaXMuZ2x5cGhJbmRleD1uLHRoaXMuYXJndW1lbnQxPWEsdGhpcy5hcmd1bWVudDI9aSx0aGlzLnRyYW5zZj1vLHRoaXMuaW5zdHJ1Y3Rpb25zPWN9cmV0dXJuIHUoZSxbe2tleToiZ2V0U2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoO3JldHVybiAyNTYmdGhpcy5mbGFncyYmKGUrPTIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSxlKz0yLDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fChlKz0yKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fChlKz0yKSxlfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpLHQuc2V0VWludDE2KGUsdGhpcy5mbGFncyksdC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCksZSs9NCwxJnRoaXMuZmxhZ3M/KDImdGhpcy5mbGFncz8odC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50MikpOih0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKSxlKz00KToodC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKSx0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50MiksZSs9MiksMjU2JnRoaXMuZmxhZ3MmJih0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpKSxlLXJ9fSx7a2V5OiJzY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt9fV0sW3trZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuLGEsaT10LG89W10scz1yLmdldFVpbnQxNih0KSxjPXIuZ2V0VWludDE2KHQrMik7dCs9NCwxJnM/KDImcz8obj1yLmdldEludDE2KHQpLGE9ci5nZXRJbnQxNih0KzIpKToobj1yLmdldFVpbnQxNih0KSxhPXIuZ2V0VWludDE2KHQrMikpLHQrPTQsc149MSk6KDImcz8obj1yLmdldEludDgodCksYT1yLmdldEludDgodCsxKSk6KG49ci5nZXRVaW50OCh0KSxhPXIuZ2V0VWludDgodCsxKSksdCs9MiksOCZzPyhvLnB1c2goci5nZXRVaW50MTYodCkpLHQrPTIpOjY0JnM/KG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpKSx0Kz00KToxMjgmcyYmKG8ucHVzaChyLmdldFVpbnQxNih0KSxyLmdldFVpbnQxNih0KzIpLHIuZ2V0VWludDE2KHQrNCksci5nZXRVaW50MTYodCs2KSksdCs9OCk7dmFyIHU9bnVsbDtpZigyNTYmcyl7dmFyIGw9ci5nZXRVaW50MTYodCk7dCs9Mix1PW5ldyBVaW50OEFycmF5KHIpLnNsaWNlKHQsdCtsKSx0Kz1sfXJldHVyblt0LWksbmV3IGUoe2ZsYWdzOnMsZ2x5cGhJbmRleDpjLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjphLHRyYW5zZjpvLGluc3RydWN0aW9uczp1fSldfX1dKSxlfSgpfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMDt2YXIgYT1yKDEzNSksaT1yKDIpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQscil7ZVt0XT1yPj44JjI1NSxlW3QrMV09MjU1JnJ9ZnVuY3Rpb24gdShlLHQscil7ZVt0XT1yPj4yNCYyNTUsZVt0KzFdPXI+PjE2JjI1NSxlW3QrMl09cj4+OCYyNTUsZVt0KzNdPTI1NSZyfWZ1bmN0aW9uIGwoZSx0LHIpe2lmKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KHIsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2V7dmFyIGksbz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fShyKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBjPWkudmFsdWU7ZVt0KytdPTI1NSZjfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX19fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnNmbnQ9dCx0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciB0LHIsbjtyZXR1cm4gdD1lLG49W3trZXk6ImdldFNlYXJjaFBhcmFtcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fX1dLChyPVt7a2V5OiJ0b0FycmF5Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2ZudCxyPXRoaXMudGFibGVzLG49T2JqZWN0LmtleXMocik7bi5zb3J0KCk7dmFyIG8scyxmLGgsZCxwPW4ubGVuZ3RoLGc9MTIrMTYqcCx2PVtnXTtmb3Iobz0wO288cDtvKyspZys9KChoPXJbbltvXV0pLmxlbmd0aCszJi00KT4+PjAsdi5wdXNoKGcpO3ZhciB5PW5ldyBVaW50OEFycmF5KGcpO2ZvcihvPTA7bzxwO28rKyloPXJbbltvXV0sbCh5LHZbb10saCk7InRydWUiPT09dCYmKHQ9KDAsaS5zdHJpbmczMikoNjU1MzYpKSx5WzBdPTI1NSZ0LmNoYXJDb2RlQXQoMCkseVsxXT0yNTUmdC5jaGFyQ29kZUF0KDEpLHlbMl09MjU1JnQuY2hhckNvZGVBdCgyKSx5WzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyksYyh5LDQscCk7dmFyIG09ZS5nZXRTZWFyY2hQYXJhbXMocCwxNik7Zm9yKGMoeSw2LG0ucmFuZ2UpLGMoeSw4LG0uZW50cnkpLGMoeSwxMCxtLnJhbmdlU2hpZnQpLGc9MTIsbz0wO288cDtvKyspe2Q9bltvXSx5W2ddPTI1NSZkLmNoYXJDb2RlQXQoMCkseVtnKzFdPTI1NSZkLmNoYXJDb2RlQXQoMSkseVtnKzJdPTI1NSZkLmNoYXJDb2RlQXQoMikseVtnKzNdPTI1NSZkLmNoYXJDb2RlQXQoMyk7dmFyIGI9MDtmb3Iocz12W29dLGY9dltvKzFdO3M8ZjtzKz00KWI9YisoMCxhLnJlYWRVaW50MzIpKHkscyk+Pj4wO3UoeSxnKzQsYiksdSh5LGcrOCx2W29dKSx1KHksZysxMixyW2RdLmxlbmd0aCksZys9MTZ9cmV0dXJuIHl9fSx7a2V5OiJhZGRUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX1dKSYmbyh0LnByb3RvdHlwZSxyKSxuJiZvKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Zn0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDA7dmFyIG49cigxNjQpLGE9cigyKSxpPXIoMTY3KSxvPXIoMTM1KSxzPXIoMTM5KSxjPXIoMTc4KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPXQubGVuZ3RoLGk9bi1hLHM9cixjPSExO3M8aTspe2Zvcih2YXIgdT0wO3U8YSYmZVtzK3VdPT09dFt1XTspdSsrO2lmKHU+PWEpe2ZvcihzKz11O3M8biYmKDAsby5pc1doaXRlU3BhY2UpKGVbc10pOylzKys7Yz0hMDticmVha31zKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOnN9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSk7dmFyIG89bi5sZW5ndGgxLHU9KG4ubGVuZ3RoMixyLnBlZWtCeXRlcyg2KSksbD0xMjg9PT11WzBdJiYxPT09dVsxXTtsJiYoci5za2lwKDYpLG89dVs1XTw8MjR8dVs0XTw8MTZ8dVszXTw8OHx1WzJdKTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGM9WzEwMSwxMDEsMTIwLDEwMSw5OV0sdT1lLnBvczt0cnl7bj0ocj1lLmdldEJ5dGVzKHQpKS5sZW5ndGh9Y2F0Y2goZSl7fWlmKG49PT10JiYoaT1kKHIsYyx0LTIqYy5sZW5ndGgpKS5mb3VuZCYmaS5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IHMuU3RyZWFtKHIpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz11OzAhPT0oaT1kKGUucGVla0J5dGVzKDIwNDgpLGMsMCkpLmxlbmd0aDspaWYoZS5wb3MrPWkubGVuZ3RoLGkuZm91bmQpe289ZS5wb3MtdTticmVha31yZXR1cm4gZS5wb3M9dSxvP3tzdHJlYW06bmV3IHMuU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgcy5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0ocixvKTtuZXcgYy5UeXBlMVBhcnNlcihmLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIobiksbCYmKCh1PXIuZ2V0Qnl0ZXMoNikpWzVdLHVbNF0sdVszXSx1WzJdKTt2YXIgaD1mdW5jdGlvbihlLHQpe3ZhciByPWUuZ2V0Qnl0ZXMoKTtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgcy5TdHJlYW0ociksbGVuZ3RoOnIubGVuZ3RofX0ocikscD1uZXcgYy5UeXBlMVBhcnNlcihoLnN0cmVhbSwhMCxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRQcm9ncmFtKG4pO2Zvcih2YXIgZyBpbiBwLnByb3BlcnRpZXMpbltnXT1wLnByb3BlcnRpZXNbZ107dmFyIHY9cC5jaGFyc3RyaW5ncyx5PXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyh2KSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhwLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXYsdGhpcy5kYXRhPXRoaXMud3JhcCh0LHksdGhpcy5jaGFyc3RyaW5ncyxtLG4pLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhwLmNoYXJzdHJpbmdzKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6Im51bUdseXBocyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9fSx7a2V5OiJnZXRDaGFyc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9WyIubm90ZGVmIl0scj1sKHRoaXMuY2hhcnN0cmluZ3MpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIG49ZS52YWx1ZS5nbHlwaE5hbWU7dC5wdXNoKG4pfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gdH19LHtrZXk6ImdldEdseXBoTWFwcGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGE9dC5sZW5ndGg7bjxhO24rKylyW2UuY01hcC5jaGFyQ29kZU9mKG4pXT1uKzE7cmV0dXJuIHJ9dmFyIG8scyxjPVsiLm5vdGRlZiJdO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspYy5wdXNoKHRbc10uZ2x5cGhOYW1lKTt2YXIgdT1lLmJ1aWx0SW5FbmNvZGluZztpZih1KWZvcih2YXIgbCBpbiBvPU9iamVjdC5jcmVhdGUobnVsbCksdSkocz1jLmluZGV4T2YodVtsXSkpPj0wJiYob1tsXT1zKTtyZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxvLGMpfX0se2tleToiaGFzR2x5cGhJZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9fSx7a2V5OiJnZXRTZWFjcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07YS5zZWFjJiYodFtyKzFdPWEuc2VhYyl9cmV0dXJuIHR9fSx7a2V5OiJnZXRUeXBlMkNoYXJzdHJpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPVtdLG49bChlKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7ci5wdXNoKGEuY2hhcnN0cmluZyl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiByfX0se2tleToiZ2V0VHlwZTJTdWJycyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O3ZhciBuLGE9W107Zm9yKG49MDtuPHQ7bisrKWEucHVzaChbMTFdKTtmb3Iobj0wO248cjtuKyspYS5wdXNoKGVbbl0pO3JldHVybiBhfX0se2tleToid3JhcCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSxpKXt2YXIgbz1uZXcgbi5DRkY7by5oZWFkZXI9bmV3IG4uQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBuLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWMsby5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7dmFyIHUsbCxmPXQubGVuZ3RoLGg9WyIubm90ZGVmIl07Zm9yKHU9MDt1PGY7dSsrKXt2YXIgZD1yW3VdLmdseXBoTmFtZTstMT09PW4uQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoZCkmJmMuYWRkKGQpLGgucHVzaChkKX1vLmNoYXJzZXQ9bmV3IG4uQ0ZGQ2hhcnNldCghMSwwLGgpO3ZhciBwPW5ldyBuLkNGRkluZGV4O2ZvcihwLmFkZChbMTM5LDE0XSksdT0wO3U8Zjt1KyspcC5hZGQodFt1XSk7by5jaGFyU3RyaW5ncz1wO3ZhciBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7dmFyIHY9WyJCbHVlVmFsdWVzIiwiT3RoZXJCbHVlcyIsIkZhbWlseUJsdWVzIiwiRmFtaWx5T3RoZXJCbHVlcyIsIlN0ZW1TbmFwSCIsIlN0ZW1TbmFwViIsIkJsdWVTaGlmdCIsIkJsdWVGdXp6IiwiQmx1ZVNjYWxlIiwiTGFuZ3VhZ2VHcm91cCIsIkV4cGFuc2lvbkZhY3RvciIsIkZvcmNlQm9sZCIsIlN0ZEhXIiwiU3RkVlciXTtmb3IodT0wLGw9di5sZW5ndGg7dTxsO3UrKyl7dmFyIHk9dlt1XTtpZih5IGluIGkucHJpdmF0ZURhdGEpe3ZhciBtPWkucHJpdmF0ZURhdGFbeV07aWYoQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIGI9bS5sZW5ndGgtMTtiPjA7Yi0tKW1bYl0tPW1bYi0xXTtnLnNldEJ5TmFtZSh5LG0pfX1vLnRvcERpY3QucHJpdmF0ZURpY3Q9Zzt2YXIgdz1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGw9YS5sZW5ndGg7dTxsO3UrKyl3LmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PXcsbmV3IG4uQ0ZGQ29tcGlsZXIobykuY29tcGlsZSgpfX1dKSYmaCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuVHlwZTFGb250PXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIG49cigxNjYpLGE9cigxMzUpLGk9cigxMzkpLG89cigyKTtmdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPVs0XSxkPVs1XSxwPVs2XSxnPVs3XSx2PVs4XSx5PVsxMiwzNV0sbT1bMTRdLGI9WzIxXSx3PVsyMl0saz1bMzBdLFM9WzMxXSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3UodGhpcyxlKSx0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1yZXR1cm4gZihlLFt7a2V5OiJjb252ZXJ0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuLGEsaSxzPWUubGVuZ3RoLGM9ITEsdT0wO3U8czt1Kyspe3ZhciBsPWVbdV07aWYobDwzMil7c3dpdGNoKDEyPT09bCYmKGw9KGw8PDgpK2VbKyt1XSksbCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7Yz0hMDticmVha312YXIgZj10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGYpO2JyZWFrfWM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgNTpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixkKTticmVhaztjYXNlIDY6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSA3OmM9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGcpO2JyZWFrO2Nhc2UgODpjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix2KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2M9ITA7YnJlYWt9aWYoIXRbaT10aGlzLnN0YWNrLnBvcCgpXSl7Yz0hMDticmVha31jPXRoaXMuY29udmVydCh0W2ldLHQscik7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gYztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe2M9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMix3KTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2gobVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYik7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31jPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSx3KTticmVhaztjYXNlIDMwOmM9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGspO2JyZWFrO2Nhc2UgMzE6Yz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsUyk7YnJlYWs7Y2FzZSAzMDc4OmlmKHIpe3ZhciB4PXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLXgsYz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsbSl9ZWxzZSBjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7Yz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLG49dGhpcy5zdGFjay5wb3AoKTt2YXIgTz10aGlzLnN0YWNrLnBvcCgpO2E9dGhpcy5zdGFjay5wb3AoKSx0aGlzLmxzYj1hLHRoaXMud2lkdGg9bix0aGlzLnN0YWNrLnB1c2gobixhLE8pLGM9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGIpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfXZhciBBPXRoaXMuc3RhY2sucG9wKCksQz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChDL0EpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtjPSEwO2JyZWFrfWk9dGhpcy5zdGFjay5wb3AoKTt2YXIgRj10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1pJiYzPT09Ril7dmFyIFA9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChQWzJdK1BbMF0sUFszXStQWzFdLFBbNF0sUFs1XSxQWzZdLFBbN10sUFs4XSxQWzldLFBbMTBdLFBbMTFdLFBbMTJdLFBbMTNdLFBbMTRdKSxjPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMseSwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChQWzE1XSxQWzE2XSl9ZWxzZSAxPT09aSYmMD09PUYmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLG8ud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytsKyciJyl9aWYoYylicmVha31lbHNlIGw8PTI0Nj9sLT0xMzk6bD1sPD0yNTA/MjU2KihsLTI0NykrZVsrK3VdKzEwODpsPD0yNTQ/LTI1NioobC0yNTEpLWVbKyt1XS0xMDg6KDI1NSZlWysrdV0pPDwyNHwoMjU1JmVbKyt1XSk8PDE2fCgyNTUmZVsrK3VdKTw8OHwoMjU1JmVbKyt1XSk8PDAsdGhpcy5zdGFjay5wdXNoKGwpfXJldHVybiBjfX0se2tleToiZXhlY3V0ZUNvbW1hbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9dGhpcy5zdGFjay5sZW5ndGg7aWYoZT5pKXJldHVybiEwO2Zvcih2YXIgbz1pLWUscz1vO3M8aTtzKyspe3ZhciB1PXRoaXMuc3RhY2tbc107TnVtYmVyLmlzSW50ZWdlcih1KT90aGlzLm91dHB1dC5wdXNoKDI4LHU+PjgmMjU1LDI1NSZ1KToodT02NTUzNip1fDAsdGhpcy5vdXRwdXQucHVzaCgyNTUsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSkpfXJldHVybihuPXRoaXMub3V0cHV0KS5wdXNoLmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYyhlKX0oYT10KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShhKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX0oYSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpLHI/dGhpcy5zdGFjay5zcGxpY2UobyxlKTp0aGlzLnN0YWNrLmxlbmd0aD0wLCExfX1dKSxlfSgpO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIEEoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGM9ZVtuXTtzW2FdPWNeaT4+OCxpPTUyODQ1KihjK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7aWYodSh0aGlzLGUpLHIpe3ZhciBvPXQuZ2V0Qnl0ZXMoKSxzPSEoKE8ob1swXSl8fCgwLGEuaXNXaGl0ZVNwYWNlKShvWzBdKSkmJk8ob1sxXSkmJk8ob1syXSkmJk8ob1szXSkmJk8ob1s0XSkmJk8ob1s1XSkmJk8ob1s2XSkmJk8ob1s3XSkpO3Q9bmV3IGkuU3RyZWFtKHM/QShvLDU1NjY1LDQpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9NTU2NjUsbz1lLmxlbmd0aCxzPW5ldyBVaW50OEFycmF5KG8+Pj4xKTtmb3Iobj0wLGE9MDtuPG87bisrKXt2YXIgYz1lW25dO2lmKE8oYykpe24rKztmb3IodmFyIHU9dm9pZCAwO248byYmIU8odT1lW25dKTspbisrO2lmKG48byl7dmFyIGw9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShjLHUpLDE2KTtzW2ErK109bF5pPj44LGk9NTI4NDUqKGwraSkrMjI3MTkmNjU1MzV9fX1yZXR1cm4gcy5zbGljZSg0LGEpfShvKSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhbix0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKX1yZXR1cm4gZihlLFt7a2V5OiJyZWFkTnVtYmVyQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgZT1bXTs7KXt2YXIgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfX0se2tleToicmVhZE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9fSx7a2V5OiJyZWFkSW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX19LHtrZXk6InJlYWRCb29sZWFuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9fSx7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJwcmV2Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0uc2tpcCgtMiksdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxhLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoQyh0KSlyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLFN0cmluZy5mcm9tQ2hhckNvZGUodCk7dmFyIHI9IiI7ZG97cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsYS5pc1doaXRlU3BhY2UpKHQpJiYhQyh0KSk7cmV0dXJuIHJ9fSx7a2V5OiJyZWFkQ2hhclN0cmluZ3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTE9PT10P2U6QShlLDQzMzAsdCl9fSx7a2V5OiJleHRyYWN0Rm9udFByb2dyYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RyZWFtLHI9W10sbj1bXSxhPU9iamVjdC5jcmVhdGUobnVsbCk7YS5sZW5JVj00O2Zvcih2YXIgaSxvLHMsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bnVsbCE9PShpPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWkpc3dpdGNoKGk9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oaT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWk7KWlmKCIvIj09PWkpe3ZhciBsPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBmPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1pJiZ0aGlzLnByZXZDaGFyKCksbi5wdXNoKHtnbHlwaDpsLGVuY29kZWQ6Zn0pfWJyZWFrO2Nhc2UiU3VicnMiOmZvcih0aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCk7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXt2YXIgaD10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGM9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO3ZhciBkPXRoaXMucmVhZENoYXJTdHJpbmdzKHMsYyk7dGhpcy5uZXh0Q2hhcigpLCJub2FjY2VzcyI9PT0oaT10aGlzLmdldFRva2VuKCkpJiZ0aGlzLmdldFRva2VuKCkscltoXT1kfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOnZhciBwPXRoaXMucmVhZE51bWJlckFycmF5KCk7cC5sZW5ndGg+MCYmcC5sZW5ndGg7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbaV09dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVtpXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ldPXRoaXMucmVhZEJvb2xlYW4oKX1mb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKyspe3ZhciB5PXZbZ10sbT15LmVuY29kZWQsYj15LmdseXBoLHc9bmV3IHgsaz13LmNvbnZlcnQobSxyLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCksUz13Lm91dHB1dDtrJiYoUz1bMTRdKTt2YXIgTz17Z2x5cGhOYW1lOmIsY2hhcnN0cmluZzpTLHdpZHRoOncud2lkdGgsbHNiOncubHNiLHNlYWM6dy5zZWFjfTtpZigiLm5vdGRlZiI9PT1iP3UuY2hhcnN0cmluZ3MudW5zaGlmdChPKTp1LmNoYXJzdHJpbmdzLnB1c2goTyksZS5idWlsdEluRW5jb2Rpbmcpe3ZhciBBPWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYik7QT4tMSYmdm9pZCAwPT09ZS53aWR0aHNbQV0mJkE+PWUuZmlyc3RDaGFyJiZBPD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbQV09dy53aWR0aCl9fXJldHVybiB1fX0se2tleToiZXh0cmFjdEZvbnRIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgYT10aGlzLmdldFRva2VuKCksaT12b2lkIDA7aWYoL15cZCskLy50ZXN0KGEpKXtpPVtdO3ZhciBvPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2Zvcih2YXIgcz0wO3M8bztzKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYobnVsbD09PSh0PXRoaXMuZ2V0VG9rZW4oKSkpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhazt2YXIgYz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7dmFyIHU9dGhpcy5nZXRUb2tlbigpO2lbY109dSx0aGlzLmdldFRva2VuKCl9fWVsc2UgaT0oMCxuLmdldEVuY29kaW5nKShhKTtlLmJ1aWx0SW5FbmNvZGluZz1pO2JyZWFrO2Nhc2UiRm9udEJCb3giOnZhciBsPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgobFszXSxsWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4obFsxXSxsWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fV0pLGV9KCk7dC5UeXBlMVBhcnNlcj1GfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGF0dGVybj12b2lkIDAsdC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxvPXQuZ2V0KCJYU3RlcCIpLHM9dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksdT10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxvLHMsYyx1XX07dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTQzKSxvPXIoMTM1KTtmdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49aChlKTtpZih0KXt2YXIgYT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmKHRoaXMscil9fWZ1bmN0aW9uIGYoZSx0KXtpZih0JiYoIm9iamVjdCI9PT1kKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZChlKX1mdW5jdGlvbiBwKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1kKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWQoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3AodGhpcyxlKSwoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1yZXR1cm4gdihlLG51bGwsW3trZXk6InBhcnNlU2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsaSxzLGMpe3ZhciB1PWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbD11LmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGwpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyB3KHUsdCxyLHMsYyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgeChlLHQscixzLGMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2wpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiBpLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJufSksKDAsbi53YXJuKShlKSxuZXcgT319fV0pLGV9KCk7dC5QYXR0ZXJuPXk7dmFyIG0sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1yZXR1cm4gdihlLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1dLFt7a2V5OiJTTUFMTF9OVU1CRVIiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJTTUFMTF9OVU1CRVIiLDFlLTYpfX1dKSxlfSgpLHc9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLGEsbyxjLHUpe3ZhciBsO3AodGhpcyxyKSwobD10LmNhbGwodGhpcykpLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSxsLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO3ZhciBoPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjphLHJlc291cmNlczpvLHBkZkZ1bmN0aW9uRmFjdG9yeTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnV9KSxkPWUuZ2V0QXJyYXkoIkJCb3giKTtBcnJheS5pc0FycmF5KGQpJiY0PT09ZC5sZW5ndGg/bC5iYm94PW4uVXRpbC5ub3JtYWxpemVSZWN0KGQpOmwuYmJveD1udWxsO3ZhciBnPTAsdj0xO2lmKGUuaGFzKCJEb21haW4iKSl7dmFyIHk9ZS5nZXRBcnJheSgiRG9tYWluIik7Zz15WzBdLHY9eVsxXX12YXIgbT0hMSx3PSExO2lmKGUuaGFzKCJFeHRlbmQiKSl7dmFyIGs9ZS5nZXRBcnJheSgiRXh0ZW5kIik7bT1rWzBdLHc9a1sxXX1pZighKDMhPT1sLnNoYWRpbmdUeXBlfHxtJiZ3KSl7dmFyIFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfShsLmNvb3Jkc0Fyciw2KSx4PVNbMF0sTz1TWzFdLEE9U1syXSxDPVNbM10sRj1TWzRdLFA9U1s1XSxUPU1hdGguaHlwb3QoeC1DLE8tRik7QTw9UCtUJiZQPD1BK1QmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX1sLmV4dGVuZFN0YXJ0PW0sbC5leHRlbmRFbmQ9dzt2YXIgST1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWMuY3JlYXRlRnJvbUFycmF5KEkpLGo9KHYtZykvMTAsTT1sLmNvbG9yU3RvcHM9W107aWYoZz49dnx8ajw9MClyZXR1cm4oMCxuLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIiksZihsKTtmb3IodmFyIF8sTD1uZXcgRmxvYXQzMkFycmF5KGgubnVtQ29tcHMpLFI9bmV3IEZsb2F0MzJBcnJheSgxKSxOPTA7Tjw9MTA7TisrKXtSWzBdPWcrTipqLEUoUiwwLEwsMCksXz1oLmdldFJnYihMLDApO3ZhciBEPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pO00ucHVzaChbTi8xMCxEXSl9dmFyIEI9InRyYW5zcGFyZW50IjtyZXR1cm4gZS5oYXMoIkJhY2tncm91bmQiKSYmKF89aC5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxCPW4uVXRpbC5tYWtlSGV4Q29sb3IoX1swXSxfWzFdLF9bMl0pKSxtfHwoTS51bnNoaWZ0KFswLEJdKSxNWzFdWzBdKz1iLlNNQUxMX05VTUJFUiksd3x8KE0uYXQoLTEpWzBdLT1iLlNNQUxMX05VTUJFUixNLnB1c2goWzEsQl0pKSxsLmNvbG9yU3RvcHM9TSxsfXJldHVybiB2KHIsW3trZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGksbz10aGlzLmNvb3Jkc0FycixzPXRoaXMuc2hhZGluZ1R5cGU7cmV0dXJuIDI9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bMl0sb1szXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOjM9PT1zPyh0PVtvWzBdLG9bMV1dLHI9W29bM10sb1s0XV0sYT1vWzJdLGk9b1s1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHMpKSxbIlJhZGlhbEF4aWFsIixlLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsdCxyLGEsaV19fV0pLHJ9KGIpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7cCh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5jb250ZXh0PXIsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciBuPXIubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KG4pO3ZhciBhPXIuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9ci5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1yZXR1cm4gdihlLFt7a2V5OiJoYXNEYXRhIixnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTt2YXIgbj10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIHRoaXMuYnVmZmVyPW4mKDE8PHIpLTEsKHQ8PDgtcnwoMjU1Jm4pPj5yKT4+PjB9aWYoOD09PWUmJjA9PT1yKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtyPGU7KXQ9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkscis9ODtyZXR1cm4gci09ZSx0aGlzLmJ1ZmZlckxlbmd0aD1yLHRoaXMuYnVmZmVyPXQmKDE8PHIpLTEsdD4+cn19LHtrZXk6ImFsaWduIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MH19LHtrZXk6InJlYWRGbGFnIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9fSx7a2V5OiJyZWFkQ29vcmRpbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5yZWFkQml0cyhlKSxuPXRoaXMuY29udGV4dC5kZWNvZGUsYT1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KmEqKG5bMV0tblswXSkrblswXSxyKmEqKG5bM10tblsyXSkrblsyXV19fSx7a2V5OiJyZWFkQ29tcG9uZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQscj10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLG49dGhpcy5jb250ZXh0LmRlY29kZSxhPXRoaXMudG1wQ29tcHNCdWYsaT0wLG89NDtpPGU7aSsrLG8rPTIpe3ZhciBzPXRoaXMucmVhZEJpdHModCk7YVtpXT1zKnIqKG5bbysxXS1uW29dKStuW29dfXZhciBjPXRoaXMudG1wQ3NDb21wc0J1ZjtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKGEsMCxjLDApLHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjLDApfX1dKSxlfSgpLFM9KG09W10sZnVuY3Rpb24oZSl7cmV0dXJuIG1bZV18fChtW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjw9ZTtyKyspe3ZhciBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fShlKSksbVtlXX0pLHg9ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PWwocik7ZnVuY3Rpb24gcihlLG8scyxjLHUpe3ZhciBsO2lmKHAodGhpcyxyKSxsPXQuY2FsbCh0aGlzKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7dmFyIGY9ZS5kaWN0O2wuc2hhZGluZ1R5cGU9Zi5nZXQoIlNoYWRpbmdUeXBlIik7dmFyIGg9Zi5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoaCkmJjQ9PT1oLmxlbmd0aD9sLmJib3g9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoaCk6bC5iYm94PW51bGw7dmFyIGQ9aS5Db2xvclNwYWNlLnBhcnNlKHtjczpmLmdldFJhdygiQ1MiKXx8Zi5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOm8scmVzb3VyY2VzOnMscGRmRnVuY3Rpb25GYWN0b3J5OmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6dX0pO2wuYmFja2dyb3VuZD1mLmhhcygiQmFja2dyb3VuZCIpP2QuZ2V0UmdiKGYuZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgZz1mLmdldFJhdygiRnVuY3Rpb24iKSx2PWc/Yy5jcmVhdGVGcm9tQXJyYXkoZyk6bnVsbDtsLmNvb3Jkcz1bXSxsLmNvbG9ycz1bXSxsLmZpZ3VyZXM9W107dmFyIHk9e2JpdHNQZXJDb29yZGluYXRlOmYuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Zi5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpmLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Zi5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjp2LGNvbG9yU3BhY2U6ZCxudW1Db21wczp2PzE6ZC5udW1Db21wc30sbT1uZXcgayhlLHkpLGI9ITE7c3dpdGNoKGwuc2hhZGluZ1R5cGUpe2Nhc2UgNDpsLl9kZWNvZGVUeXBlNFNoYWRpbmcobSk7YnJlYWs7Y2FzZSA1OnZhciB3PTB8Zi5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYodzwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7bC5fZGVjb2RlVHlwZTVTaGFkaW5nKG0sdyk7YnJlYWs7Y2FzZSA2OmwuX2RlY29kZVR5cGU2U2hhZGluZyhtKSxiPSEwO2JyZWFrO2Nhc2UgNzpsLl9kZWNvZGVUeXBlN1NoYWRpbmcobSksYj0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYoYil7bC5fdXBkYXRlQm91bmRzKCk7Zm9yKHZhciBTPTAseD1sLmZpZ3VyZXMubGVuZ3RoO1M8eDtTKyspbC5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goUyl9cmV0dXJuIGwuX3VwZGF0ZUJvdW5kcygpLGwuX3BhY2tEYXRhKCksbH1yZXR1cm4gdihyLFt7a2V5OiJfZGVjb2RlVHlwZTRTaGFkaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W10sbz0wO2UuaGFzRGF0YTspe3ZhciBzPWUucmVhZEZsYWcoKSxjPWUucmVhZENvb3JkaW5hdGUoKSx1PWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09byl7aWYoISgwPD1zJiZzPD0yKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNCBmbGFnIik7c3dpdGNoKHMpe2Nhc2UgMDpvPTM7YnJlYWs7Y2FzZSAxOmkucHVzaChpLmF0KC0yKSxpLmF0KC0xKSksbz0xO2JyZWFrO2Nhc2UgMjppLnB1c2goaS5hdCgtMyksaS5hdCgtMSkpLG89MX1hLnB1c2gocyl9aS5wdXNoKHQubGVuZ3RoKSx0LnB1c2goYyksci5wdXNoKHUpLG8tLSxlLmFsaWduKCl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InRyaWFuZ2xlcyIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX0se2tleToiX2RlY29kZVR5cGU1U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2UuaGFzRGF0YTspe3ZhciBpPWUucmVhZENvb3JkaW5hdGUoKSxvPWUucmVhZENvbXBvbmVudHMoKTthLnB1c2goci5sZW5ndGgpLHIucHVzaChpKSxuLnB1c2gobyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoYSksdmVydGljZXNQZXJSb3c6dH0pfX0se2tleToiX2RlY29kZVR5cGU2U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzg6MTI7Yzx1O2MrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtmb3IodmFyIGw9ci5sZW5ndGgsZj0wLGg9MCE9PW8/Mjo0O2Y8aDtmKyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7dmFyIGQ9dm9pZCAwLHA9dm9pZCAwLGc9dm9pZCAwLHY9dm9pZCAwO3N3aXRjaChvKXtjYXNlIDA6YVsxMl09cyszLGFbMTNdPXMrNCxhWzE0XT1zKzUsYVsxNV09cys2LGFbOF09cysyLGFbMTFdPXMrNyxhWzRdPXMrMSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVsxMV09cyszLGFbNF09cCxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbMTFdPXMrMyxhWzRdPXAsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVsxMV09cyszLGFbNF09YVsyXSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9YVs1XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pLGFbNl09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKSxhWzldPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKSxhWzEwXT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSksdGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2RlY29kZVR5cGU3U2hhZGluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtlLmhhc0RhdGE7KXt2YXIgbz1lLnJlYWRGbGFnKCk7aWYoISgwPD1vJiZvPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Zm9yKHZhciBzPXQubGVuZ3RoLGM9MCx1PTAhPT1vPzEyOjE2O2M8dTtjKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Zm9yKHZhciBsPXIubGVuZ3RoLGY9MCxoPTAhPT1vPzI6NDtmPGg7ZisrKXIucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO3ZhciBkPXZvaWQgMCxwPXZvaWQgMCxnPXZvaWQgMCx2PXZvaWQgMDtzd2l0Y2gobyl7Y2FzZSAwOmFbMTJdPXMrMyxhWzEzXT1zKzQsYVsxNF09cys1LGFbMTVdPXMrNixhWzhdPXMrMixhWzldPXMrMTMsYVsxMF09cysxNCxhWzExXT1zKzcsYVs0XT1zKzEsYVs1XT1zKzEyLGFbNl09cysxNSxhWzddPXMrOCxhWzBdPXMsYVsxXT1zKzExLGFbMl09cysxMCxhWzNdPXMrOSxpWzJdPWwrMSxpWzNdPWwrMixpWzBdPWwsaVsxXT1sKzM7YnJlYWs7Y2FzZSAxOmQ9YVsxMl0scD1hWzEzXSxnPWFbMTRdLHY9YVsxNV0sYVsxMl09dixhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWcsYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1wLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWQsYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsZD1pWzJdLHA9aVszXSxpWzJdPXAsaVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDI6ZD1hWzE1XSxwPWFbMTFdLGFbMTJdPWFbM10sYVsxM109cyswLGFbMTRdPXMrMSxhWzE1XT1zKzIsYVs4XT1hWzddLGFbOV09cys5LGFbMTBdPXMrMTAsYVsxMV09cyszLGFbNF09cCxhWzVdPXMrOCxhWzZdPXMrMTEsYVs3XT1zKzQsYVswXT1kLGFbMV09cys3LGFbMl09cys2LGFbM109cys1LGQ9aVszXSxpWzJdPWlbMV0saVszXT1sLGlbMF09ZCxpWzFdPWwrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1zKzAsYVsxNF09cysxLGFbMTVdPXMrMixhWzhdPWFbMV0sYVs5XT1zKzksYVsxMF09cysxMCxhWzExXT1zKzMsYVs0XT1hWzJdLGFbNV09cys4LGFbNl09cysxMSxhWzddPXMrNCxhWzBdPWFbM10sYVsxXT1zKzcsYVsyXT1zKzYsYVszXT1zKzUsaVsyXT1pWzBdLGlbM109bCxpWzBdPWlbMV0saVsxXT1sKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fX0se2tleToiX2J1aWxkRmlndXJlRnJvbVBhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpZ3VyZXNbZV07KDAsbi5hc3NlcnQpKCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTt2YXIgYT10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLG89dC5jb29yZHMscz10LmNvbG9ycyxjPU1hdGgubWluKGFbb1swXV1bMF0sYVtvWzNdXVswXSxhW29bMTJdXVswXSxhW29bMTVdXVswXSksdT1NYXRoLm1pbihhW29bMF1dWzFdLGFbb1szXV1bMV0sYVtvWzEyXV1bMV0sYVtvWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtvWzBdXVswXSxhW29bM11dWzBdLGFbb1sxMl1dWzBdLGFbb1sxNV1dWzBdKSxmPU1hdGgubWF4KGFbb1swXV1bMV0sYVtvWzNdXVsxXSxhW29bMTJdXVsxXSxhW29bMTVdXVsxXSksaD1NYXRoLmNlaWwoKGwtYykqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO2g9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTt2YXIgZD1NYXRoLmNlaWwoKGYtdSkqci5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoci5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihyLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGQpKTtmb3IodmFyIHA9aCsxLGc9bmV3IEludDMyQXJyYXkoKGQrMSkqcCksdj1uZXcgSW50MzJBcnJheSgoZCsxKSpwKSx5PTAsbT1uZXcgVWludDhBcnJheSgzKSxiPW5ldyBVaW50OEFycmF5KDMpLHc9aVtzWzBdXSxrPWlbc1sxXV0seD1pW3NbMl1dLE89aVtzWzNdXSxBPVMoZCksQz1TKGgpLEY9MDtGPD1kO0YrKyl7bVswXT0od1swXSooZC1GKSt4WzBdKkYpL2R8MCxtWzFdPSh3WzFdKihkLUYpK3hbMV0qRikvZHwwLG1bMl09KHdbMl0qKGQtRikreFsyXSpGKS9kfDAsYlswXT0oa1swXSooZC1GKStPWzBdKkYpL2R8MCxiWzFdPShrWzFdKihkLUYpK09bMV0qRikvZHwwLGJbMl09KGtbMl0qKGQtRikrT1syXSpGKS9kfDA7Zm9yKHZhciBQPTA7UDw9aDtQKysseSsrKWlmKDAhPT1GJiZGIT09ZHx8MCE9PVAmJlAhPT1oKXtmb3IodmFyIFQ9MCxJPTAsRT0wLGo9MDtqPD0zO2orKylmb3IodmFyIE09MDtNPD0zO00rKyxFKyspe3ZhciBfPUFbRl1bal0qQ1tQXVtNXTtUKz1hW29bRV1dWzBdKl8sSSs9YVtvW0VdXVsxXSpffWdbeV09YS5sZW5ndGgsYS5wdXNoKFtULEldKSx2W3ldPWkubGVuZ3RoO3ZhciBMPW5ldyBVaW50OEFycmF5KDMpO0xbMF09KG1bMF0qKGgtUCkrYlswXSpQKS9ofDAsTFsxXT0obVsxXSooaC1QKStiWzFdKlApL2h8MCxMWzJdPShtWzJdKihoLVApK2JbMl0qUCkvaHwwLGkucHVzaChMKX19Z1swXT1vWzBdLHZbMF09c1swXSxnW2hdPW9bM10sdltoXT1zWzFdLGdbcCpkXT1vWzEyXSx2W3AqZF09c1syXSxnW3AqZCtoXT1vWzE1XSx2W3AqZCtoXT1zWzNdLHRoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOmcsY29sb3JzOnYsdmVydGljZXNQZXJSb3c6cH19fSx7a2V5OiJfdXBkYXRlQm91bmRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLHI9ZSxuPXQsYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe3ZhciBvPXRoaXMuY29vcmRzW2FdWzBdLHM9dGhpcy5jb29yZHNbYV1bMV07ZT1lPm8/bzplLHQ9dD5zP3M6dCxyPXI8bz9vOnIsbj1uPHM/czpufXRoaXMuYm91bmRzPVtlLHQscixuXX19LHtrZXk6Il9wYWNrRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixhPXRoaXMuY29vcmRzLGk9bmV3IEZsb2F0MzJBcnJheSgyKmEubGVuZ3RoKTtmb3IoZT0wLHI9MCx0PWEubGVuZ3RoO2U8dDtlKyspe3ZhciBvPWFbZV07aVtyKytdPW9bMF0saVtyKytdPW9bMV19dGhpcy5jb29yZHM9aTt2YXIgcz10aGlzLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7dmFyIHU9c1tlXTtjW3IrK109dVswXSxjW3IrK109dVsxXSxjW3IrK109dVsyXX10aGlzLmNvbG9ycz1jO3ZhciBsPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGY9bFtlXSxoPWYuY29vcmRzLGQ9Zi5jb2xvcnM7Zm9yKHI9MCxuPWgubGVuZ3RoO3I8bjtyKyspaFtyXSo9MixkW3JdKj0zfX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fV0sW3trZXk6Ik1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpfX0se2tleToiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfX0se2tleToiVFJJQU5HTEVfREVOU0lUWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKX19XSkscn0oYiksTz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHAodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdihyLFt7a2V5OiJnZXRJUiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bIkR1bW15Il19fV0pLHJ9KGIpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPXQuYmFzZVdpZHRocyxhPXQuYmFzZU1hcHBpbmcsaT10LmZhY3RvcnM7cj1pP24ubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBlKmlbdF19KSk6bjt2YXIgbyxzLGM9LTIsdT1bXSxsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1oKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oYS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW2UsdF19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLDEpWzBdLWYodCwxKVswXX0pKSk7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgZD1mKHMudmFsdWUsMikscD1kWzBdLHY9ZFsxXTstMSE9PXAmJihwPT09YysxPyhvLnB1c2goclt2XSksYys9MSk6KGM9cCxvPVtyW3ZdXSx1LnB1c2gocCxvKSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1yZXR1cm4gdX0oZSkscj1uZXcgYS5EaWN0KG51bGwpO3Iuc2V0KCJCYXNlRm9udCIsYS5OYW1lLmdldChlKSksci5zZXQoIlR5cGUiLGEuTmFtZS5nZXQoIkZvbnQiKSksci5zZXQoIlN1YnR5cGUiLGEuTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKSxyLnNldCgiRW5jb2RpbmciLGEuTmFtZS5nZXQoIklkZW50aXR5LUgiKSksci5zZXQoIkNJRFRvR0lETWFwIixhLk5hbWUuZ2V0KCJJZGVudGl0eSIpKSxyLnNldCgiVyIsdCksci5zZXQoIkZpcnN0Q2hhciIsdFswXSksci5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7dmFyIG49bmV3IGEuRGljdChudWxsKTtyLnNldCgiRm9udERlc2NyaXB0b3IiLG4pO3ZhciBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9Zzt2YXIgbj1yKDE4MSksYT1yKDEzNCksaT1yKDE4Miksbz1yKDE4Mykscz1yKDE4NCksYz1yKDE4NSksdT1yKDEzNSksbD1yKDE2Nyk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxoKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBoKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBwPSgwLHUuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6cy5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnMuTXlyaWFkUHJvQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczpzLk15cmlhZFByb0JvbGRNZXRyaWNzfSxlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6cy5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzfSxlWyJNeXJpYWRQcm8tQm9sZEl0Il09ZVsiTXlyaWFkUHJvLUJvbGRJdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOnMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3N9LGUuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmd9LGVbIkFyaWFsLUJvbGRNVCJdPWVbIkFyaWFsLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmd9LGVbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nfSxlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT1lWyJBcmlhbC1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGJhc2VXaWR0aHM6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nfSxlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpuLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpuLkNhbGlicmlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRNZXRyaWNzfSxlWyJDYWxpYnJpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6bi5DYWxpYnJpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpuLkNhbGlicmlJdGFsaWNNZXRyaWNzfSxlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpjLlNlZ29ldWlSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpjLlNlZ29ldWlCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRNZXRyaWNzfSxlWyJTZWdvZXVpLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGZhY3RvcnM6Yy5TZWdvZXVpSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6by5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpjLlNlZ29ldWlJdGFsaWNNZXRyaWNzfSxlWyJTZWdvZXVpLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmkuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczppLkhlbHZldGljYUl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOm8uTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLG1ldHJpY3M6aS5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzfSxlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsYmFzZVdpZHRoczpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpvLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzfX0pKTtmdW5jdGlvbiBnKGUpe3ZhciB0PSgwLGwubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBwKClbdF19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz10LkNhbGlicmlSZWd1bGFyRmFjdG9ycz10LkNhbGlicmlJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZE1ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9dC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9dC5DYWxpYnJpQm9sZEZhY3RvcnM9dm9pZCAwLHQuQ2FsaWJyaUJvbGRGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NDY1NywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzMyOTMsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MTIxLC44Njk0MywuNzk3OTUsLjg4MTk4LC43Nzk1OCwuNzA4NjQsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDE3LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjU0NjU3LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuODg3NjIsLjg3ODUsLjc1MjQxLC44Nzg1LC45MDUxOCwuOTUwMTUsLjc3NjE4LC44Nzg1LC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTE0ODgsLjg3ODUsLjg4MDEsLjg3ODUsLjg3ODUsLjkxMzQzLC43MTczLDEuMDQxMDYsLjg3ODUsLjg1MDc1LC45NTc5NCwuODI2MTYsLjg1MTYyLC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xMjQwMSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MzI5MywuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTEyMSwuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44NTI4NCwuODc1MDgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44NzE1LC43NTI0MSwuOTA1MTgsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44Nzg1LC44ODAxLC44ODAxLC44ODAxLC44ODAxLC44ODAxLC45MDc0NywuODkwNDksLjg3ODUsLjg3ODUsLjg3ODUsLjg3ODUsLjg1MTYyLC44Nzg1LC44NTE2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC44NzI4OSwuODMwMTYsLjg4NTA2LC45MzEyNSwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsMSwxLC44NzM1NiwuODc4NSwuOTEwNzUsLjg5NjA4LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzYyMjksLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc5NDY4LC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTEyMSwuODc4NSwxLDEsLjkxMjEsLjg3ODUsLjg3ODAyLC44ODY1NiwuODc4NSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODc0MDIsLjg5MjkxLC43Nzk1OCwuOTEzNDMsMSwxLC43Nzk1OCwuOTEzNDMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuODg3NjIsLjc3NTM5LC44NzE1LC44NzUwOCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwNjc0LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjA2MzAzLC44MzkwOCwuODAzNTIsLjU3MTg0LC42OTY1LC41NjI4OSwuODIwMDEsLjU2MDI5LC44MTIzNSwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjgxNTYsLjgwMzY3LC43MzEzMywuNzgyNTcsLjg3MzU2LC44Njk0MywuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MTIxLC43NjQ4LC44Njk0MywuODczNTYsLjc5Nzk1LC43ODI3NSwuODEwNTUsLjc3ODkyLC45NzYyLC44MjU3NywuOTk4MTksLjg0ODk2LC45NTk1OCwuNzc4OTIsLjk2MTA4LDEuMDE0MDcsLjg5MDQ5LDEuMDI5ODgsLjk0MjExLC45NjEwOCwuODkzNiwuODQwMjEsLjg3ODQyLC45NjM5OSwuNzkxMDksLjg5MDQ5LDEuMDA4MTMsMS4wMjk4OCwuODYwNzcsLjg3NDQ1LC45MjA5OSwuODQ3MjMsLjg2NTEzLC44ODAxLC43NTYzOCwuODU3MTQsLjc4MjE2LC43OTU4NiwuODc5NjUsLjk0MjExLC45Nzc0NywuNzgyODcsLjk3OTI2LC44NDk3MSwxLjAyOTg4LC45NDIxMSwuODgwMSwuOTQyMTEsLjg0OTcxLC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTAyNjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTE4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDU0OCwxLDEsMSwxLDEsMSwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMTQzLDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTM4MzUsLjgzNDA2LC45MTEzMywuODQxMDcsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwMDYsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSx0LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTYyMzksLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjcxODA1LC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTA4NzIsLjg1OTM4LC43OTc5NSwuODcwNjgsLjc3OTU4LC42OTc2NiwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwNjgsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTI5LC45NzUwNywuODUyODQsLjg5NTUyLC45MDE3NiwuOTQ5MDgsLjg2NDExLC43NDAxMiwuODY0MTEsLjg4MzIzLC45NTAxNSwuODY0MTEsLjg2MzMxLC44ODQwMSwuOTE5MTYsLjg2MzA0LC44ODQwMSwuOTAzOSwuODYzMzEsLjg2MzMxLC44NjQxMSwuODY0MTEsLjkwNDY0LC43MDg1MiwxLjA0MTA2LC44NjMzMSwuODQzNzIsLjk1Nzk0LC44MjYxNiwuODQ1NDgsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjE5MTI5LC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjcxODA1LC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MDg3MiwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTI4NCwuODcwNjgsLjkwMzk5LC45MDM5OSwuOTAzOTksLjkwMzk5LC43Nzg5MiwuNzk3OTUsLjkwODA3LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC44NTg4NywuNzQwMTIsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuOTA3NDcsLjg5MDQ5LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODQ1NDgsLjg2NDExLC44NDU0OCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC44NzI4OSwuNzk1MzgsLjg4NTA2LC45MjcyNiwuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsMSwxLC44NzM1NiwuODYzMzEsLjkxMDc1LC44Nzc3LC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuNzY0NjcsLjkwMTY3LC41OTUyNiwuOTE5MTYsMSwxLC44NjMwNCwuNjkyMjUsLjg4NDAxLDEsMSwuNzA0MjQsLjc3MzEyLC45MTkyNiwuODgxNzUsLjcwODIzLC45NDkwMywuOTA4NzIsLjg2MzMxLDEsMSwuOTA4NzIsLjg2MzMxLC44NjkwNiwuODgxMTYsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NzQwMiwuODY1NDksLjc3OTU4LC45MDQ2NCwxLDEsLjc3OTU4LC45MDQ2NCwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLDEsMSwuODEwNTUsLjc1ODQxLC44MTA1NSwxLjA2NDUyLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwuNzc4OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjkyOTcsLjU2ODkyLC44MzkwOCwuOTQ5MDgsLjc3NTM5LC44NTg4NywuODcwNjgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDA4OCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS40ODM4NywuODM5MDgsLjgwMzUyLC41NzExOCwuNjk2NSwuNTYzNDcsLjc5MTc5LC41NTg1MywuODAzNDYsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY3MTc0LC44NjAzNiwuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY0NDEsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTA4NzIsLjc0ODg5LC44NTkzOCwuODc4OTEsLjc5Nzk1LC43OTU3LC44MTA1NSwuNzc4OTIsLjk3NDQ3LC44MjU3NywuOTc0NjYsLjg3MTc5LC45NTk1OCwuNzc4OTIsLjk0MjUyLC45NTYxMiwuODc1MywxLjAyOTg4LC45MjczMywuOTQyNTIsLjg3NDExLC44NDAyMSwuODcyOCwuOTU2MTIsLjc0MDgxLC44NzUzLDEuMDIxODksMS4wMjk4OCwuODQ4MTQsLjg3NDQ1LC45MTgyMiwuODQ3MjMsLjg1NjY4LC44NjMzMSwuODEzNDQsLjg3NTgxLC43NjQyMiwuODIwNDYsLjk2MDU3LC45MjczMywuOTkzNzUsLjc4MDIyLC45NTQ1MiwuODYwMTUsMS4wMjk4OCwuOTI3MzMsLjg2MzMxLC45MjczMywuODYwMTUsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDYzMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODgzMjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1MTc0LDEsMSwxLDEsMSwxLC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg5ODA3LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzEwOTQsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45Mjk3MiwuODM0MDYsLjkxMTMzLC44MzMyNiwuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNjE2LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTA3LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpSXRhbGljRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpUmVndWxhckZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz10LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPXQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz10LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9dC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz12b2lkIDAsdC5IZWx2ZXRpY2FCb2xkRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sdC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPXQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz10LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9dm9pZCAwLHQuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3NDAsNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4Miw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM5Niw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw3MjIsMzMzLDg1NCw5MDYsNDczLDg0NCw5MzAsODQ3LDI3OCw3MjIsNzIyLDYxMCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjU3LDc3OCw3MTgsNjY3LDU5MCw2MTEsNjY3LDgyMiw2NjcsODI5LDc4MSwyNzgsNjY3LDYyMCw0NzksNjExLDI3OCw1OTEsNjIwLDYyMSw1NTYsNjEwLDQ3OSw0OTIsNjExLDU1OCwyNzgsNTY2LDU1Niw2MDMsNTU2LDQ1MCw2MTEsNzEyLDYwNSw1MzIsNjY0LDQwOSw1OTEsNzA0LDU3OCw3NzMsODM0LDI3OCw1OTEsNjExLDU5MSw4MzQsNjY3LDY2Nyw4ODYsNjE0LDcxOSw2NjcsMjc4LDI3OCw1NTYsMTA5NCwxMDQyLDg1NCw2MjIsNzE5LDY3Nyw3MTksNzIyLDcwOCw3MjIsNjE0LDcyMiw2NjcsOTI3LDY0Myw3MTksNzE5LDYxNSw2ODcsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDY3Nyw3ODEsNjY3LDcyOSw3MDgsOTc5LDk4OSw4NTQsMWUzLDcwOCw3MTksMTA0Miw3MjksNTU2LDYxOSw2MDQsNTM0LDYxOCw1NTYsNzM2LDUxMCw2MTEsNjExLDUwNyw2MjIsNzQwLDYwNCw2MTEsNjExLDYxMSw1NTYsODg5LDU1Niw4ODUsNTU2LDY0Niw1ODMsODg5LDkzNSw3MDcsODU0LDU5NCw1NTIsODY1LDU4OSw1NTYsNTU2LDYxMSw0NjksNTYzLDU1NiwyNzgsMjc4LDI3OCw5NjksOTA2LDYxMSw1MDcsNjE5LDU1Niw2MTEsNzc4LDYxMSw1NzUsNDY3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDExMDQsNTU2LDg4NSw1MTYsMTE0NiwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsOTk5LDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MjUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczMyw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI4MSw1NTYsNDAwLDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjE1LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM1NCw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4OSw4NDYsMzg5LDc5NCw4NjUsNzc1LDIyMiw2NjcsNjY3LDU3MCw2NzEsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY3LDgzMyw3MjIsNjQ4LDc3OCw3MjUsNjY3LDYwMCw2MTEsNjY3LDgzNyw2NjcsODMxLDc2MSwyNzgsNjY3LDU3MCw0MzksNTU1LDIyMiw1NTAsNTcwLDU3MSw1MDAsNTU2LDQzOSw0NjMsNTU1LDU0MiwyMjIsNTAwLDQ5Miw1NDgsNTAwLDQ0Nyw1NTYsNjcwLDU3Myw0ODYsNjAzLDM3NCw1NTAsNjUyLDU0Niw3MjgsNzc5LDIyMiw1NTAsNTU2LDU1MCw3NzksNjY3LDY2Nyw4NDMsNTQ0LDcwOCw2NjcsMjc4LDI3OCw1MDAsMTA2Niw5ODIsODQ0LDU4OSw3MTUsNjM5LDcyNCw2NjcsNjUxLDY2Nyw1NDQsNzA0LDY2Nyw5MTcsNjE0LDcxNSw3MTUsNTg5LDY4Niw4MzMsNzIyLDc3OCw3MjUsNjY3LDcyMiw2MTEsNjM5LDc5NSw2NjcsNzI3LDY3Myw5MjAsOTIzLDgwNSw4ODYsNjUxLDY5NCwxMDIyLDY4Miw1NTYsNTYyLDUyMiw0OTMsNTUzLDU1Niw2ODgsNDY1LDU1Niw1NTYsNDcyLDU2NCw2ODYsNTUwLDU1Niw1NTYsNTU2LDUwMCw4MzMsNTAwLDgzNSw1MDAsNTcyLDUxOCw4MzAsODUxLDYyMSw3MzYsNTI2LDQ5Miw3NTIsNTM0LDU1Niw1NTYsNTU2LDM3OCw0OTYsNTAwLDIyMiwyMjIsMjIyLDkxMCw4MjgsNTU2LDQ3Miw1NjUsNTAwLDU1Niw3NzgsNTU2LDQ5MiwzMzksOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDgzLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDk5OCw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTg0LDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYxNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzM1LDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjkyLDU1NiwzMzQsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MDQsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzc1LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg0LDgzOCwzODQsNzc0LDg1NSw3NTIsMjIyLDY2Nyw2NjcsNTUxLDY2OCw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjgsODMzLDcyMiw2NTAsNzc4LDcyMiw2NjcsNjE4LDYxMSw2NjcsNzk4LDY2Nyw4MzUsNzQ4LDI3OCw2NjcsNTc4LDQ0Niw1NTYsMjIyLDU0Nyw1NzgsNTc1LDUwMCw1NTcsNDQ2LDQ0MSw1NTYsNTU2LDIyMiw1MDAsNTAwLDU3Niw1MDAsNDQ4LDU1Niw2OTAsNTY5LDQ4Miw2MTcsMzk1LDU0Nyw2NDgsNTI1LDcxMyw3ODEsMjIyLDU0Nyw1NTYsNTQ3LDc4MSw2NjcsNjY3LDg2NSw1NDIsNzE5LDY2NywyNzgsMjc4LDUwMCwxMDU3LDEwMTAsODU0LDU4Myw3MjIsNjM1LDcxOSw2NjcsNjU2LDY2Nyw1NDIsNjc3LDY2Nyw5MjMsNjA0LDcxOSw3MTksNTgzLDY1Niw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjM1LDc2MCw2NjcsNzQwLDY2Nyw5MTcsOTM4LDc5Miw4ODUsNjU2LDcxOSwxMDEwLDcyMiw1NTYsNTczLDUzMSwzNjUsNTgzLDU1Niw2NjksNDU4LDU1OSw1NTksNDM4LDU4Myw2ODgsNTUyLDU1Niw1NDIsNTU2LDUwMCw0NTgsNTAwLDgyMyw1MDAsNTczLDUyMSw4MDIsODIzLDYyNSw3MTksNTIxLDUxMCw3NTAsNTQyLDU1Niw1NTYsNTU2LDM2NSw1MTAsNTAwLDIyMiwyNzgsMjIyLDkwNiw4MTIsNTU2LDQzOCw1NTksNTAwLDU1Miw3NzgsNTU2LDQ4OSw0MTEsOTQ0LDcyMiw5NDQsNzIyLDk0NCw3MjIsNjY3LDUwMCwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyMjIsMjIyLDIyMiwyMjIsMzMzLDMzMywzMzMsNTU2LDU1NiwzNTAsMWUzLDFlMywxODgsMzU0LDMzMywzMzMsNTAwLDMzMywxNjcsMzY1LDU1Niw1NTYsMTA5NCw1NTYsODg1LDMyMywxMDczLDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MTksMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNTAwLDUwMCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMjk0LDI5NCwzMjQsMzI0LDMxNiwzMjgsMzk4LDI4NV0sdC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz10Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPXQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9dC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz12b2lkIDAsdC5NeXJpYWRQcm9Cb2xkRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9Cb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TZWdvZXVpUmVndWxhck1ldHJpY3M9dC5TZWdvZXVpUmVndWxhckZhY3RvcnM9dC5TZWdvZXVpSXRhbGljTWV0cmljcz10LlNlZ29ldWlJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPXQuU2Vnb2V1aUJvbGRGYWN0b3JzPXZvaWQgMCx0LlNlZ29ldWlCb2xkRmFjdG9ycz1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSx0LlNlZ29ldWlJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4xNDc2MywxLjA1MzY1LDEuMDYyMzQsLjk2OTI3LC45MjU4NiwxLjE1MzczLDEuMTg0MTQsLjkxMzQ5LC45MTM0OSwxLjA3NDAzLDEuMTczMDgsLjc4MzgzLDEuMjAwODgsLjc4MzgzLDEuNDI1MzEsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODM4MywuNzgzODMsMS4xNzMwOCwxLjE3MzA4LDEuMTczMDgsLjc3MzQ5LC45NDU2NSwuOTQ3MjksLjg1OTQ0LC44ODUwNiwuOTg1OCwuNzQ4MTcsLjgwMDE2LC44ODQ0OSwuOTgwMzksLjk1NzgyLC42OTIzOCwuODk4OTgsLjgzMjMxLC45ODE4MywxLjAzOTg5LC45NjkyNCwuODYyMzcsLjk2OTI0LC44MDU5NSwuNzQ1MjQsLjg2MDkxLC45NTQwMiwuOTQxNDMsLjk4NDQ4LC44ODU4LC44MzA4OSwuOTMyODUsMS4wOTQ5LDEuMzkwMTYsMS4wOTQ5LDEuNDU5OTQsLjc0NjI3LDEuMDQ4MzksLjk3NDU0LC45NzQ1NCwuODcyMDcsLjk3NDU0LC44NzUzMywxLjA2MTUxLC45NzQ1NCwxLjAwMTc2LDEuMTY0ODQsMS4wODEzMiwuOTgwNDcsMS4xNjQ4NCwxLjAyOTg5LDEuMDEwNTQsLjk2MjI1LC45NzQ1NCwuOTc0NTQsMS4wNjU5OCwuNzkwMDQsMS4xNjM0NCwxLjAwMzUxLC45NDYyOSwuOTk3MywuOTEwMTYsLjk2Nzc3LC45MDQzLC45MTA4MiwuOTI0ODEsLjkxMDgyLDEuMTczMDgsLjk1NzQ4LC45NjkyNywuOTY5MjcsMSwuOTY5MjcsLjkyNDgxLC44MDU5NywxLjA0ODM5LDEuMjMzOTMsMS4xNzgxLC45MjQ1LDEuMTczMDgsMS4yMDgwOCwuNjMyMTgsLjk0MjYxLDEuMjQ4MjIsMS4wOTk3MSwxLjA5OTcxLDEuMDQ4MzksMSwuODUyNzMsLjc4MDMyLDEuMDQ4MzksMS4wOTk3MSwxLjIyMzI2LC45MjQ1LDEuMDk4MzYsMS4xMzUyNSwxLjE1MjIyLC43MDQyNCwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuODU0OTgsLjg4NTA2LC43NDgxNywuNzQ4MTcsLjc0ODE3LC43NDgxNywuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk4NTgsMS4wMzk4OSwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTczMDgsLjk2OTI0LC45NTQwMiwuOTU0MDIsLjk1NDAyLC45NTQwMiwuODMwODksLjg2MjM3LC44ODQwOSwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTI5MTYsLjg3MjA3LC44NzUzMywuODc1MzMsLjg3NTMzLC44NzUzMywuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzODU0LDEuMDEwNTQsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwxLjI0ODIyLC44NzYxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsLjk2Nzc3LC45NzQ1NCwuOTY3NzcsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuOTg1OCwuOTUzOTEsLjk4NTgsLjk3NDU0LC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwxLDEsLjk4MDM5LDEuMDAxNzYsLjk4MDM5LDEuMDAxNzYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLDEuMTY0ODQsLjk1NzgyLC45MzE0NiwuODQ0MjEsMS4xMjc2MSwuNjkyMzgsMS4wODEzMiwxLDEsLjk4MDQ3LC44MzIzMSwxLjE2NDg0LDEsMSwuODQ3MjMsMS4wNDg2MSwuODQ3MjMsLjc4NzU1LC44MzIzMSwxLjIzNzM2LDEuMDM5ODksMS4wMTA1NCwxLDEsMS4wMzk4OSwxLjAxMDU0LC45ODU3LDEuMDM4NDksMS4wMTA1NCwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTIzODMsLjkwMTcxLC44MDU5NSwxLjA2NTk4LDEsMSwuODA1OTUsMS4wNjU5OCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LDEsMSwuODYwOTEsMS4wMjc1OSwuODU3NzEsMS4xNjM0NCwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTU0MDIsMS4wMDM1MSwuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywuODMwODksLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsMS4zMTg2OCwuOTY5MjcsLjk0NzI5LC45NzQ1NCwuODU0OTgsLjkyOTE2LC45NjkyNCwuODc2MSwxLDEsLjg2MDkxLDEuMTYzNDQsMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksLjgxOTY1LC44MTk2NSwuOTQ3MjksLjc4MDMyLC43MTAyMiwuOTA4ODMsLjg0MTcxLC45OTg3NywuNzc1OTYsMS4wNTczNCwxLjIsLjk0NzI5LC44NTk0NCwuODI3OTEsLjk2MDcsLjc0ODE3LC45MzI4NSwuOTgwMzksLjk2OTI0LC45NTc4MiwuODk4OTgsLjk4MzE2LC45ODE4MywxLjAzOTg5LC43ODYxNCwuOTY5MjQsLjk3NjQyLC44NjIzNywuODYwNzUsLjg2MDkxLC44MzA4OSwuOTAwODIsLjg4NTgsLjk3Mjk2LDEuMDEyODQsLjk1NzgyLC44MzA4OSwxLjA5NzYsMS4wNCwxLjAzMzQyLDEuMiwxLjA2NzUsMS4wOTc2LC45ODIwNSwxLjAzODA5LDEuMDUwOTcsMS4wNCwuOTUzNjQsMS4wMzM0MiwxLjA1NDAxLDEuMiwxLjAyMTQ4LDEuMDExOSwxLjA0NzI0LDEuMDEyNywxLjAyNzMyLC45NjIyNSwuODk2NSwuOTc3ODMsLjkzNTc0LC45NDgxOCwxLjMwNjc5LDEuMDY3NSwxLjExODI2LC45OTgyMSwxLjA1NTcsMS4wMzI2LDEuMiwxLjA2NzUsLjk2MjI1LDEuMDY3NSwxLjAzMjYsLjc0ODE3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3NTQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3NTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45ODcwNSwxLDEsMSwxLDEsMSwuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsMS4xMjMxNywxLjEyMzE3LDEuMTIzMTcsLjY3NjAzLC42NzYwMywxLjE1NjIxLC43MzU4NCwxLjIxMTkxLDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3MDksLjk2OTI3LDEuMDE0NzMsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4wOTgzNiwxLjA5ODM2LDEuMDk4MzYsMS4wMTUyMiwuODYzMjEsLjk0NDM0LC44NjQ5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjQzOCwxLjE3MzA4LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY3OTEsMS4yNDgyMiwxLjI0ODIyLDEuMTczMDgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xNzk4NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA3NDIsMS4xMDc0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpUmVndWxhckZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBvc3RTY3JpcHRFdmFsdWF0b3I9dC5Qb3N0U2NyaXB0Q29tcGlsZXI9dC5QREZGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHQuaXNQREZGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdDtpZigib2JqZWN0IiE9PWcoZSkpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE4Nyksbz1yKDEzNikscz1yKDE4OCk7ZnVuY3Rpb24gYyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZ1KGUsdCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiB1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sdShlLHQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49ZihlKTtpZih0KXt2YXIgYT1mKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWcodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGYoZSl9ZnVuY3Rpb24gaChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZChlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZChlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gcChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3AoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHAoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWcoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1nKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnkoZS5wcm90b3R5cGUsdCksciYmeShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjt2KHRoaXMsZSksdGhpcy54cmVmPXIsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hfXJldHVybiBtKGUsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn19LHtrZXk6ImNyZWF0ZUZyb21BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDt2YXIgcj1rLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTtyZXR1cm4gdGhpcy5fY2FjaGUoZSxyKSxyfX0se2tleToiZ2V0Q2FjaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlIGluc3RhbmNlb2Ygbi5SZWY/dD1lOmUgaW5zdGFuY2VvZiBuLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKSx0KXt2YXIgcj10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH19LHtrZXk6Il9jYWNoZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO3ZhciByO2UgaW5zdGFuY2VvZiBuLlJlZj9yPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9yPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKHI9ZS5kaWN0JiZlLmRpY3Qub2JqSWQpLHImJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxyLHQpfX0se2tleToiX2xvY2FsRnVuY3Rpb25DYWNoZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBzLkxvY2FsRnVuY3Rpb25DYWNoZSl9fV0pLGV9KCk7ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW3JdKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7YSsrKW5bYV09K2VbYV07cmV0dXJuIG59cmV0dXJuIGV9dC5QREZGdW5jdGlvbkZhY3Rvcnk9Yjt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSl9cmV0dXJuIG0oZSxudWxsLFt7a2V5OiJnZXRTYW1wbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvPTE7Zm9yKGE9MCxpPWUubGVuZ3RoO2E8aTthKyspbyo9ZVthXTtvKj10O3ZhciBzPW5ldyBBcnJheShvKSxjPTAsdT0wLGw9MS8oTWF0aC5wb3coMixyKS0xKSxmPW4uZ2V0Qnl0ZXMoKG8qcis3KS84KSxoPTA7Zm9yKGE9MDthPG87YSsrKXtmb3IoO2M8cjspdTw8PTgsdXw9ZltoKytdLGMrPTg7Yy09cixzW2FdPSh1Pj5jKSpsLHUmPSgxPDxjKS0xfXJldHVybiBzfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixpPW4uZGljdHx8bjtzd2l0Y2goaS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6aX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9KX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9fSx7a2V5OiJwYXJzZUFycmF5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZm5PYmo7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7dmFyIGEsaT1bXSxvPWgobik7dHJ5e2ZvcihvLnMoKTshKGE9by5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO2kucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46dC5mZXRjaElmUmVmKHMpfSkpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBhPTAsbz1pLmxlbmd0aDthPG87YSsrKWlbYV0oZSx0LHIsbithKX19fSx7a2V5OiJjb25zdHJ1Y3RTYW1wbGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5mbixyPWUuZGljdDtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MCxhPTA7YTx0O2ErPTIpcltuKytdPVtlW2FdLGVbYSsxXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQscixuLGEpe3JldHVybiBuKyhhLW4pLyhyLXQpKihlLXQpfXZhciBvPXcoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhyLmdldEFycmF5KCJSYW5nZSIpKTtpZighb3x8IXMpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO3ZhciBjPW8ubGVuZ3RoLzIsdT1zLmxlbmd0aC8yO289bihvKSxzPW4ocyk7dmFyIGw9dyhyLmdldEFycmF5KCJTaXplIikpLGY9ci5nZXQoIkJpdHNQZXJTYW1wbGUiKSxoPXIuZ2V0KCJPcmRlciIpfHwxOzEhPT1oJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitoKTt2YXIgZD13KHIuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihkKWQ9bihkKTtlbHNle2Q9W107Zm9yKHZhciBwPTA7cDxjOysrcClkLnB1c2goWzAsbFtwXS0xXSl9dmFyIGc9dyhyLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP24oZyk6czt2YXIgdj10aGlzLmdldFNhbXBsZUFycmF5KGwsdSxmLHQpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxmLGg9MTw8YyxwPW5ldyBGbG9hdDY0QXJyYXkoaCkseT1uZXcgVWludDMyQXJyYXkoaCk7Zm9yKGY9MDtmPGg7ZisrKXBbZl09MTt2YXIgbT11LGI9MTtmb3IoYT0wO2E8YzsrK2Epe3ZhciB3PW9bYV1bMF0saz1vW2FdWzFdLFM9aShNYXRoLm1pbihNYXRoLm1heChlW3QrYV0sdyksayksdyxrLGRbYV1bMF0sZFthXVsxXSkseD1sW2FdLE89KFM9TWF0aC5taW4oTWF0aC5tYXgoUywwKSx4LTEpKTx4LTE/TWF0aC5mbG9vcihTKTpTLTEsQT1PKzEtUyxDPVMtTyxGPU8qbSxQPUYrbTtmb3IoZj0wO2Y8aDtmKyspZiZiPyhwW2ZdKj1DLHlbZl0rPVApOihwW2ZdKj1BLHlbZl0rPUYpO20qPXgsYjw8PTF9Zm9yKGY9MDtmPHU7KytmKXt2YXIgVD0wO2ZvcihhPTA7YTxoO2ErKylUKz12W3lbYV0rZl0qcFthXTtUPWkoVCwwLDEsZ1tmXVswXSxnW2ZdWzFdKSxyW24rZl09TWF0aC5taW4oTWF0aC5tYXgoVCxzW2ZdWzBdKSxzW2ZdWzFdKX19fX0se2tleToiY29uc3RydWN0SW50ZXJwb2xhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7Zm9yKHZhciB0PWUuZGljdCxyPXcodC5nZXRBcnJheSgiQzAiKSl8fFswXSxuPXcodC5nZXRBcnJheSgiQzEiKSl8fFsxXSxhPXQuZ2V0KCJOIiksaT1bXSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWkucHVzaChuW29dLXJbb10pO3ZhciBjPWkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbixvKXtmb3IodmFyIHM9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLHU9MDt1PGM7Kyt1KW5bbyt1XT1yW3VdK3MqaVt1XX19fSx7a2V5OiJjb25zdHJ1Y3RTdGljaGVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnhyZWYscj1lLmlzRXZhbFN1cHBvcnRlZCxuPWUuZGljdCxpPXcobi5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT1pLmxlbmd0aC8yKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7dmFyIG8scz1bXSxjPWgobi5nZXQoIkZ1bmN0aW9ucyIpKTt0cnl7Zm9yKGMucygpOyEobz1jLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7cy5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYodSl9KSl9fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfXZhciBsPXcobi5nZXRBcnJheSgiQm91bmRzIikpLGY9dyhuLmdldEFycmF5KCJFbmNvZGUiKSksZD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgYSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxjPWwubGVuZ3RoO2ZvcihhPTA7YTxjJiYhKG88bFthXSk7KythKTt2YXIgdT1pWzBdO2E+MCYmKHU9bFthLTFdKTt2YXIgaD1pWzFdO2E8bC5sZW5ndGgmJihoPWxbYV0pO3ZhciBwPWZbMiphXSxnPWZbMiphKzFdO2RbMF09dT09PWg/cDpwKyhvLXUpKihnLXApLyhoLXUpLHNbYV0oZCwwLHIsbil9fX0se2tleToiY29uc3RydWN0UG9zdFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS54cmVmO3ZhciB0PWUuaXNFdmFsU3VwcG9ydGVkLHI9ZS5mbixuPWUuZGljdCxvPXcobi5nZXRBcnJheSgiRG9tYWluIikpLHM9dyhuLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFzKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTt2YXIgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIociksdT1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmYS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe3ZhciBsPShuZXcgUikuY29tcGlsZSh1LG8scyk7aWYobClyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsbCl9KDAsYS5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgZj1zLmxlbmd0aD4+MSxoPW8ubGVuZ3RoPj4xLGQ9bmV3IHgodSkscD1PYmplY3QuY3JlYXRlKG51bGwpLGc9ODE5Mix2PW5ldyBGbG9hdDMyQXJyYXkoaCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0iIixjPXY7Zm9yKGE9MDthPGg7YSsrKWk9ZVt0K2FdLGNbYV09aSxvKz1pKyJfIjt2YXIgdT1wW29dO2lmKHZvaWQgMD09PXUpe3ZhciBsPW5ldyBGbG9hdDMyQXJyYXkoZikseT1kLmV4ZWN1dGUoYyksbT15Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT15W20rYV07dmFyIGI9c1syKmFdOyhpPGJ8fGk+KGI9c1syKmErMV0pKSYmKGk9YiksbFthXT1pfWc+MCYmKGctLSxwW29dPWwpLHIuc2V0KGwsbil9ZWxzZSByLnNldCh1LG4pfX19XSksZX0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2KHRoaXMsZSksdGhpcy5zdGFjaz10P0FycmF5LmZyb20odCk6W119cmV0dXJuIG0oZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PWUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaCh0KX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfX0se2tleToiY29weSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5zdGFjay5sZW5ndGgrdD49ZS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciByPXRoaXMuc3RhY2ssbj1yLmxlbmd0aC10LGE9dC0xO2E+PTA7YS0tLG4rKylyLnB1c2gocltuXSl9fSx7a2V5OiJpbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9fSx7a2V5OiJyb2xsIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnN0YWNrLG49ci5sZW5ndGgtZSxhPXIubGVuZ3RoLTEsaT1uKyh0LU1hdGguZmxvb3IodC9lKSplKSxvPW4scz1hO288cztvKysscy0tKXt2YXIgYz1yW29dO3Jbb109cltzXSxyW3NdPWN9Zm9yKHZhciB1PW4sbD1pLTE7dTxsO3UrKyxsLS0pe3ZhciBmPXJbdV07clt1XT1yW2xdLHJbbF09Zn1mb3IodmFyIGg9aSxkPWE7aDxkO2grKyxkLS0pe3ZhciBwPXJbaF07cltoXT1yW2RdLHJbZF09cH19fV0sW3trZXk6Ik1BWF9TVEFDS19TSVpFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiTUFYX1NUQUNLX1NJWkUiLDEwMCl9fV0pLGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMub3BlcmF0b3JzPXR9cmV0dXJuIG0oZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbixpPW5ldyBTKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGM9cy5sZW5ndGg7bzxjOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6bj1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1uKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocituKTticmVhaztjYXNlImFuZCI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHImJm4pOmkucHVzaChyJm4pO2JyZWFrO2Nhc2UiYXRhbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmF0YW4ocikpO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm49aS5wb3AoKSwocj1pLnBvcCgpKT4wP2kucHVzaChyPDxuKTppLnB1c2gocj4+bik7YnJlYWs7Y2FzZSJjZWlsaW5nIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY2VpbChyKSk7YnJlYWs7Y2FzZSJjb3B5IjpyPWkucG9wKCksaS5jb3B5KHIpO2JyZWFrO2Nhc2UiY29zIjpyPWkucG9wKCksaS5wdXNoKE1hdGguY29zKHIpKTticmVhaztjYXNlImN2aSI6cj0wfGkucG9wKCksaS5wdXNoKHIpO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9uKTticmVhaztjYXNlImR1cCI6aS5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI9PT1uKTticmVhaztjYXNlImV4Y2giOmkucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChNYXRoLnBvdyhyLG4pKTticmVhaztjYXNlImZhbHNlIjppLnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5mbG9vcihyKSk7YnJlYWs7Y2FzZSJnZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj49bik7YnJlYWs7Y2FzZSJndCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj5uKTticmVhaztjYXNlImlkaXYiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIvbnwwKTticmVhaztjYXNlImluZGV4IjpyPWkucG9wKCksaS5pbmRleChyKTticmVhaztjYXNlImxlIjpuPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPD1uKTticmVhaztjYXNlImxuIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpKTticmVhaztjYXNlImxvZyI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmxvZyhyKS9NYXRoLkxOMTApO2JyZWFrO2Nhc2UibHQiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8bik7YnJlYWs7Y2FzZSJtb2QiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIlbik7YnJlYWs7Y2FzZSJtdWwiOm49aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHIqbik7YnJlYWs7Y2FzZSJuZSI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociE9PW4pO2JyZWFrO2Nhc2UibmVnIjpyPWkucG9wKCksaS5wdXNoKC1yKTticmVhaztjYXNlIm5vdCI6ImJvb2xlYW4iPT10eXBlb2Yocj1pLnBvcCgpKT9pLnB1c2goIXIpOmkucHVzaCh+cik7YnJlYWs7Y2FzZSJvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHJ8fG4pOmkucHVzaChyfG4pO2JyZWFrO2Nhc2UicG9wIjppLnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnJvbGwocixuKTticmVhaztjYXNlInJvdW5kIjpyPWkucG9wKCksaS5wdXNoKE1hdGgucm91bmQocikpO2JyZWFrO2Nhc2Uic2luIjpyPWkucG9wKCksaS5wdXNoKE1hdGguc2luKHIpKTticmVhaztjYXNlInNxcnQiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5zcXJ0KHIpKTticmVhaztjYXNlInN1YiI6bj1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci1uKTticmVhaztjYXNlInRydWUiOmkucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6cj0ocj1pLnBvcCgpKTwwP01hdGguY2VpbChyKTpNYXRoLmZsb29yKHIpLGkucHVzaChyKTticmVhaztjYXNlInhvciI6bj1pLnBvcCgpLCJib29sZWFuIj09dHlwZW9mKHI9aS5wb3AoKSkmJiJib29sZWFuIj09dHlwZW9mIG4/aS5wdXNoKHIhPT1uKTppLnB1c2gocl5uKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319XSksZX0oKTt0LlBvc3RTY3JpcHRFdmFsdWF0b3I9eDt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dih0aGlzLGUpLHRoaXMudHlwZT10fXJldHVybiBtKGUsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXsoMCxhLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9fV0pLGV9KCksQT1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJhcmdzIikpLmluZGV4PWUsaS5taW49bixpLm1heD1hLGl9cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19XSkscn0oTyksQz1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB2KHRoaXMsciksKG49dC5jYWxsKHRoaXMsImxpdGVyYWwiKSkubnVtYmVyPWUsbi5taW49ZSxuLm1heD1lLG59cmV0dXJuIG0ocixbe2tleToidmlzaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1dKSxyfShPKSxGPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSxvKXt2YXIgcztyZXR1cm4gdih0aGlzLHIpLChzPXQuY2FsbCh0aGlzLCJiaW5hcnkiKSkub3A9ZSxzLmFyZzE9bixzLmFyZzI9YSxzLm1pbj1pLHMubWF4PW8sc31yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19XSkscn0oTyksUD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHYodGhpcyxyKSwoYT10LmNhbGwodGhpcywibWF4IikpLmFyZz1lLGEubWluPWUubWluLGEubWF4PW4sYX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdE1pbih0aGlzKX19XSkscn0oTyksVD1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bChyKTtmdW5jdGlvbiByKGUsbixhKXt2YXIgaTtyZXR1cm4gdih0aGlzLHIpLChpPXQuY2FsbCh0aGlzLCJ2YXIiKSkuaW5kZXg9ZSxpLm1pbj1uLGkubWF4PWEsaX1yZXR1cm4gbShyLFt7a2V5OiJ2aXNpdCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1dKSxyfShPKSxJPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1sKHIpO2Z1bmN0aW9uIHIoZSxuKXt2YXIgYTtyZXR1cm4gdih0aGlzLHIpLChhPXQuY2FsbCh0aGlzLCJkZWZpbml0aW9uIikpLnZhcmlhYmxlPWUsYS5hcmc9bixhfXJldHVybiBtKHIsW3trZXk6InZpc2l0Iix2YWx1ZTpmdW5jdGlvbihlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1dKSxyfShPKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3YodGhpcyxlKSx0aGlzLnBhcnRzPVtdfXJldHVybiBtKGUsW3trZXk6InZpc2l0QXJndW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfX0se2tleToidmlzaXRWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX19LHtrZXk6InZpc2l0TGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX19LHtrZXk6InZpc2l0QmluYXJ5T3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKSxlLmFyZzEudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIiksZS5hcmcyLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiKSIpfX0se2tleToidmlzaXRWYXJpYWJsZURlZmluaXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX19LHtrZXk6InZpc2l0TWluIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19XSksZX0oKTtmdW5jdGlvbiBqKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBDKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgRigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBNKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBDKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEMoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fXZhciByPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxuPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEYoIioiLGUsdCxyLG4pfWZ1bmN0aW9uIF8oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBDKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEYoIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gTChlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQyh0KTplLm1heDw9dD9lOm5ldyBQKGUsdCl9dmFyIFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dih0aGlzLGUpfXJldHVybiBtKGUsW3trZXk6ImNvbXBpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4sYSxpLG8scyxjLHUsbCxmPVtdLGg9W10sZz10Lmxlbmd0aD4+MSx2PXIubGVuZ3RoPj4xLHk9MCxtPTA7bTxnO20rKylmLnB1c2gobmV3IEEobSx0WzIqbV0sdFsyKm0rMV0pKTtmb3IodmFyIGI9MCx3PWUubGVuZ3RoO2I8dztiKyspaWYoIm51bWJlciIhPXR5cGVvZihsPWVbYl0pKXN3aXRjaChsKXtjYXNlImFkZCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtvPWYucG9wKCksaT1mLnBvcCgpLGYucHVzaChqKGksbykpO2JyZWFrO2Nhc2UiY3ZyIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihmLmxlbmd0aDwyKXJldHVybiBudWxsO289Zi5wb3AoKSxpPWYucG9wKCksZi5wdXNoKE0oaSxvKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7bz1mLnBvcCgpLGk9Zi5wb3AoKSxmLnB1c2goXyhpLG8pKTticmVhaztjYXNlImV4Y2giOmlmKGYubGVuZ3RoPDIpcmV0dXJuIG51bGw7cz1mLnBvcCgpLGM9Zi5wb3AoKSxmLnB1c2gocyxjKTticmVhaztjYXNlInBvcCI6aWYoZi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtmLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGYubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiIT09KGk9Zi5wb3AoKSkudHlwZSlyZXR1cm4gbnVsbDtpZigobj1pLm51bWJlcik8MHx8IU51bWJlci5pc0ludGVnZXIobil8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoImxpdGVyYWwiPT09KHM9ZltmLmxlbmd0aC1uLTFdKS50eXBlfHwidmFyIj09PXMudHlwZSl7Zi5wdXNoKHMpO2JyZWFrfXU9bmV3IFQoeSsrLHMubWluLHMubWF4KSxmW2YubGVuZ3RoLW4tMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2UiZHVwIjppZihmLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVtiKzFdJiYiZ3QiPT09ZVtiKzJdJiZlW2IrM109PT1iKzcmJiJqeiI9PT1lW2IrNF0mJiJwb3AiPT09ZVtiKzVdJiZlW2IrNl09PT1lW2IrMV0pe2k9Zi5wb3AoKSxmLnB1c2goTChpLGVbYisxXSkpLGIrPTY7YnJlYWt9aWYoImxpdGVyYWwiPT09KHM9Zi5hdCgtMSkpLnR5cGV8fCJ2YXIiPT09cy50eXBlKXtmLnB1c2gocyk7YnJlYWt9dT1uZXcgVCh5Kysscy5taW4scy5tYXgpLGZbZi5sZW5ndGgtMV09dSxmLnB1c2godSksaC5wdXNoKG5ldyBJKHUscykpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoZi5sZW5ndGg8MilyZXR1cm4gbnVsbDtpZihvPWYucG9wKCksaT1mLnBvcCgpLCJsaXRlcmFsIiE9PW8udHlwZXx8ImxpdGVyYWwiIT09aS50eXBlKXJldHVybiBudWxsO2lmKGE9by5udW1iZXIsKG49aS5udW1iZXIpPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoYSl8fGYubGVuZ3RoPG4pcmV0dXJuIG51bGw7aWYoMD09KGE9KGElbituKSVuKSlicmVhaztmLnB1c2guYXBwbHkoZixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBwKGUpfShrPWYuc3BsaWNlKGYubGVuZ3RoLW4sbi1hKSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oayl8fGQoayl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBmLnB1c2gobmV3IEMobCkpO3ZhciBrO2lmKGYubGVuZ3RoIT09dilyZXR1cm4gbnVsbDtmb3IodmFyIFM9W10seD0wLE89aDt4PE8ubGVuZ3RoO3grKyl7dmFyIEY9T1t4XSxQPW5ldyBFO0YudmlzaXQoUCksUy5wdXNoKFAudG9TdHJpbmcoKSl9Zm9yKHZhciBSPTAsTj1mLmxlbmd0aDtSPE47UisrKXt2YXIgRD1mW1JdLEI9bmV3IEU7RC52aXNpdChCKTt2YXIgVT1yWzIqUl0sJD1yWzIqUisxXSxYPVtCLnRvU3RyaW5nKCldO1U+RC5taW4mJihYLnVuc2hpZnQoIk1hdGgubWF4KCIsVSwiLCAiKSxYLnB1c2goIikiKSksJDxELm1heCYmKFgudW5zaGlmdCgiTWF0aC5taW4oIiwkLCIsICIpLFgucHVzaCgiKSIpKSxYLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsUiwiXSA9ICIpLFgucHVzaCgiOyIpLFMucHVzaChYLmpvaW4oIiIpKX1yZXR1cm4gUy5qb2luKCJcbiIpfX1dKSxlfSgpO3QuUG9zdFNjcmlwdENvbXBpbGVyPVJ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDIpLGE9cigxMzQpLGk9cigxMzUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG8oZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gdCYmYyhlLnByb3RvdHlwZSx0KSxyJiZjKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMubGV4ZXI9dCx0aGlzLm9wZXJhdG9ycz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5wcmV2PW51bGx9cmV0dXJuIHUoZSxbe2tleToibmV4dFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJldj10aGlzLnRva2VuLHRoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfX0se2tleToiYWNjZXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2tlbi50eXBlPT09ZSYmKHRoaXMubmV4dFRva2VuKCksITApfX0se2tleToiZXhwZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICIuY29uY2F0KHRoaXMudG9rZW4udHlwZSwiIGV4cGVjdGVkICIpLmNvbmNhdChlLCIuIikpfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuKCksdGhpcy5leHBlY3QoZi5MQlJBQ0UpLHRoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLm9wZXJhdG9yc319LHtrZXk6InBhcnNlQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KGYuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChmLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQoZi5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fX0se2tleToicGFyc2VDb25kaXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChmLlJCUkFDRSksdGhpcy5hY2NlcHQoZi5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChmLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3ZhciB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dmFyIHI9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpLHRoaXMuZXhwZWN0KGYuUkJSQUNFKSx0aGlzLmV4cGVjdChmLklGRUxTRSksdGhpcy5vcGVyYXRvcnNbdF09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW3QrMV09ImoiLHRoaXMub3BlcmF0b3JzW2VdPXIsdGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifX19XSksZX0oKTt0LlBvc3RTY3JpcHRQYXJzZXI9bDt2YXIgZj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ModGhpcyxlKSx0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPXJ9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJvcENhY2hlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9fSx7a2V5OiJnZXRPcGVyYXRvciIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUub3BDYWNoZVt0XXx8KGUub3BDYWNoZVt0XT1uZXcgZShmLk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUoZi5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKGYuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUoZi5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKGYuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cyh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfXJldHVybiB1KGUsW3trZXk6Im5leHRDaGFyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX19LHtrZXk6ImdldFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IGgoZi5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxoLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGguUkJSQUNFfXZhciByPXRoaXMuc3RyQnVmO2ZvcihyLmxlbmd0aD0wLHJbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO3ZhciBuPXIuam9pbigiIik7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIGguSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBoLklGRUxTRTtkZWZhdWx0OnJldHVybiBoLmdldE9wZXJhdG9yKG4pfX19LHtrZXk6ImdldE51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRDaGFyLHQ9dGhpcy5zdHJCdWY7Zm9yKHQubGVuZ3RoPTAsdFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3ZhciByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fV0pLGV9KCk7dC5Qb3N0U2NyaXB0TGV4ZXI9ZH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KTtmdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZzKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBzPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0scyhlLHQpfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLG49dShlKTtpZih0KXt2YXIgYT11KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3Qobixhcmd1bWVudHMsYSl9ZWxzZSByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PWwodCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHUoZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbChlKX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1sKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWwoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiB0JiZoKGUucHJvdG90eXBlLHQpLHImJmgoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PSh0JiZ0Lm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6ImdldEJ5TmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fb25seVJlZnMmJigwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLiIpO3ZhciB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfX0se2tleToiZ2V0QnlSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1dKSxlfSgpLGc9ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcigpe3JldHVybiBmKHRoaXMsciksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsSW1hZ2VDYWNoZT1nO3ZhciB2PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoKXtyZXR1cm4gZih0aGlzLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBkKHIsW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiBudWxsIT09ZSYmdGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KSx2b2lkIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9dGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxyKX19XSkscn0ocCk7dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT12O3ZhciB5PWZ1bmN0aW9uKGUpe28ocixlKTt2YXIgdD1jKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx7b25seVJlZnM6ITB9KX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9eTt2YXIgbT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGYodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZChyLFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3JldHVybiB0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHZvaWQgdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX10aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX1dKSxyfShwKTt0LkxvY2FsR1N0YXRlQ2FjaGU9bTt2YXIgYj1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMse29ubHlSZWZzOiEwfSl9cmV0dXJuIGQocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KX19XSkscn0ocCk7dC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLl9yZWZDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfXJldHVybiBkKGUsW3trZXk6Il9ieXRlU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD0wLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX0odGhpcy5faW1hZ2VDYWNoZSk7dHJ5e2ZvcihyLnMoKTshKGU9ci5uKCkpLmRvbmU7KXQrPWUudmFsdWUuYnl0ZVNpemV9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9fSx7a2V5OiJfY2FjaGVMaW1pdFJlYWNoZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPGUuTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8ZS5NQVhfQllURV9TSVpFKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtyZXR1cm4hKChuP24uc2l6ZSsobi5oYXMocik/MDoxKToxKTxlLk5VTV9QQUdFU19USFJFU0hPTER8fCF0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfX0se2tleToiYWRkUGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyfHwocj1uZXcgU2V0LHRoaXMuX3JlZkNhY2hlLnB1dChlLHIpKSxyLmFkZCh0KX19LHtrZXk6ImFkZEJ5dGVTaXplIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3ImJihyLmJ5dGVTaXplfHwoci5ieXRlU2l6ZT10KSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuX3JlZkNhY2hlLmdldCh0KTtpZighbilyZXR1cm4gbnVsbDtpZihuLnNpemU8ZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHQpO3JldHVybiBhPyhuLmFkZChyKSxhKTpudWxsfX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgImFkZFBhZ2VJbmRleCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKXx8KHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkPygwLG4ud2FybikoIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLl9yZWZDYWNoZS5jbGVhcigpLHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19XSxbe2tleToiTlVNX1BBR0VTX1RIUkVTSE9MRCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpfX0se2tleToiTUlOX0lNQUdFU19UT19DQUNIRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1JTl9JTUFHRVNfVE9fQ0FDSEUiLDEwKX19LHtrZXk6Ik1BWF9CWVRFX1NJWkUiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfX1dKSxlfSgpO3QuR2xvYmFsSW1hZ2VDYWNoZT13fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYmlkaT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTEscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHA9ITAsZz1lLmxlbmd0aDtpZigwPT09Z3x8cilyZXR1cm4gZihlLHAscik7aC5sZW5ndGg9ZyxkLmxlbmd0aD1nO3ZhciB2LHksbT0wO2Zvcih2PTA7djxnOysrdil7aFt2XT1lLmNoYXJBdCh2KTt2YXIgYj1lLmNoYXJDb2RlQXQodiksdz0iTCI7Yjw9MjU1P3c9YVtiXToxNDI0PD1iJiZiPD0xNTI0P3c9IlIiOjE1MzY8PWImJmI8PTE3OTE/KHc9aVsyNTUmYl0pfHwoMCxuLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrYi50b1N0cmluZygxNikpOjE3OTI8PWImJmI8PTIyMjAmJih3PSJBTCIpLCJSIiE9PXcmJiJBTCIhPT13JiYiQU4iIT09d3x8bSsrLGRbdl09d31pZigwPT09bSlyZXR1cm4gZihlLHA9ITApOy0xPT09dCYmKG0vZzwuMyYmZz40PyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKHY9MDt2PGc7Kyt2KWtbdl09dDt2YXIgUyx4PW8odCk/IlIiOiJMIixPPXgsQT1PLEM9Tztmb3Iodj0wO3Y8ZzsrK3YpIk5TTSI9PT1kW3ZdP2Rbdl09QzpDPWRbdl07Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdikiQUwiPT09KFM9ZFt2XSkmJihkW3ZdPSJSIik7Zm9yKHY9MTt2PGctMTsrK3YpIkVTIj09PWRbdl0mJiJFTiI9PT1kW3YtMV0mJiJFTiI9PT1kW3YrMV0mJihkW3ZdPSJFTiIpLCJDUyIhPT1kW3ZdfHwiRU4iIT09ZFt2LTFdJiYiQU4iIT09ZFt2LTFdfHxkW3YrMV0hPT1kW3YtMV18fChkW3ZdPWRbdi0xXSk7Zm9yKHY9MDt2PGc7Kyt2KWlmKCJFTiI9PT1kW3ZdKXtmb3IodmFyIEY9di0xO0Y+PTAmJiJFVCI9PT1kW0ZdOy0tRilkW0ZdPSJFTiI7Zm9yKHZhciBQPXYrMTtQPGcmJiJFVCI9PT1kW1BdOysrUClkW1BdPSJFTiJ9Zm9yKHY9MDt2PGc7Kyt2KSJXUyIhPT0oUz1kW3ZdKSYmIkVTIiE9PVMmJiJFVCIhPT1TJiYiQ1MiIT09U3x8KGRbdl09Ik9OIik7Zm9yKEM9Tyx2PTA7djxnOysrdikiRU4iPT09KFM9ZFt2XSk/ZFt2XT0iTCI9PT1DPyJMIjoiRU4iOiJSIiE9PVMmJiJMIiE9PVN8fChDPVMpO2Zvcih2PTA7djxnOysrdilpZigiT04iPT09ZFt2XSl7dmFyIFQ9YyhkLHYrMSwiT04iKSxJPU87dj4wJiYoST1kW3YtMV0pO3ZhciBFPUE7VCsxPGcmJihFPWRbVCsxXSksIkwiIT09SSYmKEk9IlIiKSwiTCIhPT1FJiYoRT0iUiIpLEk9PT1FJiZ1KGQsdixULEkpLHY9VC0xfWZvcih2PTA7djxnOysrdikiT04iPT09ZFt2XSYmKGRbdl09eCk7Zm9yKHY9MDt2PGc7Kyt2KVM9ZFt2XSxzKGtbdl0pPyJSIj09PVM/a1t2XSs9MToiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0yKToiTCIhPT1TJiYiQU4iIT09UyYmIkVOIiE9PVN8fChrW3ZdKz0xKTt2YXIgaixNPS0xLF89OTk7Zm9yKHY9MCx5PWsubGVuZ3RoO3Y8eTsrK3YpTTwoaj1rW3ZdKSYmKE09aiksXz5qJiZvKGopJiYoXz1qKTtmb3Ioaj1NO2o+PV87LS1qKXt2YXIgTD0tMTtmb3Iodj0wLHk9ay5sZW5ndGg7djx5OysrdilrW3ZdPGo/TD49MCYmKGwoaCxMLHYpLEw9LTEpOkw8MCYmKEw9dik7TD49MCYmbChoLEwsay5sZW5ndGgpfWZvcih2PTAseT1oLmxlbmd0aDt2PHk7Kyt2KXt2YXIgUj1oW3ZdOyI8IiE9PVImJiI+IiE9PVJ8fChoW3ZdPSIiKX1yZXR1cm4gZihoLmpvaW4oIiIpLHApfTt2YXIgbj1yKDIpLGE9WyJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJTIiwiQiIsIlMiLCJXUyIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkIiLCJCIiwiUyIsIldTIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJFUyIsIkNTIiwiRVMiLCJDUyIsIkNTIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJDUyIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQ1MiLCJPTiIsIkVUIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiT04iLCJPTiIsIkJOIiwiT04iLCJPTiIsIkVUIiwiRVQiLCJFTiIsIkVOIiwiT04iLCJMIiwiT04iLCJPTiIsIk9OIiwiRU4iLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCJdLGk9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYTtmb3Iobj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj0ibHRyIjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXT9yPSJ0dGIiOnR8fChyPSJydGwiKSx7c3RyOmUsZGlyOnJ9fXZhciBoPVtdLGQ9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NdXJtdXJIYXNoM182ND12b2lkIDA7dmFyIG49cigyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxhKGUpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgbz0zMjg1Mzc3NTIwLHM9NDI5NDkwMTc2MCxjPTY1NTM1LHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6byx0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om99dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpLHI9MDtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTthKyspe3ZhciBvPWUuY2hhckNvZGVBdChhKTtvPD0yNTU/dFtyKytdPW86KHRbcisrXT1vPj4+OCx0W3IrK109MjU1Jm8pfX1lbHNle2lmKCEoMCxuLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3I9KHQ9ZS5zbGljZSgpKS5ieXRlTGVuZ3RofWZvcih2YXIgdT1yPj4yLGw9ci00KnUsZj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCx1KSxoPTAsZD0wLHA9dGhpcy5oMSxnPXRoaXMuaDIsdj0zNDMyOTE4MzUzLHk9NDYxODQ1OTA3LG09MTE2MDEsYj0xMzcxNSx3PTA7dzx1O3crKykxJnc/cD01KihwPShwXj1oPShoPShoPShoPWZbd10pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjKTw8MTN8cD4+PjE5KSszODY0MjkyMTk2Omc9NSooZz0oZ149ZD0oZD0oZD0oZD1mW3ddKSp2JnN8ZCptJmMpPDwxNXxkPj4+MTcpKnkmc3xkKmImYyk8PDEzfGc+Pj4xOSkrMzg2NDI5MjE5Njtzd2l0Y2goaD0wLGwpe2Nhc2UgMzpoXj10WzQqdSsyXTw8MTY7Y2FzZSAyOmhePXRbNCp1KzFdPDw4O2Nhc2UgMTpoPShoPShoPShoXj10WzQqdV0pKnYmc3xoKm0mYyk8PDE1fGg+Pj4xNykqeSZzfGgqYiZjLDEmdT9wXj1oOmdePWh9dGhpcy5oMT1wLHRoaXMuaDI9Z319LHtrZXk6ImhleGRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtyZXR1cm4gZT0zOTgxODA2Nzk3KihlXj10Pj4+MSkmc3wzNjA0NSplJmMsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCZzfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJnMpPj4+MTYpPj4+MSkmc3w2MDQ5OSplJmMsKChlXj0odD0zMzAxODgyMzY2KnQmc3woMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZzKT4+PjE2KT4+PjEpPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fV0pJiZpKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NdXJtdXJIYXNoM182ND11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuT3BlcmF0b3JMaXN0PXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBpKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aShlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8scz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgb319fX1mdW5jdGlvbiBpKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyhlLHQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHMoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYyhlKX1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1jKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGgoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBjPXRbb107aT1pW2NdfHwoaVtjXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46cixpdGVyYXRlRm46bixwcm9jZXNzRm46YX19dmFyIGQ9W107aChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1uLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcigiaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwyMDApO2lmKHU8MTApcmV0dXJuIHQtKHQtbyklNDtmb3IodmFyIGw9MCxmPVtdLGg9MCxkPTEscD0xLGc9MDtnPHU7ZysrKXt2YXIgdj1hW3MrKGc8PDIpXSx5PWFbYysoZzw8MildWzBdO2QreS53aWR0aD4xZTMmJihsPU1hdGgubWF4KGwsZCkscCs9aCsyLGQ9MCxoPTApLGYucHVzaCh7dHJhbnNmb3JtOnYseDpkLHk6cCx3Onkud2lkdGgsaDp5LmhlaWdodH0pLGQrPXkud2lkdGgrMixoPU1hdGgubWF4KGgseS5oZWlnaHQpfWZvcih2YXIgbT1NYXRoLm1heChsLGQpKzEsYj1wK2grMSx3PW5ldyBVaW50OEFycmF5KG0qYio0KSxrPW08PDIsUz0wO1M8dTtTKyspe3ZhciB4PWFbYysoUzw8MildWzBdLmRhdGEsTz1mW1NdLnc8PDIsQT0wLEM9ZltTXS54K2ZbU10ueSptPDwyO3cuc2V0KHguc3ViYXJyYXkoMCxPKSxDLWspO2Zvcih2YXIgRj0wLFA9ZltTXS5oO0Y8UDtGKyspdy5zZXQoeC5zdWJhcnJheShBLEErTyksQyksQSs9TyxDKz1rO2Zvcih3LnNldCh4LnN1YmFycmF5KEEtTyxBKSxDKTtDPj0wOyl4W0MtNF09eFtDXSx4W0MtM109eFtDKzFdLHhbQy0yXT14W0MrMl0seFtDLTFdPXhbQyszXSx4W0MrT109eFtDK08tNF0seFtDK08rMV09eFtDK08tM10seFtDK08rMl09eFtDK08tMl0seFtDK08rM109eFtDK08tMV0sQy09a31yZXR1cm4gci5zcGxpY2Uobyw0KnUsbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW3t3aWR0aDptLGhlaWdodDpiLGtpbmQ6bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxkYXRhOnd9LGZdKSxvKzF9KSksaChkLFtuLk9QUy5zYXZlLG4uT1BTLnRyYW5zZm9ybSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsbi5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PW4uT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogIi5jb25jYXQoYSkpfSksKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXksaT1lLmlDdXJyLG89aS0zLHM9aS0yLGM9aS0xLHU9TWF0aC5mbG9vcigodC1vKS80KTtpZih1PDEwKXJldHVybiB0LSh0LW8pJTQ7dmFyIGwsZixoPSExLGQ9YVtjXVswXSxwPWFbc11bMF0sZz1hW3NdWzFdLHY9YVtzXVsyXSx5PWFbc11bM107aWYoZz09PXYpe2g9ITAsbD1zKzQ7Zm9yKHZhciBtPWMrNCxiPTE7Yjx1O2IrKyxsKz00LG0rPTQpaWYoZj1hW2xdLGFbbV1bMF0hPT1kfHxmWzBdIT09cHx8ZlsxXSE9PWd8fGZbMl0hPT12fHxmWzNdIT09eSl7YjwxMD9oPSExOnU9YjticmVha319aWYoaCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHc9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2w9cztmb3IodmFyIGs9MDtrPHU7aysrLGwrPTQpZj1hW2xdLHdbazw8MV09Zls0XSx3WzErKGs8PDEpXT1mWzVdO3Iuc3BsaWNlKG8sNCp1LG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KnUsW2QscCxnLHYseSx3XSl9ZWxzZXt1PU1hdGgubWluKHUsMTAwKTtmb3IodmFyIFM9W10seD0wO3g8dTt4Kyspe2Y9YVtzKyh4PDwyKV07dmFyIE89YVtjKyh4PDwyKV1bMF07Uy5wdXNoKHtkYXRhOk8uZGF0YSx3aWR0aDpPLndpZHRoLGhlaWdodDpPLmhlaWdodCxpbnRlcnBvbGF0ZTpPLmludGVycG9sYXRlLGNvdW50Ok8uY291bnQsdHJhbnNmb3JtOmZ9KX1yLnNwbGljZShvLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksYS5zcGxpY2Uobyw0KnUsW1NdKX1yZXR1cm4gbysxfSkpLGgoZCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1uLk9QUy5zYXZlO2Nhc2UgMTppZihyW3RdIT09bi5PUFMudHJhbnNmb3JtKXJldHVybiExO3ZhciBvPWUuaUN1cnItMixzPWFbb11bMF0sYz1hW29dWzNdO3JldHVybiBhW3RdWzBdPT09cyYmMD09PWFbdF1bMV0mJjA9PT1hW3RdWzJdJiZhW3RdWzNdPT09YztjYXNlIDI6aWYoclt0XSE9PW4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO3ZhciB1PWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PXU7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixjPWFbaS0xXVswXSx1PWFbc11bMF0sbD1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBnPWFbZF07aFtwPDwxXT1nWzRdLGhbMSsocDw8MSldPWdbNV19dmFyIHY9W2MsdSxsLGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsdiksbysxfSkpLGgoZCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1uLk9QUy5zaG93VGV4dClyZXR1cm4hMTt2YXIgbz1lLmlDdXJyLTMscz1hW29dWzBdLGM9YVtvXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1jO2Nhc2UgNDpyZXR1cm4gclt0XT09PW4uT1BTLmVuZFRleHR9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChpKSl9KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsYz1hLTEsdT1hLGw9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2NdJiZyW2ktMV09PT1yW3VdJiZuW2ktNF1bMF09PT1sJiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsZz0xO2c8aDtnKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKTt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMucXVldWU9dH1yZXR1cm4gZihlLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKSx0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpLHRoaXMuX29wdGltaXplKCl9fSx7a2V5OiJmbHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCksZz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbyhlLHQpfShhLGUpO3ZhciB0LHIsbj0odD1hLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1zKHQpO2lmKHIpe3ZhciBhPXModGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Yyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuIHUodGhpcyxhKSwodD1uLmNhbGwodGhpcyxlKSkuc3RhdGU9bnVsbCx0LmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5fSx0Lm1hdGNoPW51bGwsdC5sYXN0UHJvY2Vzc2VkPTAsdH1yZXR1cm4gZihhLFt7a2V5OiJfb3B0aW1pemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZihufHxhfHx0KzEhPT1yfHxkW2VbdF1dKXtmb3IodmFyIGk9dGhpcy5jb250ZXh0O3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLGE9bnVsbCxuPW51bGwsdD49KHI9ZS5sZW5ndGgpKWJyZWFrfShuPShufHxkKVtlW3RdXSkmJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9cn19LHtrZXk6ImZsdXNoIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7dGhpcy5tYXRjaDspe3ZhciBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fV0pLGF9KHApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt1KHRoaXMsZSksdGhpcy5fc3RyZWFtU2luaz1yLHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSwhcnx8dCZuLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBwKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBnKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLndlaWdodD0wLHRoaXMuX3Jlc29sdmVkPXI/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gZihlLFt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9fSx7a2V5OiJyZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fX0se2tleToidG90YWxMZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH19LHtrZXk6ImFkZE9wIix2YWx1ZTpmdW5jdGlvbih0LHIpe3RoaXMub3B0aW1pemVyLnB1c2godCxyKSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49ZS5DSFVOS19TSVpFX0FCT1VUJiYodD09PW4uT1BTLnJlc3RvcmV8fHQ9PT1uLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX19LHtrZXk6ImFkZEltYWdlT3BzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3Aobi5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9fSx7a2V5OiJhZGREZXBlbmRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChuLk9QUy5kZXBlbmRlbmN5LFtlXSkpfX0se2tleToiYWRkRGVwZW5kZW5jaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWEoZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlO3RoaXMuYWRkRGVwZW5kZW5jeShuKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9fX0se2tleToiYWRkT3BMaXN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZSl7dmFyIHIsaT1hKHQuZGVwZW5kZW5jaWVzKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1mb3IodmFyIHM9MCxjPXQubGVuZ3RoO3M8YztzKyspdGhpcy5hZGRPcCh0LmZuQXJyYXlbc10sdC5hcmdzQXJyYXlbc10pfWVsc2UoMCxuLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX19LHtrZXk6ImdldElSIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX19LHtrZXk6Il90cmFuc2ZlcnMiLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZm5BcnJheSxyPXRoaXMuYXJnc0FycmF5LGE9dGhpcy5sZW5ndGgsaT0wO2k8YTtpKyspc3dpdGNoKHRbaV0pe2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6Y2FzZSBuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOmNhc2Ugbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OnZhciBvPXJbaV1bMF07IW8uY2FjaGVkJiZvLmRhdGEmJm8uZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKG8uZGF0YS5idWZmZXIpfXJldHVybiBlfX0se2tleToiZmx1c2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19XSxbe2tleToiQ0hVTktfU0laRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9fSx7a2V5OiJDSFVOS19TSVpFX0FCT1VUIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiQ0hVTktfU0laRV9BQk9VVCIsdGhpcy5DSFVOS19TSVpFLTUpfX1dKSxlfSgpO3QuT3BlcmF0b3JMaXN0PXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZJbWFnZT12b2lkIDA7dmFyIG49cigyKSxhPXIoMTkzKSxpPXIoMTM2KSxvPXIoMTQzKSxzPXIoMTQ4KSxjPXIoMTU2KSx1PXIoMTU5KSxsPXIoMTM0KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoKXtoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGg9dS52YWx1ZTtyZXR1cm4gaCYmIm9iamVjdCI9PWYoaCkmJnIuY2FsbChoLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGguX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGgpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGQoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWYoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1mKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09ZihhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4oZT10K2Uqcik8MD9lPTA6ZT5uJiYoZT1uKSxlfWZ1bmN0aW9uIHYoZSx0LHIsbixhLGkpe3ZhciBvLHM9YSppO289dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO3ZhciBjLHUsbCxmLGg9ci9hLGQ9bi9pLHA9MCxnPW5ldyBVaW50MTZBcnJheShhKSx2PXI7Zm9yKGM9MDtjPGE7YysrKWdbY109TWF0aC5mbG9vcihjKmgpO2ZvcihjPTA7YzxpO2MrKylmb3IobD1NYXRoLmZsb29yKGMqZCkqdix1PTA7dTxhO3UrKylmPWwrZ1t1XSxvW3ArK109ZVtmXTtyZXR1cm4gb312YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC54cmVmLGE9dC5yZXMscz10LmltYWdlLGM9dC5pc0lubGluZSxmPXZvaWQgMCE9PWMmJmMsaD10LnNtYXNrLGQ9dm9pZCAwPT09aD9udWxsOmgscD10Lm1hc2ssZz12b2lkIDA9PT1wP251bGw6cCx2PXQuaXNNYXNrLHk9dm9pZCAwIT09diYmdixtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGI9dC5sb2NhbENvbG9yU3BhY2VDYWNoZTshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmltYWdlPXM7dmFyIHcsaz1zLmRpY3QsUz1rLmdldCgiRiIsIkZpbHRlciIpO2lmKFMgaW5zdGFuY2VvZiBsLk5hbWUpdz1TLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KFMpKXt2YXIgeD1yLmZldGNoSWZSZWYoU1swXSk7eCBpbnN0YW5jZW9mIGwuTmFtZSYmKHc9eC5uYW1lKX1zd2l0Y2godyl7Y2FzZSJKUFhEZWNvZGUiOnZhciBPPW5ldyB1LkpweEltYWdlO08ucGFyc2VJbWFnZVByb3BlcnRpZXMocy5zdHJlYW0pLHMuc3RyZWFtLnJlc2V0KCkscy53aWR0aD1PLndpZHRoLHMuaGVpZ2h0PU8uaGVpZ2h0LHMuYml0c1BlckNvbXBvbmVudD1PLmJpdHNQZXJDb21wb25lbnQscy5udW1Db21wcz1PLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpzLmJpdHNQZXJDb21wb25lbnQ9MSxzLm51bUNvbXBzPTF9dmFyIEE9ay5nZXQoIlciLCJXaWR0aCIpLEM9ay5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMud2lkdGgpJiZzLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIocy5oZWlnaHQpJiZzLmhlaWdodD4wJiYocy53aWR0aCE9PUF8fHMuaGVpZ2h0IT09QykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLEE9cy53aWR0aCxDPXMuaGVpZ2h0KSxBPDF8fEM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoQSwiIG9yIGhlaWdodDogIikuY29uY2F0KEMpKTt0aGlzLndpZHRoPUEsdGhpcy5oZWlnaHQ9Qyx0aGlzLmludGVycG9sYXRlPWsuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSx0aGlzLmltYWdlTWFzaz1rLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITEsdGhpcy5tYXR0ZT1rLmdldCgiTWF0dGUiKXx8ITE7dmFyIEY9cy5iaXRzUGVyQ29tcG9uZW50O2lmKCFGJiYhKEY9ay5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKSkpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICIuY29uY2F0KHRoaXMuaW1hZ2VNYXNrKSk7Rj0xfWlmKHRoaXMuYnBjPUYsIXRoaXMuaW1hZ2VNYXNrKXt2YXIgUD1rLmdldFJhdygiQ1MiKXx8ay5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighUClzd2l0Y2goKDAsbi5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpLHMubnVtQ29tcHMpe2Nhc2UgMTpQPWwuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6UD1sLk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6UD1sLk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkpQWCBpbWFnZXMgd2l0aCAiLmNvbmNhdChzLm51bUNvbXBzLCIgY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpKX10aGlzLmNvbG9yU3BhY2U9by5Db2xvclNwYWNlLnBhcnNlKHtjczpQLHhyZWY6cixyZXNvdXJjZXM6Zj9hOm51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pLHRoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzfWlmKHRoaXMuZGVjb2RlPWsuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKSx0aGlzLm5lZWRzRGVjb2RlPSExLHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxGKXx8eSYmIW8uQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO3ZhciBUPSgxPDxGKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtmb3IodmFyIEk9dGhpcy5jb2xvclNwYWNlJiYiSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZSxFPTAsaj0wO0U8dGhpcy5kZWNvZGUubGVuZ3RoO0UrPTIsKytqKXt2YXIgTT10aGlzLmRlY29kZVtFXSxfPXRoaXMuZGVjb2RlW0UrMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal09ST8oXy1NKS9UOl8tTSx0aGlzLmRlY29kZUFkZGVuZHNbal09ST9NOlQqTX19ZD90aGlzLnNtYXNrPW5ldyBlKHt4cmVmOnIscmVzOmEsaW1hZ2U6ZCxpc0lubGluZTpmLHBkZkZ1bmN0aW9uRmFjdG9yeTptLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmJ9KTpnJiYoZyBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9nLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgZSh7eHJlZjpyLHJlczphLGltYWdlOmcsaXNJbmxpbmU6Zixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5Om0sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Yn0pOigwLG4ud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKTp0aGlzLm1hc2s9Zyl9dmFyIHQscixmLHksbTtyZXR1cm4gdD1lLHI9W3trZXk6ImRyYXdXaWR0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzayYmdGhpcy5zbWFzay53aWR0aHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay53aWR0aHx8MCl9fSx7a2V5OiJkcmF3SGVpZ2h0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzayYmdGhpcy5zbWFzay5oZWlnaHR8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2suaGVpZ2h0fHwwKX19LHtrZXk6ImRlY29kZUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxpPXRoaXMuZGVjb2RlQWRkZW5kcyxvPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLHM9KDE8PG4pLTE7aWYoMSE9PW4pe3ZhciBjPTA7Zm9yKHQ9MCxyPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7dDxyO3QrKylmb3IodmFyIHU9MDt1PGE7dSsrKWVbY109ZyhlW2NdLGlbdV0sb1t1XSxzKSxjKyt9ZWxzZSBmb3IodD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyllW3RdPSshZVt0XX19LHtrZXk6ImdldENvbXBvbmVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO3ZhciByLG49dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5udW1Db21wcyxvPW4qYSppLHM9MDtyPXQ8PTg/bmV3IFVpbnQ4QXJyYXkobyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KG8pOm5ldyBVaW50MzJBcnJheShvKTt2YXIgYyx1LGw9bippLGY9KDE8PHQpLTEsaD0wO2lmKDE9PT10KWZvcih2YXIgZCxwLGcsdj0wO3Y8YTt2Kyspe2ZvcihwPWgrKC04JmwpLGc9aCtsO2g8cDspdT1lW3MrK10scltoXT11Pj43JjEscltoKzFdPXU+PjYmMSxyW2grMl09dT4+NSYxLHJbaCszXT11Pj40JjEscltoKzRdPXU+PjMmMSxyW2grNV09dT4+MiYxLHJbaCs2XT11Pj4xJjEscltoKzddPTEmdSxoKz04O2lmKGg8Zylmb3IodT1lW3MrK10sZD0xMjg7aDxnOylyW2grK109KyEhKHUmZCksZD4+PTF9ZWxzZXt2YXIgeT0wO2Zvcih1PTAsaD0wLGM9bztoPGM7KytoKXtmb3IoaCVsPT0wJiYodT0wLHk9MCk7eTx0Oyl1PXU8PDh8ZVtzKytdLHkrPTg7dmFyIG09eS10LGI9dT4+bTtiPDA/Yj0wOmI+ZiYmKGI9ZikscltoXT1iLHUmPSgxPDxtKS0xLHk9bX19cmV0dXJuIHJ9fSx7a2V5OiJmaWxsT3BhY2l0eSIsdmFsdWU6ZnVuY3Rpb24odCxyLGEsaSxvKXt2YXIgcyxjLHUsbCxmLGgsZD10aGlzLnNtYXNrLHA9dGhpcy5tYXNrO2lmKGQpYz1kLndpZHRoLHU9ZC5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYyp1KSxkLmZpbGxHcmF5QnVmZmVyKHMpLGM9PT1yJiZ1PT09YXx8KHM9dihzLGQuYnBjLGMsdSxyLGEpKTtlbHNlIGlmKHApaWYocCBpbnN0YW5jZW9mIGUpe2ZvcihjPXAud2lkdGgsdT1wLmhlaWdodCxzPW5ldyBVaW50OENsYW1wZWRBcnJheShjKnUpLHAubnVtQ29tcHM9MSxwLmZpbGxHcmF5QnVmZmVyKHMpLGw9MCxmPWMqdTtsPGY7KytsKXNbbF09MjU1LXNbbF07Yz09PXImJnU9PT1hfHwocz12KHMscC5icGMsYyx1LHIsYSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkocCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7cz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKTt2YXIgZz10aGlzLm51bUNvbXBzO2ZvcihsPTAsZj1yKmE7bDxmOysrbCl7dmFyIHk9MCxtPWwqZztmb3IoaD0wO2g8ZzsrK2gpe3ZhciBiPW9bbStoXSx3PTIqaDtpZihiPHBbd118fGI+cFt3KzFdKXt5PTI1NTticmVha319c1tsXT15fX1pZihzKWZvcihsPTAsaD0zLGY9cippO2w8ZjsrK2wsaCs9NCl0W2hdPXNbbF07ZWxzZSBmb3IobD0wLGg9MyxmPXIqaTtsPGY7KytsLGgrPTQpdFtoXT0yNTV9fSx7a2V5OiJ1bmRvUHJlYmxlbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKG4pZm9yKHZhciBhPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobiwwKSxpPWFbMF0sbz1hWzFdLHM9YVsyXSxjPXQqcio0LHU9MDt1PGM7dSs9NCl7dmFyIGw9ZVt1KzNdO2lmKDAhPT1sKXt2YXIgZj0yNTUvbDtlW3VdPShlW3VdLWkpKmYraSxlW3UrMV09KGVbdSsxXS1vKSpmK28sZVt1KzJdPShlW3UrMl0tcykqZitzfWVsc2UgZVt1XT0yNTUsZVt1KzFdPTI1NSxlW3UrMl09MjU1fX19LHtrZXk6ImNyZWF0ZUltYWdlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9dGhpcy5kcmF3V2lkdGgscj10aGlzLmRyYXdIZWlnaHQsYT17d2lkdGg6dCxoZWlnaHQ6cixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgscz10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGw9byppKnUrNz4+MztpZighZSl7dmFyIGY7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2Y9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChmPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZiYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1vJiZyPT09cyl7aWYoYS5raW5kPWYsYS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhzKmwse30pLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShmPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgaD1hLmRhdGEsZD0wLHA9aC5sZW5ndGg7ZDxwO2QrKyloW2RdXj0yNTV9cmV0dXJuIGF9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciBnPXMqbDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Zyo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gYS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxhLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGcse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6cixmb3JjZVJHQjohMH0pLGF9fX12YXIgdix5LG09dGhpcy5nZXRJbWFnZUJ5dGVzKHMqbCx7aW50ZXJuYWw6ITB9KSxiPTB8bS5sZW5ndGgvbCpyL3Msdz10aGlzLmdldENvbXBvbmVudHMobSk7cmV0dXJuIGV8fHRoaXMuc21hc2t8fHRoaXMubWFzaz8oYS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqNCksdj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShhLmRhdGEsdCxyLGIsdykpOihhLmtpbmQ9bi5JbWFnZUtpbmQuUkdCXzI0QlBQLGEuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKjMpLHY9MCx5PSExKSx0aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcih3KSx0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihhLmRhdGEsbyxzLHQscixiLHUsdyx2KSx5JiZ0aGlzLnVuZG9QcmVibGVuZChhLmRhdGEsdCxiKSxhfX0se2tleToiZmlsbEdyYXlCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsYz1pKnQqcys3Pj4zLHU9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxsPXRoaXMuZ2V0Q29tcG9uZW50cyh1KTtpZigxIT09cyl7dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobCksYT1pKm87dmFyIGY9MjU1LygoMTw8cyktMSk7Zm9yKHI9MDtyPGE7KytyKWVbcl09ZipsW3JdfWVsc2UgaWYoYT1pKm8sdGhpcy5uZWVkc0RlY29kZSlmb3Iocj0wO3I8YTsrK3IpZVtyXT1sW3JdLTEmMjU1O2Vsc2UgZm9yKHI9MDtyPGE7KytyKWVbcl09MjU1Ji1sW3JdfX0se2tleToiZ2V0SW1hZ2VCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmRyYXdXaWR0aCxhPXQuZHJhd0hlaWdodCxpPXQuZm9yY2VSR0Isbz12b2lkIDAhPT1pJiZpLGM9dC5pbnRlcm5hbCx1PXZvaWQgMCE9PWMmJmM7dGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXJ8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFvO3ZhciBsPXRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSk7cmV0dXJuIHV8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBzLkRlY29kZVN0cmVhbT9sOigoMCxuLmFzc2VydCkobCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksJ1BERkltYWdlLmdldEltYWdlQnl0ZXM6IFVuc3VwcG9ydGVkICJpbWFnZUJ5dGVzIiB0eXBlLicpLG5ldyBVaW50OEFycmF5KGwpKX19XSxmPVt7a2V5OiJidWlsZEltYWdlIix2YWx1ZTooeT1oKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgYSxvLHMsYyx1LGwsZixkLHAsZyx2LHk7cmV0dXJuIGgoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1yLnhyZWYsbz1yLnJlcyxzPXIuaW1hZ2UsYz1yLmlzSW5saW5lLHU9dm9pZCAwIT09YyYmYyxsPXIucGRmRnVuY3Rpb25GYWN0b3J5LGY9ci5sb2NhbENvbG9yU3BhY2VDYWNoZSxkPXMscD1udWxsLGc9bnVsbCx2PXMuZGljdC5nZXQoIlNNYXNrIikseT1zLmRpY3QuZ2V0KCJNYXNrIiksdj92IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP3A9djooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOnkmJih5IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KHkpP2c9eTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLHQuYWJydXB0KCJyZXR1cm4iLG5ldyBlKHt4cmVmOmEscmVzOm8saW1hZ2U6ZCxpc0lubGluZTp1LHNtYXNrOnAsbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSksbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXkuYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe2QoYSxyLG4saSxvLCJuZXh0IixlKX1mdW5jdGlvbiBvKGUpe2QoYSxyLG4saSxvLCJ0aHJvdyIsZSl9aSh2b2lkIDApfSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY3JlYXRlUmF3TWFzayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PShhKzc+PjMpKmksbD1uLmJ5dGVMZW5ndGg7aWYoIW98fHMmJnUhPT1sP3M/KCh0PW5ldyBVaW50OEFycmF5KHUpKS5zZXQobiksdC5maWxsKDI1NSxsKSk6dD1uZXcgVWludDhBcnJheShuKTp0PW4scylmb3Iocj0wO3I8bDtyKyspdFtyXV49MjU1O3JldHVybntkYXRhOnQsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpjfX19LHtrZXk6ImNyZWF0ZU1hc2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW1nQXJyYXkscj1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGM9ZS5pbnRlcnBvbGF0ZSx1PWUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsbD12b2lkIDA9PT11fHx1LGY9MT09PXImJjE9PT1pJiZzPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZihmKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOmZ9O2lmKGwmJm4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBoPW5ldyBPZmZzY3JlZW5DYW52YXMocixpKSxkPWguZ2V0Q29udGV4dCgiMmQiKSxwPWQuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7cmV0dXJuKDAsYS5hcHBseU1hc2tJbWFnZURhdGEpKHtzcmM6dCxkZXN0OnAuZGF0YSx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6c30pLGQucHV0SW1hZ2VEYXRhKHAsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6YyxiaXRtYXA6aC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGludmVyc2VEZWNvZGU6cyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpvLGludGVycG9sYXRlOmN9KX19XSxyJiZwKHQucHJvdG90eXBlLHIpLGYmJnAodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuUERGSW1hZ2U9eX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFwcGx5TWFza0ltYWdlRGF0YT1mdW5jdGlvbihlKXt2YXIgdCxyPWUuc3JjLGk9ZS5zcmNQb3Msbz12b2lkIDA9PT1pPzA6aSxzPWUuZGVzdCxjPWUuZGVzdFBvcyx1PXZvaWQgMD09PWM/MDpjLGw9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pbnZlcnNlRGVjb2RlLGQ9dm9pZCAwIT09aCYmaCxwPW4uRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsZz1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWQ/WzAscF06W3AsMF0pfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2ZvcihpPShyPXIuY2FsbChlKSkubmV4dDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwyIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KHQpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYShlLDIpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2EoZSwyKTp2b2lkIDB9fSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpLHY9Z1swXSx5PWdbMV0sbT1sPj4zLGI9NyZsLHc9ci5sZW5ndGg7cz1uZXcgVWludDMyQXJyYXkocy5idWZmZXIpO2Zvcih2YXIgaz0wO2s8ZjtrKyspe2Zvcih2YXIgUz1vK207bzxTO28rKyl7dmFyIHg9bzx3P3Jbb106MjU1O3NbdSsrXT0xMjgmeD95OnYsc1t1KytdPTY0Jng/eTp2LHNbdSsrXT0zMiZ4P3k6dixzW3UrK109MTYmeD95OnYsc1t1KytdPTgmeD95OnYsc1t1KytdPTQmeD95OnYsc1t1KytdPTImeD95OnYsc1t1KytdPTEmeD95OnZ9aWYoMCE9PWIpZm9yKHZhciBPPW88dz9yW28rK106MjU1LEE9MDtBPGI7QSsrKXNbdSsrXT1PJjE8PDctQT95OnZ9cmV0dXJue3NyY1BvczpvLGRlc3RQb3M6dX19O3ZhciBuPXIoMik7ZnVuY3Rpb24gYShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3JpZ2luYWxEYXRhLHI9ZS54cmVmSW5mbyxzPWUubmV3UmVmcyx1PWUueHJlZixoPXZvaWQgMD09PXU/bnVsbDp1LGc9ZS5oYXNYZmEsdj12b2lkIDAhPT1nJiZnLGI9ZS54ZmFEYXRhc2V0c1JlZix3PXZvaWQgMD09PWI/bnVsbDpiLGs9ZS5oYXNYZmFEYXRhc2V0c0VudHJ5LFM9dm9pZCAwIT09ayYmayx4PWUubmVlZEFwcGVhcmFuY2VzLE89ZS5hY3JvRm9ybVJlZixBPXZvaWQgMD09PU8/bnVsbDpPLEM9ZS5hY3JvRm9ybSxGPXZvaWQgMD09PUM/bnVsbDpDLFA9ZS54ZmFEYXRhLFQ9dm9pZCAwPT09UD9udWxsOlA7KGZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuYWNyb0Zvcm0saT1lLmFjcm9Gb3JtUmVmLG89ZS5oYXNYZmEscz1lLmhhc1hmYURhdGFzZXRzRW50cnksYz1lLnhmYURhdGFzZXRzUmVmLHU9ZS5uZWVkQXBwZWFyYW5jZXMsZj1lLm5ld1JlZnM7aWYoIW98fHN8fGN8fCgwLG4ud2FybikoIlhGQSAtIENhbm5vdCBzYXZlIGl0IiksdXx8byYmYyl7dmFyIGgscD1uZXcgYS5EaWN0KHQpLGc9bChyLmdldEtleXMoKSk7dHJ5e2ZvcihnLnMoKTshKGg9Zy5uKCkpLmRvbmU7KXt2YXIgdj1oLnZhbHVlO3Auc2V0KHYsci5nZXRSYXcodikpfX1jYXRjaChlKXtnLmUoZSl9ZmluYWxseXtnLmYoKX1pZihvJiYhcyl7dmFyIHk9ci5nZXQoIlhGQSIpLnNsaWNlKCk7eS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpLHkuc3BsaWNlKDMsMCxjKSxwLnNldCgiWEZBIix5KX11JiZwLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7dmFyIG09dC5lbmNyeXB0LGI9bnVsbDttJiYoYj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShpLm51bSxpLmdlbikpO3ZhciB3PVtdO2QoaSxwLHcsYiksZi5wdXNoKHtyZWY6aSxkYXRhOncuam9pbigiIil9KX19KSh7eHJlZjpoLGFjcm9Gb3JtOkYsYWNyb0Zvcm1SZWY6QSxoYXNYZmE6dixoYXNYZmFEYXRhc2V0c0VudHJ5OlMseGZhRGF0YXNldHNSZWY6dyxuZWVkQXBwZWFyYW5jZXM6eCxuZXdSZWZzOnN9KSx2JiZmdW5jdGlvbihlKXt2YXIgdD1lLnhmYURhdGEscj1lLnhmYURhdGFzZXRzUmVmLGE9ZS5uZXdSZWZzLHM9ZS54cmVmO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe3ZhciByLGE9bmV3IG8uU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpLHM9bCh0KTt0cnl7Zm9yKHMucygpOyEocj1zLm4oKSkuZG9uZTspe3ZhciBjPXIudmFsdWUueGZhO2lmKGMpe3ZhciB1PWMucGF0aCxmPWMudmFsdWU7aWYodSl7dmFyIGg9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZSgoMCxpLnBhcnNlWEZBUGF0aCkodSksMCk7aD9BcnJheS5pc0FycmF5KGYpP2guY2hpbGROb2Rlcz1mLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKX0pKTpoLmNoaWxkTm9kZXM9W25ldyBvLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixmKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHUpKX19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgZD1bXTtyZXR1cm4gYS5kb2N1bWVudEVsZW1lbnQuZHVtcChkKSxkLmpvaW4oIiIpfShzLmZldGNoSWZSZWYocikuZ2V0U3RyaW5nKCksYSkpO3ZhciBjPXMuZW5jcnlwdDtjJiYodD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLm51bSxyLmdlbikuZW5jcnlwdFN0cmluZyh0KSk7dmFyIHU9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG4iKSsiPDwgL1R5cGUgL0VtYmVkZGVkRmlsZSAvTGVuZ3RoICIuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTp1fSl9KHt4ZmFEYXRhOlQseGZhRGF0YXNldHNSZWY6dyxuZXdSZWZzOnMseHJlZjpofSk7dmFyIEksRSxqPW5ldyBhLkRpY3QobnVsbCksTT1yLm5ld1JlZixfPXQuYXQoLTEpOzEwPT09X3x8MTM9PT1fPyhJPVtdLEU9dC5sZW5ndGgpOihJPVsiXG4iXSxFPXQubGVuZ3RoKzEpLGouc2V0KCJTaXplIixNLm51bSsxKSxqLnNldCgiUHJldiIsci5zdGFydFhSZWYpLGouc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJmouc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJmouc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJmouc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLHMucHVzaCh7cmVmOk0sZGF0YToiIn0pO3ZhciBMLFI9W1swLDEsNjU1MzVdXSxOPVswLDFdLEQ9MCxCPWwocz1zLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmVmLm51bS10LnJlZi5udW19KSkpO3RyeXtmb3IoQi5zKCk7IShMPUIubigpKS5kb25lOyl7dmFyIFU9TC52YWx1ZSwkPVUucmVmLFg9VS5kYXRhO0Q9TWF0aC5tYXgoRCxFKSxSLnB1c2goWzEsRSxNYXRoLm1pbigkLmdlbiw2NTUzNSldKSxFKz1YLmxlbmd0aCxOLnB1c2goJC5udW0sMSksSS5wdXNoKFgpfX1jYXRjaChlKXtCLmUoZSl9ZmluYWxseXtCLmYoKX1pZihqLnNldCgiSW5kZXgiLE4pLEFycmF5LmlzQXJyYXkoci5maWxlSWRzKSYmci5maWxlSWRzLmxlbmd0aD4wKXt2YXIgSD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLGk9W3IudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV0sbz1pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLHM9MCx1PU9iamVjdC52YWx1ZXModC5pbmZvKTtzPHUubGVuZ3RoO3MrKyl7dmFyIGw9dVtzXTtpLnB1c2gobCksbys9bC5sZW5ndGh9Zm9yKHZhciBmPW5ldyBVaW50OEFycmF5KG8pLGg9MCxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgZz1wW2RdO20oZyxoLGYpLGgrPWcubGVuZ3RofXJldHVybigwLG4uYnl0ZXNUb1N0cmluZykoKDAsYy5jYWxjdWxhdGVNRDUpKGYpKX0oRSxyKTtqLnNldCgiSUQiLFtyLmZpbGVJZHNbMF0sSF0pfXZhciBxPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoRCkvOCksMl0sRz0ocVswXStxWzFdK3FbMl0pKlIubGVuZ3RoO2ouc2V0KCJXIixxKSxqLnNldCgiTGVuZ3RoIixHKSxJLnB1c2goIiIuY29uY2F0KE0ubnVtLCIgIikuY29uY2F0KE0uZ2VuLCIgb2JqXG4iKSkscChqLEksbnVsbCksSS5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgej1JLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLFc9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoRSwiXG4lJUVPRlxuIiksVj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCt6K0crVy5sZW5ndGgpO1Yuc2V0KHQpO3ZhciBZLEssSj10Lmxlbmd0aCxaPWwoSSk7dHJ5e2ZvcihaLnMoKTshKFk9Wi5uKCkpLmRvbmU7KXt2YXIgUT1ZLnZhbHVlO20oUSxKLFYpLEorPVEubGVuZ3RofX1jYXRjaChlKXtaLmUoZSl9ZmluYWxseXtaLmYoKX1mb3IodmFyIGVlPTAsdGU9UjtlZTx0ZS5sZW5ndGg7ZWUrKyl7dmFyIHJlPSgzLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KEs9dGVbZWVdKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtmb3IoaT0ocj1yLmNhbGwoZSkpLm5leHQsMDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KEspfHxmKEssMyl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksbmU9cmVbMF0sYWU9cmVbMV0saWU9cmVbMl07Sj15KG5lLHFbMF0sSixWKSxKPXkoYWUscVsxXSxKLFYpLEo9eShpZSxxWzJdLEosVil9cmV0dXJuIG0oVyxKLFYpLFZ9LHQud3JpdGVEaWN0PXAsdC53cml0ZU9iamVjdD1kO3ZhciBuPXIoMiksYT1yKDEzNCksaT1yKDEzNSksbz1yKDE5NSkscz1yKDEzNiksYz1yKDE5Nik7ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sdShlKX1mdW5jdGlvbiBsKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBoKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/aChlLHQpOnZvaWQgMH19ZnVuY3Rpb24gaChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGQoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/cCh0LHIsbik6dCBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSYmZyh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9ZnVuY3Rpb24gcChlLHQscil7dC5wdXNoKCI8PCIpO3ZhciBuLGE9bChlLmdldEtleXMoKSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO3QucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG8pLCIgIikpLHYoZS5nZXRSYXcobyksdCxyKX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIGcoZSx0LHIpe3AoZS5kaWN0LHQsciksdC5wdXNoKCIgc3RyZWFtXG4iKTt2YXIgbj1lLmdldFN0cmluZygpO251bGwhPT1yJiYobj1yLmVuY3J5cHRTdHJpbmcobikpLHQucHVzaChuLCJcbmVuZHN0cmVhbSIpfWZ1bmN0aW9uIHYoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO3ZhciBuLGE9ITAsaT1sKGUpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTthP2E9ITE6dC5wdXNoKCIgIiksdihvLHQscil9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXQucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9wKGUsdCxyKTplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtP2coZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHUoZSksIiwgcGxlYXNlIGZpbGUgYSBidWcuIikpfWZ1bmN0aW9uIHkoZSx0LHIsbil7Zm9yKHZhciBhPXQrci0xO2E+ci0xO2EtLSluW2FdPTI1NSZlLGU+Pj04O3JldHVybiByK3R9ZnVuY3Rpb24gbShlLHQscil7Zm9yKHZhciBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXJbdCtuXT0yNTUmZS5jaGFyQ29kZUF0KG4pfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDt2YXIgbj1yKDEzNSk7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sYShlLHQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9YyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBjKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/dShlLHQpOnZvaWQgMH19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGwoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bChlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWwobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1sKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgcD17Tm9FcnJvcjowLEVuZE9mRG9jdW1lbnQ6LTEsVW50ZXJtaW5hdGVkQ2RhdDotMixVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjotMyxVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246LTQsVW50ZXJtaW5hdGVkQ29tbWVudDotNSxNYWxmb3JtZWRFbGVtZW50Oi02LE91dE9mTWVtb3J5Oi03LFVudGVybWluYXRlZEF0dHJpYnV0ZVZhbHVlOi04LFVudGVybWluYXRlZEVsZW1lbnQ6LTksRWxlbWVudE5ldmVyQmVndW46LTEwfTtmdW5jdGlvbiBnKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4iICI9PT1yfHwiXG4iPT09cnx8IlxyIj09PXJ8fCJcdCI9PT1yfXQuWE1MUGFyc2VyRXJyb3JDb2RlPXA7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6Il9yZXNvbHZlRW50aXRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUucmVwbGFjZSgvJihbXjtdKyk7L2csKGZ1bmN0aW9uKGUscil7aWYoIiN4Ij09PXIuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09ci5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj10O2Z1bmN0aW9uIGEoKXtmb3IoO248ZS5sZW5ndGgmJmcoZSxuKTspKytufWZvcig7bjxlLmxlbmd0aCYmIWcoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3ZhciBpPWUuc3Vic3RyaW5nKHQsbik7Zm9yKGEoKTtuPGUubGVuZ3RoJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dJiYiPyIhPT1lW25dOyl7YSgpO2Zvcih2YXIgbyxzPSIiO248ZS5sZW5ndGgmJiFnKGUsbikmJiI9IiE9PWVbbl07KXMrPWVbbl0sKytuO2lmKGEoKSwiPSIhPT1lW25dKXJldHVybiBudWxsOysrbixhKCk7dmFyIGM9ZVtuXTtpZignIichPT1jJiYiJyIhPT1jKXJldHVybiBudWxsO3ZhciB1PWUuaW5kZXhPZihjLCsrbik7aWYodTwwKXJldHVybiBudWxsO289ZS5zdWJzdHJpbmcobix1KSxyLnB1c2goe25hbWU6cyx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMobyl9KSxuPXUrMSxhKCl9cmV0dXJue25hbWU6aSxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19fSx7a2V5OiJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQ7cjxlLmxlbmd0aCYmIWcoZSxyKSYmIj4iIT09ZVtyXSYmIj8iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO3ZhciBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZnKGUscik7KSsrcn0oKTtmb3IodmFyIGE9cjtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX19LHtrZXk6InBhcnNlWG1sIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOyl7dmFyIHI9dDtpZigiPCI9PT1lW3RdKXt2YXIgbj12b2lkIDA7c3dpdGNoKGVbKytyXSl7Y2FzZSIvIjppZigrK3IsKG49ZS5pbmRleE9mKCI+IixyKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhyLG4pKSxyPW4rMTticmVhaztjYXNlIj8iOisrcjt2YXIgYT10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHIpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhyK2EucGFyc2VkLHIrYS5wYXJzZWQrMikpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3RoaXMub25QaShhLm5hbWUsYS52YWx1ZSkscis9YS5wYXJzZWQrMjticmVhaztjYXNlIiEiOmlmKCItLSI9PT1lLnN1YnN0cmluZyhyKzEsciszKSl7aWYoKG49ZS5pbmRleE9mKCItLVx4M2UiLHIrMykpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHAuVW50ZXJtaW5hdGVkQ29tbWVudCk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRDZGF0KTt0aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcocis4LG4pKSxyPW4rM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciBpPWUuaW5kZXhPZigiWyIscis4KSxvPSExO2lmKChuPWUuaW5kZXhPZigiPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO2lmKGk+MCYmbj5pKXtpZigobj1lLmluZGV4T2YoIl0+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBjPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1jKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihwLk1hbGZvcm1lZEVsZW1lbnQpO3ZhciB1PSExO2lmKCIvPiI9PT1lLnN1YnN0cmluZyhyK2MucGFyc2VkLHIrYy5wYXJzZWQrMikpdT0hMDtlbHNlIGlmKCI+IiE9PWUuc3Vic3RyaW5nKHIrYy5wYXJzZWQscitjLnBhcnNlZCsxKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocC5VbnRlcm1pbmF0ZWRFbGVtZW50KTt0aGlzLm9uQmVnaW5FbGVtZW50KGMubmFtZSxjLmF0dHJpYnV0ZXMsdSkscis9Yy5wYXJzZWQrKHU/MjoxKX19ZWxzZXtmb3IoO3I8ZS5sZW5ndGgmJiI8IiE9PWVbcl07KXIrKzt2YXIgbD1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhsKSl9dD1yfX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9fSx7a2V5OiJvblBpIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6Im9uQ29tbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25DZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25Eb2N0eXBlIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvblRleHQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uQmVnaW5FbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7fX0se2tleToib25FbmRFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt9fV0pLGV9KCk7dC5YTUxQYXJzZXJCYXNlPXY7dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMubm9kZU5hbWU9dCx0aGlzLm5vZGVWYWx1ZT1yLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfXJldHVybiBkKGUsW3trZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX0se2tleToiY2hpbGRyZW4iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfX0se2tleToiaGFzQ2hpbGROb2RlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9fSx7a2V5OiJzZWFyY2hOb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQ+PWUubGVuZ3RoKXJldHVybiB0aGlzO2Zvcih2YXIgcj1lW3RdLG49W10sYT10aGlzOzspe2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBpLGM9MCx1PW8ocyhuLnBvcCgpLDEpWzBdLmNoaWxkTm9kZXMpO3RyeXtmb3IodS5zKCk7IShpPXUubigpKS5kb25lOyl7dmFyIGw9aS52YWx1ZTtpZihyLm5hbWU9PT1sLm5vZGVOYW1lKXtpZihjPT09ci5wb3MpcmV0dXJuIGwuc2VhcmNoTm9kZShlLHQrMSk7YysrfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9dmFyIGY9YS5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09ZilyZXR1cm4gZn1pZihhLmNoaWxkTm9kZXMmJjAhPT1hLmNoaWxkTm9kZXMubGVuZ3RoKW4ucHVzaChbYSwwXSksYT1hLmNoaWxkTm9kZXNbMF07ZWxzZXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09bi5sZW5ndGg7KXt2YXIgaD1zKG4ucG9wKCksMiksZD1oWzBdLHA9aFsxXSsxO2lmKHA8ZC5jaGlsZE5vZGVzLmxlbmd0aCl7bi5wdXNoKFtkLHBdKSxhPWQuY2hpbGROb2Rlc1twXTticmVha319aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsfX19fSx7a2V5OiJkdW1wIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7aWYoZS5wdXNoKCI8Ii5jb25jYXQodGhpcy5ub2RlTmFtZSkpLHRoaXMuYXR0cmlidXRlcyl7dmFyIHQscj1vKHRoaXMuYXR0cmlidXRlcyk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgYT10LnZhbHVlO2UucHVzaCgiICIuY29uY2F0KGEubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykoYS52YWx1ZSksJyInKSl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX1pZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7dmFyIGkscz1vKHRoaXMuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KWkudmFsdWUuZHVtcChlKX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1lLnB1c2goIjwvIi5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaCgiPiIuY29uY2F0KCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSwiPC8iKS5jb25jYXQodGhpcy5ub2RlTmFtZSwiPiIpKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsbi5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19XSksZX0oKTt0LlNpbXBsZURPTU5vZGU9eTt2YXIgbT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmYShlLHQpfShjLGUpO3ZhciB0LHIsbj0odD1jLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsbj1pKHQpO2lmKHIpe3ZhciBhPWkodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGMoZSl7dmFyIHQscj1lLmhhc0F0dHJpYnV0ZXMsYT12b2lkIDAhPT1yJiZyLGk9ZS5sb3dlckNhc2VOYW1lLG89dm9pZCAwIT09aSYmaTtyZXR1cm4gZih0aGlzLGMpLCh0PW4uY2FsbCh0aGlzKSkuX2N1cnJlbnRGcmFnbWVudD1udWxsLHQuX3N0YWNrPW51bGwsdC5fZXJyb3JDb2RlPXAuTm9FcnJvcix0Ll9oYXNBdHRyaWJ1dGVzPWEsdC5fbG93ZXJDYXNlTmFtZT1vLHR9cmV0dXJuIGQoYyxbe2tleToicGFyc2VGcm9tU3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPXAuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PXAuTm9FcnJvcil7dmFyIHQ9cyh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighZyhlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IHkoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgeSgiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9sb3dlckNhc2VOYW1lJiYoZT1lLnRvTG93ZXJDYXNlKCkpO3ZhciBuPW5ldyB5KGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107dmFyIHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcixuPW8odC5jaGlsZE5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspci52YWx1ZS5wYXJlbnROb2RlPXR9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksY30odik7dC5TaW1wbGVYTUxQYXJzZXI9bX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGN1bGF0ZVNIQTI1Nj10LmNhbGN1bGF0ZU1ENT10LlBERjIwPXQuUERGMTc9dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXQuQVJDRm91ckNpcGhlcj10LkFFUzI1NkNpcGhlcj10LkFFUzEyOENpcGhlcj12b2lkIDAsdC5jYWxjdWxhdGVTSEEzODQ9ayx0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTk3KTtmdW5jdGlvbiBvKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnMoZSx0KX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxzKGUsdCl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj11KGUpO2lmKHQpe3ZhciBhPXUodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gdT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sdShlKX1mdW5jdGlvbiBsKGUpe3JldHVybiBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxsKGUpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWwoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1sKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09bChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2YodGhpcyxlKSx0aGlzLmE9MCx0aGlzLmI9MDtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMjU2KSxuPXQubGVuZ3RoLGE9MDthPDI1NjsrK2EpclthXT1hO2Zvcih2YXIgaT0wLG89MDtpPDI1NjsrK2kpe3ZhciBzPXJbaV07bz1vK3MrdFtpJW5dJjI1NSxyW2ldPXJbb10scltvXT1zfXRoaXMucz1yfXJldHVybiBkKGUsW3trZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYSxyPXRoaXMuYixuPXRoaXMucyxhPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO288YTsrK28pe3ZhciBzPW5bdD10KzEmMjU1XSxjPW5bcj1yK3MmMjU1XTtuW3RdPWMsbltyXT1zLGlbb109ZVtvXV5uW3MrYyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fV0pLGV9KCk7dC5BUkNGb3VyQ2lwaGVyPXA7dmFyIGcsdix5PShnPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx2PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGk9MTczMjU4NDE5MyxvPS0yNzE3MzM4Nzkscz0tMTczMjU4NDE5NCxjPTI3MTczMzg3OCx1PXIrNzImLTY0LGw9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKG49MDtuPHI7KytuKWxbbl09ZVt0KytdO2xbbisrXT0xMjg7Zm9yKHZhciBmPXUtODtuPGY7KWxbbisrXT0wO2xbbisrXT1yPDwzJjI1NSxsW24rK109cj4+NSYyNTUsbFtuKytdPXI+PjEzJjI1NSxsW24rK109cj4+MjEmMjU1LGxbbisrXT1yPj4+MjkmMjU1LGxbbisrXT0wLGxbbisrXT0wLGxbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWxbbl18bFtuKzFdPDw4fGxbbisyXTw8MTZ8bFtuKzNdPDwyNDt2YXIgZD1pLHA9byx5PXMsbT1jLGI9dm9pZCAwLHc9dm9pZCAwO2ZvcihhPTA7YTw2NDsrK2Epe2E8MTY/KGI9cCZ5fH5wJm0sdz1hKTphPDMyPyhiPW0mcHx+bSZ5LHc9NSphKzEmMTUpOmE8NDg/KGI9cF55Xm0sdz0zKmErNSYxNSk6KGI9eV4ocHx+bSksdz03KmEmMTUpO3ZhciBrPW0sUz1kK2IrdlthXStoW3ddfDAseD1nW2FdO209eSx5PXAscD1wKyhTPDx4fFM+Pj4zMi14KXwwLGQ9a31pPWkrZHwwLG89bytwfDAscz1zK3l8MCxjPWMrbXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX0pO3QuY2FsY3VsYXRlTUQ1PXk7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7Zih0aGlzLGUpLHRoaXMuaGlnaD0wfHQsdGhpcy5sb3c9MHxyfXJldHVybiBkKGUsW3trZXk6ImFuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoJj1lLmhpZ2gsdGhpcy5sb3cmPWUubG93fX0se2tleToieG9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmhpZ2hePWUuaGlnaCx0aGlzLmxvd149ZS5sb3d9fSx7a2V5OiJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fX0se2tleToic2hpZnRSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MCx0aGlzLmhpZ2g9MCk6KHRoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWUsdGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MCl9fSx7a2V5OiJzaGlmdExlZnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzIsdGhpcy5sb3c9MCk6KHRoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMubG93PDw9ZSl9fSx7a2V5OiJyb3RhdGVSaWdodCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjszMiZlPyhyPXRoaXMubG93LHQ9dGhpcy5oaWdoKToodD10aGlzLmxvdyxyPXRoaXMuaGlnaCksZSY9MzEsdGhpcy5sb3c9dD4+PmV8cjw8MzItZSx0aGlzLmhpZ2g9cj4+PmV8dDw8MzItZX19LHtrZXk6Im5vdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzLmxvdz4+PjApKyhlLmxvdz4+PjApLHI9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihyKz0xKSx0aGlzLmxvdz0wfHQsdGhpcy5oaWdoPTB8cn19LHtrZXk6ImNvcHlUbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NSxlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTUsZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTUsZVt0KzNdPTI1NSZ0aGlzLmhpZ2gsZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1LGVbdCs1XT10aGlzLmxvdz4+MTYmMjU1LGVbdCs2XT10aGlzLmxvdz4+OCYyNTUsZVt0KzddPTI1NSZ0aGlzLmxvd319LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319XSksZX0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfXZhciBvPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoPTE3NzkwMzM3MDMsZD0zMTQ0MTM0Mjc3LHA9MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxtPTUyODczNDYzNSxiPTE1NDE0NTkyMjUsdz02NCpNYXRoLmNlaWwoKHUrOSkvNjQpLGs9bmV3IFVpbnQ4QXJyYXkodyk7Zm9yKGw9MDtsPHU7KytsKWtbbF09c1tjKytdO2tbbCsrXT0xMjg7Zm9yKHZhciBTPXctODtsPFM7KWtbbCsrXT0wO2tbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT0wLGtbbCsrXT11Pj4+MjkmMjU1LGtbbCsrXT11Pj4yMSYyNTUsa1tsKytdPXU+PjEzJjI1NSxrW2wrK109dT4+NSYyNTUsa1tsKytdPXU8PDMmMjU1O3ZhciB4LE89bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IobD0wO2w8dzspe2ZvcihmPTA7ZjwxNjsrK2YpT1tmXT1rW2xdPDwyNHxrW2wrMV08PDE2fGtbbCsyXTw8OHxrW2wrM10sbCs9NDtmb3IoZj0xNjtmPDY0OysrZilPW2ZdPTB8KGUoeD1PW2YtMl0sMTcpXmUoeCwxOSleeD4+PjEwKStPW2YtN10raShPW2YtMTVdKStPW2YtMTZdO3ZhciBBPWgsQz1kLEY9cCxQPWcsVD12LEk9eSxFPW0saj1iLE09dm9pZCAwLF89dm9pZCAwO2ZvcihmPTA7Zjw2NDsrK2YpTT1qK2EoVCkrdChULEksRSkrb1tmXStPW2ZdLF89bihBKStyKEEsQyxGKSxqPUUsRT1JLEk9VCxUPVArTXwwLFA9RixGPUMsQz1BLEE9TStffDA7aD1oK0F8MCxkPWQrQ3wwLHA9cCtGfDAsZz1nK1B8MCx2PXYrVHwwLHk9eStJfDAsbT1tK0V8MCxiPWIranwwfXJldHVybiBuZXcgVWludDhBcnJheShbaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLHA+PjI0JjI1NSxwPj4xNiYyNTUscD4+OCYyNTUsMjU1JnAsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksbT4+MjQmMjU1LG0+PjE2JjI1NSxtPj44JjI1NSwyNTUmbSxiPj4yNCYyNTUsYj4+MTYmMjU1LGI+PjgmMjU1LDI1NSZiXSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyBtKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IG0oMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBtKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IG0oMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgbSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IG0oMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgbSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBtKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IG0oMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgbSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IG0oNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBtKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IG0oMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgbSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IG0oMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyBtKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IG0oMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgbSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IG0oMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBtKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgbSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IG0oMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgbSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBtKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IG0oMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgbSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IG0oMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgbSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBtKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IG0oMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgbSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IG0oMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IG0oNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyBtKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgbSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBtKDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IG0oMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgbSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBtKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IG0oMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBtKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IG0oMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgbSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBtKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgbSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyBtKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IG0oNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgbSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgbSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IG0oNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBtKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgbSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IG0oOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBtKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IG0oMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgbSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBtKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IG0oMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgbSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBtKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgbSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IG0oMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgbSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyBtKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IG0oMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgbSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IG0oMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgbSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBtKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgbSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IG0oMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBtKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyBtKDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBtKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgbSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IG0oMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgbSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBtKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IG0oMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBtKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGMsdSl7dmFyIGwsZixoLGQscCxnLHYseSxiPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Yj8obD1uZXcgbSgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLGY9bmV3IG0oMTY1NDI3MDI1MCw5MTQxNTA2NjMpLGg9bmV3IG0oMjQzODUyOTM3MCw4MTI3MDI5OTkpLGQ9bmV3IG0oMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLHA9bmV3IG0oMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxnPW5ldyBtKDIzOTQxODAyMzEsMTc1MDYwMzAyNSksdj1uZXcgbSgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLHk9bmV3IG0oMTIwMzA2MjgxMywzMjA0MDc1NDI4KSk6KGw9bmV3IG0oMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxmPW5ldyBtKDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksaD1uZXcgbSgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLGQ9bmV3IG0oMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxwPW5ldyBtKDEzNTk4OTMxMTksMjkxNzU2NTEzNyksZz1uZXcgbSgyNjAwODIyOTI0LDcyNTUxMTE5OSksdj1uZXcgbSg1Mjg3MzQ2MzUsNDIxNTM4OTU0NykseT1uZXcgbSgxNTQxNDU5MjI1LDMyNzAzMzIwOSkpO3ZhciB3LGssUz0xMjgqTWF0aC5jZWlsKCh1KzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoUyk7Zm9yKHc9MDt3PHU7Kyt3KXhbd109c1tjKytdO3hbdysrXT0xMjg7Zm9yKHZhciBPPVMtMTY7dzxPOyl4W3crK109MDt4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109MCx4W3crK109dT4+PjI5JjI1NSx4W3crK109dT4+MjEmMjU1LHhbdysrXT11Pj4xMyYyNTUseFt3KytdPXU+PjUmMjU1LHhbdysrXT11PDwzJjI1NTt2YXIgQT1uZXcgQXJyYXkoODApO2Zvcih3PTA7dzw4MDt3KyspQVt3XT1uZXcgbSgwLDApO3ZhciBDLEYsUD1uZXcgbSgwLDApLFQ9bmV3IG0oMCwwKSxJPW5ldyBtKDAsMCksRT1uZXcgbSgwLDApLGo9bmV3IG0oMCwwKSxNPW5ldyBtKDAsMCksXz1uZXcgbSgwLDApLEw9bmV3IG0oMCwwKSxSPW5ldyBtKDAsMCksTj1uZXcgbSgwLDApLEQ9bmV3IG0oMCwwKSxCPW5ldyBtKDAsMCk7Zm9yKHc9MDt3PFM7KXtmb3Ioaz0wO2s8MTY7KytrKUFba10uaGlnaD14W3ddPDwyNHx4W3crMV08PDE2fHhbdysyXTw8OHx4W3crM10sQVtrXS5sb3c9eFt3KzRdPDwyNHx4W3crNV08PDE2fHhbdys2XTw8OHx4W3crN10sdys9ODtmb3Ioaz0xNjtrPDgwOysraylpKEM9QVtrXSxBW2stMl0sQiksQy5hZGQoQVtrLTddKSxhKEQsQVtrLTE1XSxCKSxDLmFkZChEKSxDLmFkZChBW2stMTZdKTtmb3IoUC5hc3NpZ24obCksVC5hc3NpZ24oZiksSS5hc3NpZ24oaCksRS5hc3NpZ24oZCksai5hc3NpZ24ocCksTS5hc3NpZ24oZyksXy5hc3NpZ24odiksTC5hc3NpZ24oeSksaz0wO2s8ODA7KytrKVIuYXNzaWduKEwpLG4oRCxqLEIpLFIuYWRkKEQpLGUoRCxqLE0sXyxCKSxSLmFkZChEKSxSLmFkZChvW2tdKSxSLmFkZChBW2tdKSxyKE4sUCxCKSx0KEQsUCxULEksQiksTi5hZGQoRCksQz1MLEw9XyxfPU0sTT1qLEUuYWRkKFIpLGo9RSxFPUksST1ULFQ9UCxDLmFzc2lnbihSKSxDLmFkZChOKSxQPUM7bC5hZGQoUCksZi5hZGQoVCksaC5hZGQoSSksZC5hZGQoRSkscC5hZGQoaiksZy5hZGQoTSksdi5hZGQoXykseS5hZGQoTCl9cmV0dXJuIGI/KEY9bmV3IFVpbnQ4QXJyYXkoNDgpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSk6KEY9bmV3IFVpbnQ4QXJyYXkoNjQpLGwuY29weVRvKEYsMCksZi5jb3B5VG8oRiw4KSxoLmNvcHlUbyhGLDE2KSxkLmNvcHlUbyhGLDI0KSxwLmNvcHlUbyhGLDMyKSxnLmNvcHlUbyhGLDQwKSx2LmNvcHlUbyhGLDQ4KSx5LmNvcHlUbyhGLDU2KSksRn19KCk7ZnVuY3Rpb24gayhlLHQscil7cmV0dXJuIHcoZSx0LHIsITApfXQuY2FsY3VsYXRlU0hBNTEyPXc7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Zih0aGlzLGUpfXJldHVybiBkKGUsW3trZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19XSksZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGM9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7Yz49MTstLWMpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHU9MDt1PDE2OysrdSlpW3VdPXRoaXMuX2ludl9zW2lbdV1dO2Zvcih2YXIgbD0wLGY9MTYqYztsPDE2OysrbCwrK2YpaVtsXV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLGc9dGhpcy5fbWl4W2lbaCsyXV0sdj10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjReZz4+PjE2Xmc8PDE2XnY+Pj4yNF52PDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHk9MDt5PDE2OysreSlpW3ldPXRoaXMuX2ludl9zW2lbeV1dLGlbeV1ePXRbeV07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBjPTE7Yzx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247YysrKXtmb3IodmFyIHU9MDt1PDE2OysrdSlvW3VdPWlbb1t1XV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgbD0wO2w8MTY7bCs9NCl7dmFyIGY9b1tsKzBdLGg9b1tsKzFdLGQ9b1tsKzJdLHA9b1tsKzNdO3I9Zl5oXmRecCxvW2wrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1tsKzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bbCsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW2wrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBnPTAsdj0xNipjO2c8MTY7KytnLCsrdilvW2ddXj10W3ZdfWZvcih2YXIgeT0wO3k8MTY7Kyt5KW9beV09aVtvW3ldXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciBtPTAsYj10aGlzLl9rZXlTaXplO208MTY7KyttLCsrYilvW21dXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgYz10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSx1PTA7dTwxNjsrK3UpY1t1XV49b1t1XTtvPW4saS5wdXNoKGMpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGw9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aS5hdCgtMSksaD1mWzE1XTtpZihoPD0xNil7Zm9yKHZhciBkPTE1LHA9MTYtaDtkPj1wOy0tZClpZihmW2RdIT09aCl7aD0wO2JyZWFrfWwtPWgsaVtpLmxlbmd0aC0xXT1mLnN1YmFycmF5KDAsMTYtaCl9fWZvcih2YXIgZz1uZXcgVWludDhBcnJheShsKSx2PTAseT0wLG09aS5sZW5ndGg7djxtOysrdix5Kz0xNilnLnNldChpW3ZdLHkpO3JldHVybiBnfX0se2tleToiZGVjcnlwdEJsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLG49ZS5sZW5ndGgsYT10aGlzLmJ1ZmZlcixpPXRoaXMuYnVmZmVyUG9zaXRpb247aWYocil0aGlzLml2PXI7ZWxzZXtmb3IodmFyIG89MDtpPDE2JiZvPG47KytvLCsraSlhW2ldPWVbb107aWYoaTwxNilyZXR1cm4gdGhpcy5idWZmZXJMZW5ndGg9aSxuZXcgVWludDhBcnJheSgwKTt0aGlzLml2PWEsZT1lLnN1YmFycmF5KDE2KX1yZXR1cm4gdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5kZWNyeXB0QmxvY2s9dGhpcy5fZGVjcnlwdEJsb2NrMix0aGlzLmRlY3J5cHRCbG9jayhlLHQpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPXRoaXMuYnVmZmVyLGE9dGhpcy5idWZmZXJQb3NpdGlvbixpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKHZhciBvPTA7bzxyOysrbylpZihuW2FdPWVbb10sISgrK2E8MTYpKXtmb3IodmFyIHM9MDtzPDE2OysrcyluW3NdXj10W3NdO3ZhciBjPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9YyxpLnB1c2goYyksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHU9MTYqaS5sZW5ndGgsbD1uZXcgVWludDhBcnJheSh1KSxmPTAsaD0wLGQ9aS5sZW5ndGg7ZjxkOysrZixoKz0xNilsLnNldChpW2ZdLGgpO3JldHVybiBsfX1dKSxlfSgpLE89ZnVuY3Rpb24oZSl7byhyLGUpO3ZhciB0PWMocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCxuLl9rZXlTaXplPTE2MCxuLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksbi5fa2V5PW4uX2V4cGFuZEtleShlKSxufXJldHVybiBkKHIsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj10aGlzLl9yY29uLG49bmV3IFVpbnQ4QXJyYXkoMTc2KTtuLnNldChlKTtmb3IodmFyIGE9MTYsaT0xO2E8MTc2OysraSl7dmFyIG89blthLTNdLHM9blthLTJdLGM9blthLTFdLHU9blthLTRdO289dFtvXSxzPXRbc10sYz10W2NdLHU9dFt1XSxvXj1yW2ldO2Zvcih2YXIgbD0wO2w8NDsrK2wpblthXT1vXj1uW2EtMTZdLG5bKythXT1zXj1uW2EtMTZdLG5bKythXT1jXj1uW2EtMTZdLG5bKythXT11Xj1uW2EtMTZdLGErK31yZXR1cm4gbn19XSkscn0oeCk7dC5BRVMxMjhDaXBoZXI9Tzt2YXIgQT1mdW5jdGlvbihlKXtvKHIsZSk7dmFyIHQ9YyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMpKS5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LG4uX2tleVNpemU9MjI0LG4uX2tleT1uLl9leHBhbmRLZXkoZSksbn1yZXR1cm4gZChyLFt7a2V5OiJfZXhwYW5kS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zLHI9bmV3IFVpbnQ4QXJyYXkoMjQwKTtyLnNldChlKTtmb3IodmFyIG4sYSxpLG8scz0xLGM9MzIsdT0xO2M8MjQwOysrdSl7YyUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSk6YyUzMj09MCYmKG49cltjLTNdLGE9cltjLTJdLGk9cltjLTFdLG89cltjLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLG89dFtvXSxuXj1zLChzPDw9MSk+PTI1NiYmKHM9MjU1JigyN15zKSkpO2Zvcih2YXIgbD0wO2w8NDsrK2wpcltjXT1uXj1yW2MtMzJdLHJbKytjXT1hXj1yW2MtMzJdLHJbKytjXT1pXj1yW2MtMzJdLHJbKytjXT1vXj1yW2MtMzJdLGMrK31yZXR1cm4gcn19XSkscn0oeCk7dC5BRVMyNTZDaXBoZXI9QTt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGQoZSxbe2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKSxpLnNldCh0LGUubGVuZ3RoKSxpLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTt2YXIgbz1iKGksMCxpLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJjaGVja1VzZXJQYXNzd29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfX0se2tleToiZ2V0T3duZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpLGEuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO3ZhciBpPWIoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHtrZXk6ImdldFVzZXJLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19XSksZX0oKTt0LlBERjE3PUM7dmFyIEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtmb3IodmFyIG49Yih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLGE9WzBdLGk9MDtpPDY0fHxhLmF0KC0xKT5pLTMyOyl7dmFyIG89ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheShvKSxjPTA7cy5zZXQoZSxjKSxjKz1lLmxlbmd0aCxzLnNldChuLGMpLGMrPW4ubGVuZ3RoLHMuc2V0KHIsYyk7Zm9yKHZhciB1PW5ldyBVaW50OEFycmF5KDY0Km8pLGw9MCxmPTA7bDw2NDtsKyssZis9byl1LnNldChzLGYpO3ZhciBoPShhPW5ldyBPKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQodSxuLnN1YmFycmF5KDE2LDMyKSkpLnNsaWNlKDAsMTYpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCklMzswPT09aD9uPWIoYSwwLGEubGVuZ3RoKToxPT09aD9uPWsoYSwwLGEubGVuZ3RoKToyPT09aCYmKG49dyhhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2YodGhpcyx0KX1yZXR1cm4gZCh0LFt7a2V5OiJoYXNoIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodCxyLG4pfX0se2tleToiY2hlY2tPd25lclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSxpKXt2YXIgbz1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7by5zZXQodCwwKSxvLnNldChyLHQubGVuZ3RoKSxvLnNldChhLHQubGVuZ3RoK3IubGVuZ3RoKTt2YXIgcz1lKHQsbyxhKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxpKX19LHtrZXk6ImNoZWNrVXNlclBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbih0LHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7aS5zZXQodCwwKSxpLnNldChyLHQubGVuZ3RoKTt2YXIgbz1lKHQsaSxbXSk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKG8sYSl9fSx7a2V5OiJnZXRPd25lcktleSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrNTYpO2kuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCk7dmFyIG89ZSh0LGksbik7cmV0dXJuIG5ldyBBKG8pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fSx7a2V5OiJnZXRVc2VyS2V5Iix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrOCk7YS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKTt2YXIgaT1lKHQsYSxbXSk7cmV0dXJuIG5ldyBBKGkpLmRlY3J5cHRCbG9jayhuLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fV0pLHR9KCl9KCk7dC5QREYyMD1GO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2YodGhpcyxlKSx0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPXQsdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj1yfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9fSx7a2V5OiJkZWNyeXB0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcixyPSgwLG4uc3RyaW5nVG9CeXRlcykoZSk7cmV0dXJuIHI9dC5kZWNyeXB0QmxvY2sociwhMCksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19LHtrZXk6ImVuY3J5cHRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTt2YXIgYT1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhKTtlbHNlIGZvcih2YXIgaT0wO2k8MTY7aSsrKWFbaV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7dmFyIG89KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtvPXQuZW5jcnlwdChvLGEpO3ZhciBzPW5ldyBVaW50OEFycmF5KDE2K28ubGVuZ3RoKTtyZXR1cm4gcy5zZXQoYSkscy5zZXQobywxNiksKDAsbi5ieXRlc1RvU3RyaW5nKShzKX12YXIgYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiBjPXQuZW5jcnlwdChjKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpfX1dKSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxjKXt2YXIgdSxsLGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IobD1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDxsOysrZCloW2RdPXJbZF07Zm9yKHU9MDtkPDMyOyloW2QrK109ZVt1KytdO2Zvcih1PTAsbD1uLmxlbmd0aDt1PGw7Kyt1KWhbZCsrXT1uW3VdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsdT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTtvPj00JiYhYyYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBnPXkoaCwwLGQpLHY9cz4+MztpZihvPj0zKWZvcih1PTA7dTw1MDsrK3UpZz15KGcsMCx2KTt2YXIgbSxiPWcuc3ViYXJyYXkoMCx2KTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IodT0wLGw9dC5sZW5ndGg7dTxsOysrdSloW2QrK109dFt1XTttPW5ldyBwKGIpLmVuY3J5cHRCbG9jayh5KGgsMCxkKSksbD1iLmxlbmd0aDt2YXIgdz1uZXcgVWludDhBcnJheShsKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKHZhciBrPTA7azxsOysrayl3W2tdPWJba11edTttPW5ldyBwKHcpLmVuY3J5cHRCbG9jayhtKX1mb3IodT0wLGw9bS5sZW5ndGg7dTxsOysrdSlpZihhW3VdIT09bVt1XSlyZXR1cm4gbnVsbH1lbHNlIGZvcih1PTAsbD0obT1uZXcgcChiKS5lbmNyeXB0QmxvY2soZSkpLmxlbmd0aDt1PGw7Kyt1KWlmKGFbdV0hPT1tW3VdKXJldHVybiBudWxsO3JldHVybiBifXZhciByPWEuTmFtZS5nZXQoIklkZW50aXR5Iik7ZnVuY3Rpb24gaShlLHQscil7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGk9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrOSksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24paVtuXT1yW25dO3JldHVybiBpW24rK109MjU1JmUsaVtuKytdPWU+PjgmMjU1LGlbbisrXT1lPj4xNiYyNTUsaVtuKytdPTI1NSZ0LGlbbisrXT10Pj44JjI1NSxhJiYoaVtuKytdPTExNSxpW24rK109NjUsaVtuKytdPTEwOCxpW24rK109ODQpLHkoaSwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oci5sZW5ndGgrNSwxNikpfWZ1bmN0aW9uIG8oZSx0LHIsbyxzKXtpZighKHQgaW5zdGFuY2VvZiBhLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO3ZhciBjLHU9ZS5nZXQodC5uYW1lKTtpZihudWxsIT11JiYoYz11LmdldCgiQ0ZNIikpLCFjfHwiTm9uZSI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChpKHIsbyxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPKGkocixvLHMsITApKX07aWYoIkFFU1YzIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEocyl9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoaSxvLGMpe2YodGhpcyxzKTt2YXIgdT1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKSh1LCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPXUubmFtZSx0aGlzLmRpY3Q9aTt2YXIgbD1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHwxIT09bCYmMiE9PWwmJjQhPT1sJiY1IT09bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1sO3ZhciBoPWkuZ2V0KCJMZW5ndGgiKTtpZighaClpZihsPD0zKWg9NDA7ZWxzZXt2YXIgZD1pLmdldCgiQ0YiKSxnPWkuZ2V0KCJTdG1GIik7aWYoZCBpbnN0YW5jZW9mIGEuRGljdCYmZyBpbnN0YW5jZW9mIGEuTmFtZSl7ZC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dmFyIHY9ZC5nZXQoZy5uYW1lKTsoaD12JiZ2LmdldCgiTGVuZ3RoIil8fDEyOCk8NDAmJihoPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGgpfHxoPDQwfHxoJTghPTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBtPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMCwzMiksYj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSxrPWkuZ2V0KCJSIiksUz0oND09PWx8fDU9PT1sKSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9Uzt2YXIgeCxPLEE9KDAsbi5zdHJpbmdUb0J5dGVzKShvKTtpZihjKXtpZig2PT09ayl0cnl7Yz0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykoYyl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfXg9KDAsbi5zdHJpbmdUb0J5dGVzKShjKX1pZig1IT09bClPPXQoQSx4LG0sYix3LGssaCxTKTtlbHNle3ZhciBQPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoMzIsNDApLFQ9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiTyIpKS5zdWJhcnJheSg0MCw0OCksST0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgzMiw0MCksaj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVIikpLnN1YmFycmF5KDQwLDQ4KSxNPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk9FIikpLF89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVUUiKSk7KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiUGVybXMiKSksTz1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMsYyx1LGwsZil7aWYodCl7dmFyIGg9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxoKX1lbHNlIHQ9W107dmFyIGQ7cmV0dXJuKGQ9Nj09PWU/bmV3IEY6bmV3IEMpLmNoZWNrVXNlclBhc3N3b3JkKHQscyxvKT9kLmdldFVzZXJLZXkodCxjLGwpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LG4saSxyKT9kLmdldE93bmVyS2V5KHQsYSxpLHUpOm51bGx9KGsseCxtLFAsVCxJLGIsRSxqLE0sXyl9aWYoIU8mJiFjKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJObyBwYXNzd29yZCBnaXZlbiIsbi5QYXNzd29yZFJlc3BvbnNlcy5ORUVEX1BBU1NXT1JEKTtpZighTyYmYyl7dmFyIEw9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KDMyKSxvPTAscz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bzxzOysrbylpW29dPXRbb107Zm9yKHZhciBjPTA7bzwzMjspaVtvKytdPWVbYysrXTt2YXIgdSxsPXkoaSwwLG8pLGY9YT4+MztpZihuPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD15KGwsMCxsLmxlbmd0aCk7aWYobj49Myl7dT1yO3ZhciBoPW5ldyBVaW50OEFycmF5KGYpO2ZvcihjPTE5O2M+PTA7Yy0tKXtmb3IodmFyIGQ9MDtkPGY7KytkKWhbZF09bFtkXV5jO3U9bmV3IHAoaCkuZW5jcnlwdEJsb2NrKHUpfX1lbHNlIHU9bmV3IHAobC5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIHV9KHgsbSxrLGgpO089dChBLEwsbSxiLHcsayxoLFMpfWlmKCFPKXRocm93IG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKCJJbmNvcnJlY3QgUGFzc3dvcmQiLG4uUGFzc3dvcmRSZXNwb25zZXMuSU5DT1JSRUNUX1BBU1NXT1JEKTtpZih0aGlzLmVuY3J5cHRpb25LZXk9TyxsPj00KXt2YXIgUj1pLmdldCgiQ0YiKTtSIGluc3RhbmNlb2YgYS5EaWN0JiYoUi5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9Uix0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19cmV0dXJuIGQocyxbe2tleToiY3JlYXRlQ2lwaGVyVHJhbnNmb3JtIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgUChvKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpLG8odGhpcy5jZix0aGlzLnN0bWYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSkpO3ZhciByPWkoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksbj1mdW5jdGlvbigpe3JldHVybiBuZXcgcChyKX07cmV0dXJuIG5ldyBQKG4sbil9fV0pLHN9KCk7cmV0dXJuIHN9KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PVR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxpKGUsdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbyhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcz1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaShlLHQpfShsLGUpO3ZhciB0LHIscyxjLHU9KHM9bCxjPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLHQ9byhzKTtpZihjKXt2YXIgcj1vKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QodCxhcmd1bWVudHMscil9ZWxzZSBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBsKGUsdCxyKXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxsKSwobj11LmNhbGwodGhpcyx0KSkuc3RyPWUsbi5kaWN0PWUuZGljdCxuLmRlY3J5cHQ9cixuLm5leHRDaHVuaz1udWxsLG4uaW5pdGlhbGl6ZWQ9ITEsbn1yZXR1cm4gdD1sLChyPVt7a2V5OiJyZWFkQmxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5pbml0aWFsaXplZD9lPXRoaXMubmV4dENodW5rOihlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMiksdGhpcy5pbml0aWFsaXplZD0hMCksZSYmMCE9PWUubGVuZ3RoKXt0aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO3ZhciB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7dmFyIHI9dGhpcy5idWZmZXJMZW5ndGgsbj1yK2UubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKG4pLnNldChlLHIpLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH19XSkmJmEodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbH0ocigxNDgpLkRlY29kZVN0cmVhbSk7dC5EZWNyeXB0U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYXRhbG9nPXZvaWQgMDt2YXIgbj1yKDEzNSksYT1yKDIpLGk9cigxMzQpLG89cigxOTkpLHM9cigxMzYpLGM9cigyMDApLHU9cigxNDMpLGw9cigyMDEpLGY9cigxODgpLGg9cigyMDIpLGQ9cigyMDMpO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIHA9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHAoZSl9ZnVuY3Rpb24gZygpe2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0sYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPWEuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixvPWEuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1hLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtjKHt9LCIiKX1jYXRjaChlKXtjPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiB1KGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgaD90Omgsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGwoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9dTt2YXIgZj17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtjKHksaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsaSkmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8scyl7dmFyIGM9bChlW25dLGUsaSk7aWYoInRocm93IiE9PWMudHlwZSl7dmFyIHU9Yy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cChmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxzKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7dS52YWx1ZT1lLG8odSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8scyl9KSl9cyhjLmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWwoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZjt2YXIgYT1sKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZjt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxmKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGYpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW2ldO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZC5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWModixzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09ZHx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsYyhlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksYyhTLnByb3RvdHlwZSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyh1KHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksYyh3LHMsIkdlbmVyYXRvciIpLGModyxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGModywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19LGV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7dihpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7dihpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9dyhlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PXAoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1wKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09cChhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24geChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSksQXJyYXkuaXNBcnJheShlKT9lOm51bGx9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnhyZWY9cix0aGlzLl9jYXREaWN0PXIuZ2V0Q2F0YWxvZ09iaigpLCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdCx0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsLHRoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwLHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXAsdGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyBmLkdsb2JhbEltYWdlQ2FjaGUsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0fXZhciB0LHIsdixPLEEsQyxGO3JldHVybiB0PWUscj1be2tleToidmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihuLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsYS53YXJuKSgiSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAiLmNvbmNhdChlLm5hbWUpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9fSx7a2V5OiJsYW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9fSx7a2V5OiJuZWVkc1JlbmRlcmluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX19LHtrZXk6ImNvbGxlY3Rpb24iLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e3ZhciB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9fSx7a2V5OiJhY3JvRm9ybSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfX0se2tleToiYWNyb0Zvcm1SZWYiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7dmFyIHQ9bnVsbDt0cnl7dmFyIHI9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxvPXRoaXMueHJlZi5mZXRjaChlLHIpO2lmKG8gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJm8uZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGM9by5kaWN0LmdldCgiVHlwZSIpLHU9by5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShjLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkodSwiWE1MIikpe3ZhciBsPSgwLGEuc3RyaW5nVG9VVEY4U3RyaW5nKShvLmdldFN0cmluZygpKTtsJiYodD1uZXcgaC5NZXRhZGF0YVBhcnNlcihsKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX19LHtrZXk6Im1hcmtJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9fSx7a2V5OiJfcmVhZE1hcmtJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKHZhciByIGluIHQpe3ZhciBuPWUuZ2V0KHIpOyJib29sZWFuIj09dHlwZW9mIG4mJih0W3JdPW4pfXJldHVybiB0fX0se2tleToic3RydWN0VHJlZVJvb3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9fSx7a2V5OiJfcmVhZFN0cnVjdFRyZWVSb290Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IGQuU3RydWN0VHJlZVJvb3QoZSk7cmV0dXJuIHQuaW5pdCgpLHR9fSx7a2V5OiJ0b3BsZXZlbFBhZ2VzRGljdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJfcmVhZERvY3VtZW50T3V0bGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2lmKCEoKHQ9dC5nZXRSYXcoIkZpcnN0IikpaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuIG51bGw7dmFyIHI9e2l0ZW1zOltdfSxuPVt7b2JqOnQscGFyZW50OnJ9XSxvPW5ldyBpLlJlZlNldDtvLnB1dCh0KTtmb3IodmFyIHM9dGhpcy54cmVmLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO24ubGVuZ3RoPjA7KXt2YXIgbD1uLnNoaWZ0KCksZj1zLmZldGNoSWZSZWYobC5vYmopO2lmKG51bGwhPT1mKXtpZighZi5oYXMoIlRpdGxlIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO3ZhciBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZixyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTt2YXIgZD1mLmdldCgiVGl0bGUiKSxwPWYuZ2V0KCJGIil8fDAsZz1mLmdldEFycmF5KCJDIiksdj1mLmdldCgiQ291bnQiKSx5PWM7IUFycmF5LmlzQXJyYXkoZyl8fDMhPT1nLmxlbmd0aHx8MD09PWdbMF0mJjA9PT1nWzFdJiYwPT09Z1syXXx8KHk9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihnLDApKTt2YXIgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6eSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKHYpP3Y6dm9pZCAwLGJvbGQ6ISEoMiZwKSxpdGFsaWM6ISEoMSZwKSxpdGVtczpbXX07bC5wYXJlbnQuaXRlbXMucHVzaChtKSwodD1mLmdldFJhdygiRmlyc3QiKSlpbnN0YW5jZW9mIGkuUmVmJiYhby5oYXModCkmJihuLnB1c2goe29iajp0LHBhcmVudDptfSksby5wdXQodCkpLCh0PWYuZ2V0UmF3KCJOZXh0IikpaW5zdGFuY2VvZiBpLlJlZiYmIW8uaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6bC5wYXJlbnR9KSxvLnB1dCh0KSl9fXJldHVybiByLml0ZW1zLmxlbmd0aD4wP3IuaXRlbXM6bnVsbH19LHtrZXk6InBlcm1pc3Npb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX19LHtrZXk6Il9yZWFkUGVybWlzc2lvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDt2YXIgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz1NYXRoLnBvdygyLDMyKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gYS5QZXJtaXNzaW9uRmxhZyl7dmFyIG89YS5QZXJtaXNzaW9uRmxhZ1tuXTt0Jm8mJnIucHVzaChvKX1yZXR1cm4gcn19LHtrZXk6Im9wdGlvbmFsQ29udGVudENvbmZpZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO3ZhciByPXQuZ2V0KCJEIik7aWYoIXIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7dmFyIG89dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShvKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTt2YXIgcyxjPVtdLHU9W10sbD1iKG8pO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe3UucHVzaChmKTt2YXIgaD10aGlzLnhyZWYuZmV0Y2hJZlJlZihmKTtjLnB1c2goe2lkOmYudG9TdHJpbmcoKSxuYW1lOiJzdHJpbmciPT10eXBlb2YgaC5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiTmFtZSIpKTpudWxsLGludGVudDoic3RyaW5nIj09dHlwZW9mIGguZ2V0KCJJbnRlbnQiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoLmdldCgiSW50ZW50IikpOm51bGx9KX19fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfShlPXRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcocix1KSkuZ3JvdXBzPWN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfX0se2tleToiX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXt2YXIgcj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbixhPWIoZSk7dHJ5e2ZvcihhLnMoKTshKG49YS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlO28gaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhvKSYmci5wdXNoKG8udG9TdHJpbmcoKSl9fWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfX1yZXR1cm4gcn1mdW5jdGlvbiBuKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO3ZhciBuLGE9W10scz1iKGUpO3RyeXtmb3Iocy5zKCk7IShuPXMubigpKS5kb25lOyl7dmFyIHU9bi52YWx1ZTtpZih1IGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXModSkpYy5wdXQodSksYS5wdXNoKHUudG9TdHJpbmcoKSk7ZWxzZXt2YXIgbD1vKHUscik7bCYmYS5wdXNoKGwpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYocj4wKXJldHVybiBhO3ZhciBmLGg9W10sZD1iKHQpO3RyeXtmb3IoZC5zKCk7IShmPWQubigpKS5kb25lOyl7dmFyIHA9Zi52YWx1ZTtjLmhhcyhwKXx8aC5wdXNoKHAudG9TdHJpbmcoKSl9fWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfXJldHVybiBoLmxlbmd0aCYmYS5wdXNoKHtuYW1lOm51bGwsb3JkZXI6aH0pLGF9ZnVuY3Rpb24gbyhlLHQpe2lmKCsrdD51KXJldHVybigwLGEud2FybikoInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpLG51bGw7dmFyIHI9cy5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO3ZhciBpPXMuZmV0Y2hJZlJlZihyWzBdKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpcmV0dXJuIG51bGw7dmFyIG89bihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxhLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfXZhciBzPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCx1PTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19fSx7a2V5OiJzZXRBY3R1YWxOdW1QYWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfX0se2tleToiaGFzQWN0dWFsTnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9fSx7a2V5OiJfcGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9wYWdlc0NvdW50IixlKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fX0se2tleToiZGVzdGluYXRpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByLG49YihlLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT14KHNbMV0pO3UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGMpXT11KX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPXgocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIG8uTmFtZVRyZWUpe3ZhciByPXgodC5nZXQoZSkpO2lmKHIpcmV0dXJuIHI7dmFyIG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIHM9eCh0LmdldChlKSk7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH19LHtrZXk6Il9yZWFkRGVzdHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfX0se2tleToicGFnZUxhYmVscyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfX0se2tleToiX3JlYWRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwscz0iIixjPW5ldyBvLk51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpLHU9IiIsbD0xLGY9MCxoPXRoaXMubnVtUGFnZXM7ZjxoO2YrKyl7dmFyIGQ9Yy5nZXQoZik7aWYodm9pZCAwIT09ZCl7aWYoIShkIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoZC5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShkLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKGQuaGFzKCJTIikpe3ZhciBwPWQuZ2V0KCJTIik7aWYoIShwIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPXAubmFtZX1lbHNlIHI9bnVsbDtpZihkLmhhcygiUCIpKXt2YXIgZz1kLmdldCgiUCIpO2lmKCJzdHJpbmciIT10eXBlb2YgZyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7cz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShnKX1lbHNlIHM9IiI7aWYoZC5oYXMoIlN0Iikpe3ZhciB2PWQuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih2KSYmdj49MSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bD12fWVsc2UgbD0xfXN3aXRjaChyKXtjYXNlIkQiOnU9bDticmVhaztjYXNlIlIiOmNhc2UiciI6dT0oMCxuLnRvUm9tYW5OdW1lcmFscykobCwiciI9PT1yKTticmVhaztjYXNlIkEiOmNhc2UiYSI6dmFyIHk9ImEiPT09cj85Nzo2NSxtPWwtMTt1PVN0cmluZy5mcm9tQ2hhckNvZGUoeSttJTI2KS5yZXBlYXQoTWF0aC5mbG9vcihtLzI2KSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO3U9IiJ9dFtmXT1zK3UsbCsrfXJldHVybiB0fX0se2tleToicGFnZUxheW91dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKSx0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfX0se2tleToicGFnZU1vZGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfX0se2tleToidmlld2VyUHJlZmVyZW5jZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl9jYXREaWN0LmdldCgiVmlld2VyUHJlZmVyZW5jZXMiKTtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7dmFyIHIsbj1udWxsLG89Yih0LmdldEtleXMoKSk7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgcz1yLnZhbHVlLGM9dC5nZXQocyksdT12b2lkIDA7c3dpdGNoKHMpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBjJiYodT1jKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihjIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChjLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6dT1jLm5hbWU7YnJlYWs7ZGVmYXVsdDp1PSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYoYyBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goYy5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnU9Yy5uYW1lO2JyZWFrO2RlZmF1bHQ6dT0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGMgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGMubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjp1PWMubmFtZTticmVhaztkZWZhdWx0OnU9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJTI9PTAmJmMuZXZlcnkoKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmdD4wJiYoMD09PXJ8fHQ+PW5bci0xXSkmJnQ8PWUubnVtUGFnZXN9KSkmJih1PWMpO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPjAmJih1PWMpO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQocywiLiIpKTtjb250aW51ZX12b2lkIDAhPT11PyhufHwobj1PYmplY3QuY3JlYXRlKG51bGwpKSxuW3NdPXUpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQocywnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChjLCIuIikpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG4pfX0se2tleToib3BlbkFjdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodCBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpO24uc2V0KCJBIix0KTt2YXIgbz17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0Om4scmVzdWx0T2JqOm99KSxBcnJheS5pc0FycmF5KG8uZGVzdCk/ci5kZXN0PW8uZGVzdDpvLmFjdGlvbiYmKHIuYWN0aW9uPW8uYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyLmRlc3Q9dCk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLGEub2JqZWN0U2l6ZSkocik+MD9yOm51bGwpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpLHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXt2YXIgcixuPWIobmV3IG8uTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdLGY9bmV3IGwuRmlsZVNwZWModSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyldPWYuc2VyaWFsaXphYmxlfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImF0dGFjaG1lbnRzIix0KX19LHtrZXk6InhmYUltYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7dmFyIHIsbj1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpLmdldEFsbCgpKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBzPW0oci52YWx1ZSwyKSxjPXNbMF0sdT1zWzFdO3R8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoYyksdSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX19LHtrZXk6Il9jb2xsZWN0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlLHIpe2lmKHIgaW5zdGFuY2VvZiBpLkRpY3QmJigwLGkuaXNOYW1lKShyLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe3ZhciBuPXIuZ2V0KCJKUyIpO2lmKG4gaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pbj1uLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybjtudWxsPT09dCYmKHQ9bmV3IE1hcCksbj0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShuKS5yZXBsYWNlKC9cdTAwMDAvZywiIiksdC5zZXQoZSxuKX19aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG4sYz1iKG5ldyBvLk5hbWVUcmVlKGUuZ2V0UmF3KCJKYXZhU2NyaXB0IiksdGhpcy54cmVmKS5nZXRBbGwoKSk7dHJ5e2ZvcihjLnMoKTshKG49Yy5uKCkpLmRvbmU7KXt2YXIgdT1tKG4udmFsdWUsMiksbD11WzBdLGY9dVsxXTtyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGwpLGYpfX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19dmFyIGg9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gaCYmcigiT3BlbkFjdGlvbiIsaCksdH19LHtrZXk6ImphdmFTY3JpcHQiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsdD9mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBrKGUpfShlPXQudmFsdWVzKCkpfHxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHx3KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpOm51bGwpfX0se2tleToianNBY3Rpb25zIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpLHQ9KDAsbi5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3QsYS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIHIsaT1iKGUpO3RyeXtmb3IoaS5zKCk7IShyPWkubigpKS5kb25lOyl7dmFyIG89bShyLnZhbHVlLDIpLHM9b1swXSxjPW9bMV07cyBpbiB0P3Rbc10ucHVzaChjKTp0W3NdPVtjXX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLHQpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTooRj15KGcoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG87cmV0dXJuIGcoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgMjpuPWUuc2VudCxhPWIobiksZS5wcmV2PTQsYS5zKCk7Y2FzZSA2OmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTM7YnJlYWt9aWYoKG89aS52YWx1ZSkubG9hZGVkTmFtZSE9PXQpe2UubmV4dD0xMTticmVha31yZXR1cm4gby5mYWxsYmFjayhyKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMTplLm5leHQ9NjticmVhaztjYXNlIDEzOmUubmV4dD0xODticmVhaztjYXNlIDE1OmUucHJldj0xNSxlLnQwPWUuY2F0Y2goNCksYS5lKGUudDApO2Nhc2UgMTg6cmV0dXJuIGUucHJldj0xOCxhLmYoKSxlLmZpbmlzaCgxOCk7Y2FzZSAyMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzQsMTUsMTgsMjFdXSl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNsZWFudXAiLHZhbHVlOihDPXkoZygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpPWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PWkubGVuZ3RoPjAmJnZvaWQgMCE9PWlbMF0mJmlbMF0sKDAsYy5jbGVhckdsb2JhbENhY2hlcykoKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIodCksdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKSx0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCksdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCksZS5uZXh0PTgsUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Nhc2UgODpyPWUuc2VudCxuPWIocik7dHJ5e2ZvcihuLnMoKTshKGE9bi5uKCkpLmRvbmU7KWRlbGV0ZSBhLnZhbHVlLmRpY3QuY2FjaGVLZXl9Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6KEE9eShnKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8scyxjLHUsbCxmLGgsZCxwLHYseSxtLGIsdztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnI9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLG49bmV3IGkuUmVmU2V0LChvPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpKWluc3RhbmNlb2YgaS5SZWYmJm4ucHV0KG8pLHM9dGhpcy54cmVmLGM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsdT10aGlzLnBhZ2VJbmRleENhY2hlLGw9MDtjYXNlIDY6aWYoIXIubGVuZ3RoKXtlLm5leHQ9Njc7YnJlYWt9aWYoISgoZj1yLnBvcCgpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9MzQ7YnJlYWt9aWYoISgoaD1jLmdldChmKSk+PTAmJmwraDw9dCkpe2UubmV4dD0xMzticmVha31yZXR1cm4gbCs9aCxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgMTM6aWYoIW4uaGFzKGYpKXtlLm5leHQ9MTU7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpO2Nhc2UgMTU6cmV0dXJuIG4ucHV0KGYpLGUubmV4dD0xOCxzLmZldGNoQXN5bmMoZik7Y2FzZSAxODppZighKChkPWUuc2VudClpbnN0YW5jZW9mIGkuRGljdCkpe2UubmV4dD0zMjticmVha31pZighKChwPWQuZ2V0UmF3KCJUeXBlIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5uZXh0PTI0LHMuZmV0Y2hBc3luYyhwKTtjYXNlIDI0OnA9ZS5zZW50O2Nhc2UgMjU6aWYoISgwLGkuaXNOYW1lKShwLCJQYWdlIikmJmQuaGFzKCJLaWRzIikpe2UubmV4dD0zMjticmVha31pZihjLmhhcyhmKXx8Yy5wdXQoZiwxKSx1LmhhcyhmKXx8dS5wdXQoZixsKSxsIT09dCl7ZS5uZXh0PTMwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixbZCxmXSk7Y2FzZSAzMDpyZXR1cm4gbCsrLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzMjpyZXR1cm4gci5wdXNoKGQpLGUuYWJydXB0KCJjb250aW51ZSIsNik7Y2FzZSAzNDppZihmIGluc3RhbmNlb2YgaS5EaWN0KXtlLm5leHQ9MzY7YnJlYWt9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjYXNlIDM2OmlmKHY9Zi5vYmpJZCwhKCh5PWYuZ2V0UmF3KCJDb3VudCIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NDI7YnJlYWt9cmV0dXJuIGUubmV4dD00MSxzLmZldGNoQXN5bmMoeSk7Y2FzZSA0MTp5PWUuc2VudDtjYXNlIDQyOmlmKCEoTnVtYmVyLmlzSW50ZWdlcih5KSYmeT49MCkpe2UubmV4dD00NzticmVha31pZih2JiYhYy5oYXModikmJmMucHV0KHYseSksIShsK3k8PXQpKXtlLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGwrPXksZS5hYnJ1cHQoImNvbnRpbnVlIiw2KTtjYXNlIDQ3OmlmKCEoKG09Zi5nZXRSYXcoIktpZHMiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUyO2JyZWFrfXJldHVybiBlLm5leHQ9NTEscy5mZXRjaEFzeW5jKG0pO2Nhc2UgNTE6bT1lLnNlbnQ7Y2FzZSA1MjppZihBcnJheS5pc0FycmF5KG0pKXtlLm5leHQ9NjQ7YnJlYWt9aWYoISgoYj1mLmdldFJhdygiVHlwZSIpKWluc3RhbmNlb2YgaS5SZWYpKXtlLm5leHQ9NTg7YnJlYWt9cmV0dXJuIGUubmV4dD01NyxzLmZldGNoQXN5bmMoYik7Y2FzZSA1NzpiPWUuc2VudDtjYXNlIDU4OmlmKCEoMCxpLmlzTmFtZSkoYiwiUGFnZSIpJiZmLmhhcygiS2lkcyIpKXtlLm5leHQ9NjM7YnJlYWt9aWYobCE9PXQpe2UubmV4dD02MTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsW2YsbnVsbF0pO2Nhc2UgNjE6cmV0dXJuIGwrKyxlLmFicnVwdCgiY29udGludWUiLDYpO2Nhc2UgNjM6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIik7Y2FzZSA2NDpmb3Iodz1tLmxlbmd0aC0xO3c+PTA7dy0tKXIucHVzaChtW3ddKTtlLm5leHQ9NjticmVhaztjYXNlIDY3OnRocm93IG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdCh0LCIgbm90IGZvdW5kLiIpKTtjYXNlIDY4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldEFsbFBhZ2VEaWN0cyIsdmFsdWU6KE89eShnKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbyxzLGMsdSxsLGYsaCxkLHAsdix5LG0sYix3LGssUyx4PWFyZ3VtZW50cztyZXR1cm4gZygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnA9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG4uWFJlZkVudHJ5RXhjZXB0aW9uJiYhdCl0aHJvdyBlO3QmJnImJjA9PT1oJiYoKDAsYS53YXJuKSgnZ2V0QWxsUGFnZURpY3RzIC0gU2tpcHBpbmcgaW52YWxpZCBmaXJzdCBwYWdlOiAiJy5jb25jYXQoZSwnIi4nKSksZT1pLkRpY3QuZW1wdHkpLHUuc2V0KGgrKyxbZSxudWxsXSl9LGQ9ZnVuY3Rpb24oZSx0KXt0JiYhZi5oYXModCkmJmYucHV0KHQsaCksdS5zZXQoaCsrLFtlLHRdKX0sdD14Lmxlbmd0aD4wJiZ2b2lkIDAhPT14WzBdJiZ4WzBdLHI9dGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzLG89W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsKGM9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIikpaW5zdGFuY2VvZiBpLlJlZiYmcy5wdXQoYyksdT1uZXcgTWFwLGw9dGhpcy54cmVmLGY9dGhpcy5wYWdlSW5kZXhDYWNoZSxoPTA7Y2FzZSAxMDppZighKG8ubGVuZ3RoPjApKXtlLm5leHQ9NzA7YnJlYWt9aWYodj1vLmF0KC0xKSx5PXYuY3VycmVudE5vZGUsbT12LnBvc0luS2lkcywhKChiPXkuZ2V0UmF3KCJLaWRzIikpaW5zdGFuY2VvZiBpLlJlZikpe2UubmV4dD0yNTticmVha31yZXR1cm4gZS5wcmV2PTE1LGUubmV4dD0xOCxsLmZldGNoQXN5bmMoYik7Y2FzZSAxODpiPWUuc2VudCxlLm5leHQ9MjU7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gZS5wcmV2PTIxLGUudDA9ZS5jYXRjaCgxNSkscChlLnQwKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDI1OmlmKEFycmF5LmlzQXJyYXkoYikpe2UubmV4dD0yODticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAyODppZighKG0+PWIubGVuZ3RoKSl7ZS5uZXh0PTMxO2JyZWFrfXJldHVybiBvLnBvcCgpLGUuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgMzE6aWYodz1iW21dLGs9dm9pZCAwLCEodyBpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTUwO2JyZWFrfWlmKCFzLmhhcyh3KSl7ZS5uZXh0PTM3O2JyZWFrfXJldHVybiBwKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKSksZS5hYnJ1cHQoImJyZWFrIiw3MCk7Y2FzZSAzNzpyZXR1cm4gcy5wdXQodyksZS5wcmV2PTM4LGUubmV4dD00MSxsLmZldGNoQXN5bmModyk7Y2FzZSA0MTprPWUuc2VudCxlLm5leHQ9NDg7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gZS5wcmV2PTQ0LGUudDE9ZS5jYXRjaCgzOCkscChlLnQxKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDQ4OmUubmV4dD01MTticmVhaztjYXNlIDUwOms9dztjYXNlIDUxOmlmKGsgaW5zdGFuY2VvZiBpLkRpY3Qpe2UubmV4dD01NDticmVha31yZXR1cm4gcChuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSxlLmFicnVwdCgiYnJlYWsiLDcwKTtjYXNlIDU0OmlmKCEoKFM9ay5nZXRSYXcoIlR5cGUiKSlpbnN0YW5jZW9mIGkuUmVmKSl7ZS5uZXh0PTY2O2JyZWFrfXJldHVybiBlLnByZXY9NTYsZS5uZXh0PTU5LGwuZmV0Y2hBc3luYyhTKTtjYXNlIDU5OlM9ZS5zZW50LGUubmV4dD02NjticmVhaztjYXNlIDYyOnJldHVybiBlLnByZXY9NjIsZS50Mj1lLmNhdGNoKDU2KSxwKGUudDIpLGUuYWJydXB0KCJicmVhayIsNzApO2Nhc2UgNjY6KDAsaS5pc05hbWUpKFMsIlBhZ2UiKXx8IWsuaGFzKCJLaWRzIik/ZChrLHcgaW5zdGFuY2VvZiBpLlJlZj93Om51bGwpOm8ucHVzaCh7Y3VycmVudE5vZGU6ayxwb3NJbktpZHM6MH0pLHYucG9zSW5LaWRzKyssZS5uZXh0PTEwO2JyZWFrO2Nhc2UgNzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUpO2Nhc2UgNzE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxNSwyMV0sWzM4LDQ0XSxbNTYsNjJdXSl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTt2YXIgbj10aGlzLnhyZWYsbz0wO3JldHVybiBmdW5jdGlvbiByKHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcixvPTA7cmV0dXJuIG4uZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihuKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKG4sIlBhZ2UiKSYmIShuIGluc3RhbmNlb2YgaS5EaWN0JiYhbi5oYXMoIlR5cGUiKSYmbi5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighbilyZXR1cm4gbnVsbDtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiByPW4uZ2V0UmF3KCJQYXJlbnQiKSxuLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcyxjPVtdLHU9ITEsbD1iKGUpO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGY9cy52YWx1ZTtpZighKGYgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKGYsdCkpe3U9ITA7YnJlYWt9Yy5wdXNoKG4uZmV0Y2hBc3luYyhmKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9vKz1lLmdldCgiQ291bnQiKTpvKyt9KSkpfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX1pZighdSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bbyxyXX0pKX0pKX0ocykudGhlbigoZnVuY3Rpb24obil7aWYoIW4pcmV0dXJuIHQucGFnZUluZGV4Q2FjaGUucHV0KGUsbyksbzt2YXIgYT1tKG4sMiksaT1hWzBdLHM9YVsxXTtyZXR1cm4gbys9aSxyKHMpfSkpfShlKX19LHtrZXk6ImJhc2VVcmwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhdERpY3QuZ2V0KCJVUkkiKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt2YXIgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKHIpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLHIuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX19XSx2PVt7a2V5OiJwYXJzZURlc3REaWN0aW9uYXJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRlc3REaWN0O2lmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09cChyKSl7dmFyIG8sYyx1PWUuZG9jQmFzZVVybHx8bnVsbCxsPWUuZG9jQXR0YWNobWVudHN8fG51bGwsZj10LmdldCgiQSIpO2lmKGYgaW5zdGFuY2VvZiBpLkRpY3R8fCh0LmhhcygiRGVzdCIpP2Y9dC5nZXQoIkRlc3QiKTooZj10LmdldCgiQUEiKSlpbnN0YW5jZW9mIGkuRGljdCYmKGYuaGFzKCJEIik/Zj1mLmdldCgiRCIpOmYuaGFzKCJVIikmJihmPWYuZ2V0KCJVIikpKSksZiBpbnN0YW5jZW9mIGkuRGljdCl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB2b2lkKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LiIpO3ZhciBkPWgubmFtZTtzd2l0Y2goZCl7Y2FzZSJSZXNldEZvcm0iOnZhciBnLHY9Zi5nZXQoIkZsYWdzIikseT0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiB2P3Y6MCkpLG09W10sdz1bXSxrPWIoZi5nZXQoIkZpZWxkcyIpfHxbXSk7dHJ5e2ZvcihrLnMoKTshKGc9ay5uKCkpLmRvbmU7KXt2YXIgUz1nLnZhbHVlO1MgaW5zdGFuY2VvZiBpLlJlZj93LnB1c2goUy50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIFMmJm0ucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShTKSl9fWNhdGNoKGUpe2suZShlKX1maW5hbGx5e2suZigpfXIucmVzZXRGb3JtPXtmaWVsZHM6bSxyZWZzOncsaW5jbHVkZTp5fTticmVhaztjYXNlIlVSSSI6KG89Zi5nZXQoIlVSSSIpKWluc3RhbmNlb2YgaS5OYW1lJiYobz0iLyIrby5uYW1lKTticmVhaztjYXNlIkdvVG8iOmM9Zi5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6dmFyIHg9Zi5nZXQoIkYiKTt4IGluc3RhbmNlb2YgaS5EaWN0P289eC5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIHgmJihvPXgpO3ZhciBPPWYuZ2V0KCJEIik7aWYoTyYmKE8gaW5zdGFuY2VvZiBpLk5hbWUmJihPPU8ubmFtZSksInN0cmluZyI9PXR5cGVvZiBvKSl7dmFyIEE9by5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgTz9vPUErIiMiK086QXJyYXkuaXNBcnJheShPKSYmKG89QSsiIyIrSlNPTi5zdHJpbmdpZnkoTykpfXZhciBDPWYuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBDJiYoci5uZXdXaW5kb3c9Qyk7YnJlYWs7Y2FzZSJHb1RvRSI6dmFyIEYsUD1mLmdldCgiVCIpO2lmKGwmJlAgaW5zdGFuY2VvZiBpLkRpY3Qpe3ZhciBUPVAuZ2V0KCJSIiksST1QLmdldCgiTiIpOygwLGkuaXNOYW1lKShULCJDIikmJiJzdHJpbmciPT10eXBlb2YgSSYmKEY9bFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShJKV0pfUY/ci5hdHRhY2htZW50PUY6KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6dmFyIEU9Zi5nZXQoIk4iKTtFIGluc3RhbmNlb2YgaS5OYW1lJiYoci5hY3Rpb249RS5uYW1lKTticmVhaztjYXNlIlNldE9DR1N0YXRlIjp2YXIgaj1mLmdldCgiU3RhdGUiKSxNPWYuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoail8fDA9PT1qLmxlbmd0aClicmVhazt2YXIgXyxMPVtdLFI9YihqKTt0cnl7Zm9yKFIucygpOyEoXz1SLm4oKSkuZG9uZTspe3ZhciBOPV8udmFsdWU7aWYoTiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goTi5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkwucHVzaChOLm5hbWUpfWVsc2UgTiBpbnN0YW5jZW9mIGkuUmVmJiZMLnB1c2goTi50b1N0cmluZygpKX19Y2F0Y2goZSl7Ui5lKGUpfWZpbmFsbHl7Ui5mKCl9aWYoTC5sZW5ndGghPT1qLmxlbmd0aClicmVhaztyLnNldE9DR1N0YXRlPXtzdGF0ZTpMLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgTXx8TX07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgRCxCPWYuZ2V0KCJKUyIpO0IgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0/RD1CLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQiYmKEQ9Qik7dmFyIFU9RCYmKDAsbi5yZWNvdmVySnNVUkwpKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKEQpKTtpZihVKXtvPVUudXJsLHIubmV3V2luZG93PVUubmV3V2luZG93O2JyZWFrfWRlZmF1bHQ6aWYoIkphdmFTY3JpcHQiPT09ZHx8IlN1Ym1pdEZvcm0iPT09ZClicmVhazsoMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiAiJy5jb25jYXQoZCwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGM9dC5nZXQoIkRlc3QiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgJD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKG8sdSx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pOyQmJihyLnVybD0kLmhyZWYpLHIudW5zYWZlVXJsPW99YyYmKGMgaW5zdGFuY2VvZiBpLk5hbWUmJihjPWMubmFtZSksInN0cmluZyI9PXR5cGVvZiBjP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKTpBcnJheS5pc0FycmF5KGMpJiYoci5kZXN0PWMpKX1lbHNlKDAsYS53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIil9ZWxzZSgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIil9fV0sciYmUyh0LnByb3RvdHlwZSxyKSx2JiZTKHQsdiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkNhdGFsb2c9T30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7dmFyIG49cigxMzQpLGE9cigyKTtmdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJm8oZSx0KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxvKGUsdCl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1jKGUpO2lmKHQpe3ZhciBhPWModGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09dSh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gYz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sYyhlKX1mdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZihlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBmKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gaChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09dShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXUobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT11KGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2godGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsYS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBwKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG4uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBpPVt0aGlzLnJvb3RdO2kubGVuZ3RoPjA7KXt2YXIgbz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZihvIGluc3RhbmNlb2Ygbi5EaWN0KWlmKG8uaGFzKCJLaWRzIikpe3ZhciBzPW8uZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkocykpY29udGludWU7dmFyIGMsdT1sKHMpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGY9Yy52YWx1ZTtpZihyLmhhcyhmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaChmKSxyLnB1dChmKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fWVsc2V7dmFyIGg9by5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IodmFyIGQ9MCxwPWgubGVuZ3RoO2Q8cDtkKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihoW2RdKSx0LmZldGNoSWZSZWYoaFtkKzFdKSl9fXJldHVybiBlfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2Zvcih2YXIgdD10aGlzLnhyZWYscj10LmZldGNoSWZSZWYodGhpcy5yb290KSxuPTA7ci5oYXMoIktpZHMiKTspe2lmKCsrbj4xMClyZXR1cm4oMCxhLndhcm4pKCdTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSksbnVsbDt2YXIgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2Zvcih2YXIgbz0wLHM9aS5sZW5ndGgtMTtvPD1zOyl7dmFyIGM9bytzPj4xLHU9dC5mZXRjaElmUmVmKGlbY10pLGw9dS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGxbMF0pKXM9Yy0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihsWzFdKSkpe3I9dTticmVha31vPWMrMX19aWYobz5zKXJldHVybiBudWxsfXZhciBmPXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKHZhciBoPTAsZD1mLmxlbmd0aC0yO2g8PWQ7KXt2YXIgcD1oK2Q+PjEsZz1wKygxJnApLHY9dC5mZXRjaElmUmVmKGZbZ10pO2lmKGU8dilkPWctMjtlbHNle2lmKCEoZT52KSlyZXR1cm4gdC5mZXRjaElmUmVmKGZbZysxXSk7aD1nKzJ9fXJldHVybiBudWxsfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOYW1lcyIpfXJldHVybiBwKHIpfShnKTt0Lk5hbWVUcmVlPXY7dmFyIHk9ZnVuY3Rpb24oZSl7aShyLGUpO3ZhciB0PXMocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiBoKHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLCJOdW1zIil9cmV0dXJuIHAocil9KGcpO3QuTnVtYmVyVHJlZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24oKXsoMCxuLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpLCgwLGEuY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgbj1yKDEzNCksYT1yKDE2OSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM2KSxpPXIoMTM0KTtmdW5jdGlvbiBvKGUpe3JldHVybiBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvKGUpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09byhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW8obikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1vKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHQgaW5zdGFuY2VvZiBpLkRpY3QmJih0aGlzLnhyZWY9cix0aGlzLnJvb3Q9dCx0LmhhcygiRlMiKSYmKHRoaXMuZnM9dC5nZXQoIkZTIikpLHRoaXMuZGVzY3JpcHRpb249dC5oYXMoIkRlc2MiKT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiRGVzYyIpKToiIix0LmhhcygiUkYiKSYmKDAsbi53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksdGhpcy5jb250ZW50QXZhaWxhYmxlPSEwLHQuaGFzKCJFRiIpfHwodGhpcy5jb250ZW50QXZhaWxhYmxlPSExLCgwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIikpKX12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9Yyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50IixnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jb250ZW50QXZhaWxhYmxlKXJldHVybiBudWxsOyF0aGlzLmNvbnRlbnRSZWYmJnRoaXMucm9vdCYmKHRoaXMuY29udGVudFJlZj1jKHRoaXMucm9vdC5nZXQoIkVGIikpKTt2YXIgZT1udWxsO2lmKHRoaXMuY29udGVudFJlZil7dmFyIHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgYS5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLG4ud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX19LHtrZXk6InNlcmlhbGl6YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX1dKSYmcyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuRmlsZVNwZWM9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDE5NSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1vKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGkscz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gcz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtzfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBzKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gcyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09YShlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWEobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1hKGkpP2k6U3RyaW5nKGkpKSxuKX12YXIgaX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT10LHImJnRoaXMuX3BhcnNlKHIpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX3JlcGFpciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj1bXSxhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtvPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpOm4ucHVzaCgiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IituLmpvaW4oIiIpfSkpfX0se2tleToiX2dldFNlcXVlbmNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4icmRmOmxpIj09PWUubm9kZU5hbWV9KSl9fSx7a2V5OiJfcGFyc2VBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5oYXNDaGlsZE5vZGVzKCkpe3ZhciB0PShuPWUuY2hpbGROb2RlcyxhPTEsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0obixhKXx8byhuLGEpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCkpWzBdLHI9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudC50cmltKCl9KSkpfXZhciBuLGF9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpZm9yKHQ9dC5maXJzdENoaWxkO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZztpZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSl7dmFyIHIsbj1pKHQuY2hpbGROb2Rlcyk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO2lmKCJyZGY6ZGVzY3JpcHRpb24iPT09YS5ub2RlTmFtZSl7dmFyIG8scz1pKGEuY2hpbGROb2Rlcyk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlLHU9Yy5ub2RlTmFtZTtzd2l0Y2godSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkoYyk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KHUsYy50ZXh0Q29udGVudC50cmltKCkpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX19fX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19fX0se2tleToic2VyaWFsaXphYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1dKSYmYyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuTWV0YWRhdGFQYXJzZXI9dX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0cnVjdFRyZWVSb290PXQuU3RydWN0VHJlZVBhZ2U9dm9pZCAwO3ZhciBuPXIoMTM0KSxhPXIoMiksaT1yKDE5OSk7ZnVuY3Rpb24gbyhlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe2M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9ZnVuY3Rpb24gZihlLHQscil7cmV0dXJuIHQmJmwoZS5wcm90b3R5cGUsdCksciYmbChlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGg9IlBBR0VfQ09OVEVOVCIsZD0iU1RSRUFNX0NPTlRFTlQiLHA9Ik9CSkVDVCIsZz0iRUxFTUVOVCIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dSh0aGlzLGUpLHRoaXMuZGljdD10LHRoaXMucm9sZU1hcD1uZXcgTWFwfXJldHVybiBmKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZWFkUm9sZU1hcCgpfX0se2tleToicmVhZFJvbGVNYXAiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ciBpbnN0YW5jZW9mIG4uTmFtZSYmZS5yb2xlTWFwLnNldCh0LHIubmFtZSl9KSl9fV0pLGV9KCk7dC5TdHJ1Y3RUcmVlUm9vdD12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnRyZWU9dCx0aGlzLmRpY3Q9cix0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1yZXR1cm4gZihlLFt7a2V5OiJyb2xlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2Ygbi5OYW1lP2UubmFtZToiIixyPXRoaXMudHJlZS5yb290O3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH19LHtrZXk6InBhcnNlS2lkcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1udWxsLHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7dmFyIHI9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLGk9byhyKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBzPWEudmFsdWUsYz10aGlzLnBhcnNlS2lkKGUscyk7YyYmdGhpcy5raWRzLnB1c2goYyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfX1lbHNle3ZhciB1PXRoaXMucGFyc2VLaWQoZSxyKTt1JiZ0aGlzLmtpZHMucHVzaCh1KX19fSx7a2V5OiJwYXJzZUtpZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IG0oe3R5cGU6aCxtY2lkOnQscGFnZU9iaklkOmV9KTt2YXIgcj1udWxsO2lmKHQgaW5zdGFuY2VvZiBuLlJlZj9yPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihyPXQpLCFyKXJldHVybiBudWxsO3ZhciBhPXIuZ2V0UmF3KCJQZyIpO2EgaW5zdGFuY2VvZiBuLlJlZiYmKGU9YS50b1N0cmluZygpKTt2YXIgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpkLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgbSh7dHlwZTpwLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyBtKHt0eXBlOmcsZGljdDpyfSl9fV0pLGV9KCksbT1mKChmdW5jdGlvbiBlKHQpe3ZhciByPXQudHlwZSxuPXQuZGljdCxhPXZvaWQgMD09PW4/bnVsbDpuLGk9dC5tY2lkLG89dm9pZCAwPT09aT9udWxsOmkscz10LnBhZ2VPYmpJZCxjPXZvaWQgMD09PXM/bnVsbDpzLGw9dC5yZWZPYmpJZCxmPXZvaWQgMD09PWw/bnVsbDpsO3UodGhpcyxlKSx0aGlzLnR5cGU9cix0aGlzLmRpY3Q9YSx0aGlzLm1jaWQ9byx0aGlzLnBhZ2VPYmpJZD1jLHRoaXMucmVmT2JqSWQ9Zix0aGlzLnBhcmVudE5vZGU9bnVsbH0pKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3UodGhpcyxlKSx0aGlzLnJvb3Q9dCx0aGlzLnJvb3REaWN0PXQ/dC5kaWN0Om51bGwsdGhpcy5wYWdlRGljdD1yLHRoaXMubm9kZXM9W119cmV0dXJuIGYoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0KXt2YXIgZT10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKGUpe3ZhciB0PXRoaXMucGFnZURpY3QuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7dmFyIHI9bmV3IGkuTnVtYmVyVHJlZShlLHRoaXMucm9vdERpY3QueHJlZikuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkocikpe3ZhciBhLHM9bmV3IE1hcCxjPW8ocik7dHJ5e2ZvcihjLnMoKTshKGE9Yy5uKCkpLmRvbmU7KXt2YXIgdT1hLnZhbHVlO3UgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaCh1KSxzKX19Y2F0Y2goZSl7Yy5lKGUpfWZpbmFsbHl7Yy5mKCl9fX19fX19LHtrZXk6ImFkZE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO3ZhciBpPW5ldyB5KHRoaXMsZSk7dC5zZXQoZSxpKTt2YXIgcz1lLmdldCgiUCIpO2lmKCFzfHwoMCxuLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSlyZXR1cm4gdGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxpKXx8dC5kZWxldGUoZSksaTt2YXIgYz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIWMpcmV0dXJuIGk7dmFyIHUsbD0hMSxmPW8oYy5raWRzKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC50eXBlPT09ZyYmaC5kaWN0PT09ZSYmKGgucGFyZW50Tm9kZT1pLGw9ITApfX1jYXRjaChlKXtmLmUoZSl9ZmluYWxseXtmLmYoKX1yZXR1cm4gbHx8dC5kZWxldGUoZSksaX19LHtrZXk6ImFkZFRvcExldmVsTm9kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJvb3REaWN0LmdldCgiSyIpO2lmKCFyKXJldHVybiExO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpcmV0dXJuIHIub2JqSWQ9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1swXT10LCEwKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4hMDtmb3IodmFyIGE9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO28mJm8udG9TdHJpbmcoKT09PWUub2JqSWQmJih0aGlzLm5vZGVzW2ldPXQsYT0hMCl9cmV0dXJuIGF9fSx7a2V5OiJzZXJpYWxpemFibGUiLGdldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtpZihuPjQwKSgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtlbHNle3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTt2YXIgcz10LmRpY3QuZ2V0KCJBbHQiKTsic3RyaW5nIj09dHlwZW9mIHMmJihpLmFsdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShzKSk7dmFyIGM9dC5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgYyYmKGkubGFuZz0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShjKSk7dmFyIHUsbD1vKHQua2lkcyk7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZj11LnZhbHVlLHY9Zi50eXBlPT09Zz9mLnBhcmVudE5vZGU6bnVsbDt2P2UodixpLG4rMSk6Zi50eXBlPT09aHx8Zi50eXBlPT09ZD9pLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOiJwYWdlIi5jb25jYXQoZi5wYWdlT2JqSWQsIl9tY2lkIikuY29uY2F0KGYubWNpZCl9KTpmLnR5cGU9PT1wJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6Zi5yZWZPYmpJZH0pfX1jYXRjaChlKXtsLmUoZSl9ZmluYWxseXtsLmYoKX19fXZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO3ZhciByLG49byh0aGlzLm5vZGVzKTt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aSYmZShpLHQpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19XSksZX0oKTt0LlN0cnVjdFRyZWVQYWdlPWJ9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk9iamVjdExvYWRlcj12b2lkIDA7dmFyIGE9cigxMzQpLGk9cigxMzYpLG89cigxMzUpLHM9cigyKTtmdW5jdGlvbiBjKCl7Yz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LGE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIix1PWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2woe30sIiIpfWNhdGNoKGUpe2w9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIGYoZSx0LHIsbil7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYobnx8W10pO3JldHVybiBhKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gaChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1mO3ZhciBkPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2woeSxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixvKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bChlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gaShhLG8scyxjKXt2YXIgdT1oKGVbYV0sZSxvKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgbD11LmFyZyxmPWwudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1uKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2koIm5leHQiLGUscyxjKX0pLChmdW5jdGlvbihlKXtpKCJ0aHJvdyIsZSxzLGMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXtsLnZhbHVlPWUscyhsKX0pLChmdW5jdGlvbihlKXtyZXR1cm4gaSgidGhyb3ciLGUscyxjKX0pKX1jKHUuYXJnKX12YXIgbzthKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7aShlLHIsdCxuKX0pKX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1kKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9aChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1kKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxkO3ZhciBhPWgobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxkO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGQpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LGEodywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLGEodiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9bCh2LHUsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixsKGUsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxsKFMucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKGYodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxsKHcsdSwiR2VuZXJhdG9yIiksbCh3LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksbCh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGR9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxkfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxkfX0sZX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZChlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBkKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjt2YXIgcixuLG89aChlKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBzPXIudmFsdWU7KChuPXMpaW5zdGFuY2VvZiBhLlJlZnx8biBpbnN0YW5jZW9mIGEuRGljdHx8biBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShuKSkmJnQucHVzaChzKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kaWN0PXQsdGhpcy5rZXlzPXIsdGhpcy54cmVmPW4sdGhpcy5yZWZTZXQ9bnVsbH12YXIgdCxyLG4sdTtyZXR1cm4gdD1lLHI9W3trZXk6ImxvYWQiLHZhbHVlOih1PWwoYygpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saSxvLHMsdTtyZXR1cm4gYygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHZvaWQgMCk7Y2FzZSAyOnQ9dGhpcy5rZXlzLHI9dGhpcy5kaWN0LHRoaXMucmVmU2V0PW5ldyBhLlJlZlNldCxuPVtdLGk9aCh0KTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspcz1vLnZhbHVlLHZvaWQgMCE9PSh1PXIuZ2V0UmF3KHMpKSYmbi5wdXNoKHUpfWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl93YWxrKG4pKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJfd2FsayIsdmFsdWU6KG49bChjKCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLHUsbCxmLGQsZyx2LHksbSxiLHc7cmV0dXJuIGMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyPVtdLG49W107Y2FzZSAyOmlmKCF0Lmxlbmd0aCl7ZS5uZXh0PTQ4O2JyZWFrfWlmKCEoKHU9dC5wb3AoKSlpbnN0YW5jZW9mIGEuUmVmKSl7ZS5uZXh0PTIxO2JyZWFrfWlmKCF0aGlzLnJlZlNldC5oYXModSkpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgiY29udGludWUiLDIpO2Nhc2UgNzplLnByZXY9Nyx0aGlzLnJlZlNldC5wdXQodSksdT10aGlzLnhyZWYuZmV0Y2godSksZS5uZXh0PTIxO2JyZWFrO2Nhc2UgMTI6aWYoZS5wcmV2PTEyLGUudDA9ZS5jYXRjaCg3KSxlLnQwIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTE5O2JyZWFrfXJldHVybigwLHMud2FybikoJ09iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICInLmNvbmNhdChlLnQwLCciLicpKSx0aGlzLnJlZlNldD1udWxsLGw9dGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLGUuYWJydXB0KCJyZXR1cm4iLGwucmVxdWVzdEFsbENodW5rcygpKTtjYXNlIDE5OnIucHVzaCh1KSxuLnB1c2goe2JlZ2luOmUudDAuYmVnaW4sZW5kOmUudDAuZW5kfSk7Y2FzZSAyMTppZighKHUgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pKXtlLm5leHQ9NDU7YnJlYWt9aWYoIShmPXUuZ2V0QmFzZVN0cmVhbXMoKSkpe2UubmV4dD00NTticmVha31kPSExLGc9aChmKSxlLnByZXY9MjYsZy5zKCk7Y2FzZSAyODppZigodj1nLm4oKSkuZG9uZSl7ZS5uZXh0PTM2O2JyZWFrfWlmKCEoeT12LnZhbHVlKS5pc0RhdGFMb2FkZWQpe2UubmV4dD0zMjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiwzNCk7Y2FzZSAzMjpkPSEwLG4ucHVzaCh7YmVnaW46eS5zdGFydCxlbmQ6eS5lbmR9KTtjYXNlIDM0OmUubmV4dD0yODticmVhaztjYXNlIDM2OmUubmV4dD00MTticmVhaztjYXNlIDM4OmUucHJldj0zOCxlLnQxPWUuY2F0Y2goMjYpLGcuZShlLnQxKTtjYXNlIDQxOnJldHVybiBlLnByZXY9NDEsZy5mKCksZS5maW5pc2goNDEpO2Nhc2UgNDQ6ZCYmci5wdXNoKHUpO2Nhc2UgNDU6cCh1LHQpLGUubmV4dD0yO2JyZWFrO2Nhc2UgNDg6aWYoIW4ubGVuZ3RoKXtlLm5leHQ9NTQ7YnJlYWt9cmV0dXJuIGUubmV4dD01MSx0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhuKTtjYXNlIDUxOm09aChyKTt0cnl7Zm9yKG0ucygpOyEoYj1tLm4oKSkuZG9uZTspKHc9Yi52YWx1ZSlpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUodyl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX3dhbGsocikpO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucmVmU2V0PW51bGwsZS5hYnJ1cHQoInJldHVybiIsdm9pZCAwKTtjYXNlIDU2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbNywxMl0sWzI2LDM4LDQxLDQ0XV0pfSkpKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dLHImJmYodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0Lk9iamVjdExvYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTApLGk9cigyMTYpLG89cigyMTQpLHM9cigyMDcpLGM9cigyKSx1PXIoMjE3KSxsPXIoMjI3KTtmdW5jdGlvbiBmKGUpe3JldHVybiBmPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxmKGUpfWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7ZD1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBwP3Q6cCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBoPXt9O2Z1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB2KCl7fXZhciB5PXt9O2MoeSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZixiPW0mJm0obShQKFtdKSkpO2ImJmIhPT10JiZyLmNhbGwoYixpKSYmKHk9Yik7dmFyIHc9di5wcm90b3R5cGU9cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KTtmdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBTKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxoPXUudmFsdWU7cmV0dXJuIGgmJiJvYmplY3QiPT1mKGgpJiZyLmNhbGwoaCwiX19hd2FpdCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShoKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1oKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1oKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxoO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxoO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGgpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBnLnByb3RvdHlwZT12LG4odywiY29uc3RydWN0b3IiLHt2YWx1ZTp2LGNvbmZpZ3VyYWJsZTohMH0pLG4odiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLGcuZGlzcGxheU5hbWU9Yyh2LHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1nfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx2KTooZS5fX3Byb3RvX189dixjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxjKFMucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPVMsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBTKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sayh3KSxjKHcscywiR2VuZXJhdG9yIiksYyh3LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyh3LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxoKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX1mdW5jdGlvbiBwKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGM9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtwKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtwKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09ZihuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWYoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKTt0cnl7dGhpcy5yb290PShuZXcgdS5YRkFQYXJzZXIpLnBhcnNlKGUuX2NyZWF0ZURvY3VtZW50KHQpKTt2YXIgcj1uZXcgYS5CaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09ci5iaW5kKCksdGhpcy5kYXRhSGFuZGxlcj1uZXcgaS5EYXRhSGFuZGxlcih0aGlzLnJvb3Qsci5nZXREYXRhKCkpLHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZT10aGlzLmZvcm19Y2F0Y2goZSl7KDAsYy53YXJuKSgiWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgYW5kIGJpbmRpbmc6ICIuY29uY2F0KGUpKX19dmFyIHQscixmLHAseSxtO3JldHVybiB0PWUscj1be2tleToiaXNWYWxpZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19fSx7a2V5OiJfY3JlYXRlUGFnZXNIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mb3JtW24uJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3NldFRpbWVvdXQoKGZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9ZS5uZXh0KCk7YS5kb25lP3QoYS52YWx1ZSk6c2V0VGltZW91dChuLDApfWNhdGNoKGUpe3IoZSl9fSksMCl9KSl9fSx7a2V5OiJfY3JlYXRlUGFnZXMiLHZhbHVlOihtPWcoZCgpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gZCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO2Nhc2UgMzp0aGlzLnBhZ2VzPWUuc2VudCx0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy5zdHlsZSxyPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMCwwLHBhcnNlSW50KHIpLHBhcnNlSW50KG4pXX0pKSxlLm5leHQ9MTA7YnJlYWs7Y2FzZSA3OmUucHJldj03LGUudDA9ZS5jYXRjaCgwKSwoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAiLmNvbmNhdChlLnQwKSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzAsN11dKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZ2V0Qm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpbXNbZV19fSx7a2V5OiJnZXROdW1QYWdlcyIsdmFsdWU6KHk9ZyhkKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBkKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5wYWdlcyl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHRoaXMuX2NyZWF0ZVBhZ2VzKCk7Y2FzZSAzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLmRpbXMubGVuZ3RoKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJzZXRJbWFnZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX19LHtrZXk6InNldEZvbnRzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgby5Gb250RmluZGVyKGUpO3ZhciB0LHI9W10sYT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fSh0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2k9KDAscy5zdHJpcFF1b3RlcykoaSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChpKXx8ci5wdXNoKGkpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1yZXR1cm4gci5sZW5ndGg+MD9yOm51bGx9fSx7a2V5OiJhcHBlbmRGb250cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5hZGQoZSx0KX19LHtrZXk6ImdldFBhZ2VzIix2YWx1ZToocD1nKGQoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIGQoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0aGlzLnBhZ2VzKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5uZXh0PTMsdGhpcy5fY3JlYXRlUGFnZXMoKTtjYXNlIDM6cmV0dXJuIHQ9dGhpcy5wYWdlcyx0aGlzLnBhZ2VzPW51bGwsZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2VyaWFsaXplRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfX1dLGY9W3trZXk6Il9jcmVhdGVEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19fSx7a2V5OiJnZXRSaWNoVGV4dEFzSHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHQ9bmV3IHUuWEZBUGFyc2VyKGwuWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbbi4kbm9kZU5hbWVdKSl7dmFyIHI9bC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtyW24uJGFwcGVuZENoaWxkXSh0KSx0PXJ9dmFyIGE9dFtuLiR0b0hUTUxdKCk7aWYoIWEuc3VjY2VzcylyZXR1cm4gbnVsbDt2YXIgaT1hLmh0bWwsbz1pLmF0dHJpYnV0ZXM7cmV0dXJuIG8mJihvLmNsYXNzJiYoby5jbGFzcz1vLmNsYXNzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc3RhcnRzV2l0aCgieGZhIil9KSkpLG8uZGlyPSJhdXRvIikse2h0bWw6aSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19XSxyJiZ2KHQucHJvdG90eXBlLHIpLGYmJnYodCxmKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWEZBRmFjdG9yeT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7dmFyIG49cigyMDcpLGE9cigyKSxpPXIoMTM1KSxvPXIoMjA4KSxzPXIoMjA5KTtmdW5jdGlvbiBjKCl7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1wKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLGEsaSxvLHM9W10sYz0hMCx1PSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1wKGUpO2lmKHQpe3ZhciBhPXAodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09Zyh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZChlKX0odGhpcyxyKX19ZnVuY3Rpb24gZChlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXtyZXR1cm4gcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scChlKX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxnKGUpfWZ1bmN0aW9uIHYoKXt2PWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXU7dmFyIGY9e307ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIHAoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz1wLnByb3RvdHlwZT1oLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWwoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciB1PWMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PWcoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe3UudmFsdWU9ZSxvKHUpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1sKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGY7dmFyIGE9bChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGQucHJvdG90eXBlPXAsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLCJjb25zdHJ1Y3RvciIse3ZhbHVlOmQsY29uZmlndXJhYmxlOiEwfSksZC5kaXNwbGF5TmFtZT1jKHAscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHApOihlLl9fcHJvdG9fXz1wLGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFModSh0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGYpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGZ9fSxlfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPW0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIG0oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGIoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9iKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBiKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09ZyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PWcobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1nKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBTKGUsdCxyKXtyZXR1cm4gdCYmayhlLnByb3RvdHlwZSx0KSxyJiZrKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX12YXIgeD1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXg7dmFyIE89U3ltYm9sKCk7dC4kYWRkSFRNTD1PO3ZhciBBPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPUE7dmFyIEM9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9Qzt2YXIgRj1TeW1ib2woKTt0LiRjbGVhbj1GO3ZhciBQPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1QO3ZhciBUPVN5bWJvbCgpO3QuJGNsZWFudXA9VDt2YXIgST1TeW1ib2woKTt0LiRjbG9uZT1JO3ZhciBFPVN5bWJvbCgpO3QuJGNvbnN1bWVkPUU7dmFyIGo9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD1qO3ZhciBNPVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9TTt2YXIgXz1TeW1ib2woKTt0LiRkdW1wPV87dmFyIEw9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPUw7dmFyIFI9U3ltYm9sKCk7dC4kZmluYWxpemU9Ujt2YXIgTj1TeW1ib2woKTt0LiRmbHVzaEhUTUw9Tjt2YXIgRD1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1EO3ZhciBCPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9Qjt2YXIgVT1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT1VO3ZhciAkPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz0kO3ZhciBYPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVg7dmFyIEg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1IO3ZhciBxPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1xO3ZhciBHPVN5bWJvbCgpO3QuJGdldEV4dHJhPUc7dmFyIHo9U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9ejt2YXIgVz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1XO3ZhciBWPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPVY7dmFyIFk9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9WTt2YXIgSz1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PUs7dmFyIEo9U3ltYm9sKCk7dC4kZ2V0UGFyZW50PUo7dmFyIFo9U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PVo7dmFyIFE9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1RO3ZhciBlZT1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPWVlO3ZhciB0ZT1TeW1ib2woKTt0LiRpZHM9dGU7dmFyIHJlPVN5bWJvbCgpO3QuJGluZGV4T2Y9cmU7dmFyIG5lPVN5bWJvbCgpO3QuJGluc2VydEF0PW5lO3ZhciBhZT1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPWFlO3ZhciBpZT1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPWllO3ZhciBvZT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1vZTt2YXIgc2U9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXNlO3ZhciBjZT1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Y2U7dmFyIHVlPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT11ZTt2YXIgbGU9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1sZTt2YXIgZmU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1mZTt2YXIgaGU9U3ltYm9sKCk7dC4kaXNVc2FibGU9aGU7dmFyIGRlPVN5bWJvbCgpLHBlPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1wZTt2YXIgZ2U9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPWdlO3ZhciB2ZT1TeW1ib2woKTt0LiRuc0F0dHJpYnV0ZXM9dmU7dmFyIHllPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9eWU7dmFyIG1lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1tZTt2YXIgYmU9U3ltYm9sKCk7dC4kb25UZXh0PWJlO3ZhciB3ZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPXdlO3ZhciBrZT1TeW1ib2woKTt0LiRwb3BQYXJhPWtlO3ZhciBTZT1TeW1ib2woKTt0LiRwdXNoUGFyYT1TZTt2YXIgeGU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9eGU7dmFyIE9lPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9T2U7dmFyIEFlPVN5bWJvbCgpO3QuJHJlc29sdmVQcm90b3R5cGVzPUFlO3ZhciBDZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPUNlO3ZhciBGZT1TeW1ib2woKTt0LiRzZXRJZD1GZTt2YXIgUGU9U3ltYm9sKCk7dC4kc2V0U2V0QXR0cmlidXRlcz1QZTt2YXIgVGU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9VGU7dmFyIEllPVN5bWJvbCgpO3QuJHRhYkluZGV4PUllO3ZhciBFZT1TeW1ib2woKTt0LiR0ZXh0PUVlO3ZhciBqZT1TeW1ib2woKTt0LiR0b1BhZ2VzPWplO3ZhciBNZT1TeW1ib2woKTt0LiR0b0hUTUw9TWU7dmFyIF9lPVN5bWJvbCgpO3QuJHRvU3RyaW5nPV9lO3ZhciBMZT1TeW1ib2woKTt0LiR0b1N0eWxlPUxlO3ZhciBSZT1TeW1ib2woInVpZCIpO3QuJHVpZD1SZTt2YXIgTmU9U3ltYm9sKCksRGU9U3ltYm9sKCksQmU9U3ltYm9sKCksVWU9U3ltYm9sKCJfY2hpbGRyZW4iKSwkZT1TeW1ib2woKSxYZT1TeW1ib2woKSxIZT1TeW1ib2woKSxxZT1TeW1ib2woKSxHZT1TeW1ib2woKSx6ZT1TeW1ib2woKSxXZT1TeW1ib2woKSxWZT1TeW1ib2woKSxZZT1TeW1ib2woKSxLZT1TeW1ib2woInBhcmVudCIpLEplPVN5bWJvbCgpLFplPVN5bWJvbCgpLFFlPVN5bWJvbCgpLGV0PTAsdHQ9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt3KHRoaXMsZSksdGhpc1twZV09dCx0aGlzW2dlXT1yLHRoaXNbV2VdPW4sdGhpc1tLZV09bnVsbCx0aGlzW1VlXT1bXSx0aGlzW1JlXT0iIi5jb25jYXQocikuY29uY2F0KGV0KyspLHRoaXNbUV09bnVsbH1yZXR1cm4gUyhlLFt7a2V5OnllLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzW1dlXXx8IXRoaXNbbWVdKGUpKXJldHVybiExO3ZhciB0PWVbZ2VdLHI9dGhpc1t0XTtpZighKHIgaW5zdGFuY2VvZiBudCkpcmV0dXJuIG51bGwhPT1yJiZ0aGlzW3hlXShyKSx0aGlzW3RdPWUsdGhpc1tBXShlKSwhMDtpZihyLnB1c2goZSkpcmV0dXJuIHRoaXNbQV0oZSksITA7dmFyIG49IiI7cmV0dXJuIHRoaXMuaWQ/bj0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKG49IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW2dlXSwnIicpLmNvbmNhdChuLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9fSx7a2V5Om1lLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KGVbZ2VdKSYmZVtwZV09PT10aGlzW3BlXX19LHtrZXk6Y2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6eCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTppZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTprZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGFyYSYmdGhpc1taXSgpW0xdLnBhcmFTdGFjay5wb3AoKX19LHtrZXk6U2UsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW1pdKClbTF0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX19LHtrZXk6RmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pZCYmdGhpc1twZV09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW1FdLnRlbXBsYXRlfX0se2tleTp1ZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX0se2tleTpBLHZhbHVlOmZ1bmN0aW9uKGUpe2VbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaChlKSwhZVtRXSYmdGhpc1tRXSYmKGVbUV09dGhpc1tRXSl9fSx7a2V5OnhlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbVWVdLmluZGV4T2YoZSk7dGhpc1tVZV0uc3BsaWNlKHQsMSl9fSx7a2V5OmVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleTpGLHZhbHVlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzW1dlXSx0aGlzW1RdJiYoZS5jbGVhbih0aGlzW1RdKSxkZWxldGUgdGhpc1tUXSl9fSx7a2V5OnJlLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1VlXS5pbmRleE9mKGUpfX0se2tleTpuZSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RbS2VdPXRoaXMsdGhpc1tVZV0uc3BsaWNlKGUsMCx0KSwhdFtRXSYmdGhpc1tRXSYmKHRbUV09dGhpc1tRXSl9fSx7a2V5OmZlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubmFtZX19LHtrZXk6ZGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXNbVWVdLmxlbmd0aD90aGlzW2pdOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbRWVdKCl9KSkuam9pbigiIil9fSx7a2V5OkJlLGdldDpmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZighdC5fYXR0cmlidXRlcyl7dmFyIHIsbj10Ll9hdHRyaWJ1dGVzPW5ldyBTZXQsaT15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobnVsbD09PXRoaXNbb118fHRoaXNbb11pbnN0YW5jZW9mIGV8fHRoaXNbb11pbnN0YW5jZW9mIG50KWJyZWFrO24uYWRkKG8pfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX19cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsQmUsdC5fYXR0cmlidXRlcyl9fSx7a2V5OnNlLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbSl0oKX1yZXR1cm4hMX19LHtrZXk6Six2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0tlXX19LHtrZXk6Syx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0pdKCl9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbVWVdfX0se2tleTpfLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW2pdJiYodC4kY29udGVudD10aGlzW2pdKTt2YXIgcixuPXkoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Iobi5zKCk7IShyPW4ubigpKS5kb25lOyl7dmFyIGE9ci52YWx1ZSxpPXRoaXNbYV07bnVsbCE9PWkmJihpIGluc3RhbmNlb2YgZT90W2FdPWlbX10oKTppIGluc3RhbmNlb2YgbnQ/aS5pc0VtcHR5KCl8fCh0W2FdPWkuZHVtcCgpKTp0W2FdPWkpfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX1yZXR1cm4gdH19LHtrZXk6TGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LHtrZXk6TWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfX0se2tleTpWLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixuO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6dD15KHRoaXNbV10oKSksZS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtlLm5leHQ9OTticmVha31yZXR1cm4gbj1yLnZhbHVlLGUubmV4dD03LG47Y2FzZSA3OmUubmV4dD0zO2JyZWFrO2Nhc2UgOTplLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHQuZShlLnQwKTtjYXNlIDE0OnJldHVybiBlLnByZXY9MTQsdC5mKCksZS5maW5pc2goMTQpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1sxLDExLDE0LDE3XV0pfSkpfSx7a2V5OnFlLHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sYSxpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOm49eSh0aGlzW1ZdKCkpLGUucHJldj0xLG4ucygpO2Nhc2UgMzppZigoYT1uLm4oKSkuZG9uZSl7ZS5uZXh0PTEzO2JyZWFrfWlmKGk9YS52YWx1ZSx0JiZyIT09dC5oYXMoaVtnZV0pKXtlLm5leHQ9MTE7YnJlYWt9cmV0dXJuIG89dGhpc1tVXSgpLChzPWlbTWVdKG8pKS5zdWNjZXNzfHwodGhpc1tMXS5mYWlsaW5nTm9kZT1pKSxlLm5leHQ9MTEscztjYXNlIDExOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTM6ZS5uZXh0PTE4O2JyZWFrO2Nhc2UgMTU6ZS5wcmV2PTE1LGUudDA9ZS5jYXRjaCgxKSxuLmUoZS50MCk7Y2FzZSAxODpyZXR1cm4gZS5wcmV2PTE4LG4uZigpLGUuZmluaXNoKDE4KTtjYXNlIDIxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNSwxOCwyMV1dKX0pKX0se2tleTpOLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSx7a2V5Ok8sdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzW0xdLmNoaWxkcmVuLnB1c2goZSl9fSx7a2V5OlUsdmFsdWU6ZnVuY3Rpb24oKXt9fSx7a2V5OkMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXIscj12b2lkIDA9PT10P251bGw6dCxhPWUuaW5jbHVkZSxpPXZvaWQgMD09PWF8fGE7aWYodGhpc1tMXS5nZW5lcmF0b3Ipe3ZhciBvPXRoaXNbVV0oKSxzPXRoaXNbTF0uZmFpbGluZ05vZGVbTWVdKG8pO2lmKCFzLnN1Y2Nlc3MpcmV0dXJuIHM7cy5odG1sJiZ0aGlzW09dKHMuaHRtbCxzLmJib3gpLGRlbGV0ZSB0aGlzW0xdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tMXS5nZW5lcmF0b3I9dGhpc1txZV0ocixpKTtmb3IoOzspe3ZhciBjPXRoaXNbTF0uZ2VuZXJhdG9yLm5leHQoKTtpZihjLmRvbmUpYnJlYWs7dmFyIHU9Yy52YWx1ZTtpZighdS5zdWNjZXNzKXJldHVybiB1O3UuaHRtbCYmdGhpc1tPXSh1Lmh0bWwsdS5iYm94KX1yZXR1cm4gdGhpc1tMXS5nZW5lcmF0b3I9bnVsbCxuLkhUTUxSZXN1bHQuRU1QVFl9fSx7a2V5OlBlLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXNbWmVdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfX0se2tleTp6ZSx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbQmVdLG49dGhpc1taZV07cmV0dXJuKHQ9ZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBiKGUpfSh0KXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8bSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gci5oYXMoZSkmJiFuLmhhcyhlKX0pKX19LHtrZXk6QWUsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFNldCxuPXkodGhpc1tVZV0pO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlW0plXShlLHIpfWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19LHtrZXk6SmUsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzW0dlXShlLHQpO3I/dGhpc1tOZV0ocixlLHQpOnRoaXNbQWVdKGUsdCl9fSx7a2V5OkdlLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy51c2Usbj10aGlzLnVzZWhyZWY7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPW51bGwsbz1udWxsLGM9bnVsbCx1PXI7aWYobj8odT1uLG4uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LG4ubGVuZ3RoLTEpOm4uc3RhcnRzV2l0aCgiLiNzb20oIikmJm4uZW5kc1dpdGgoIikiKT9vPW4uc2xpY2UoNixuLmxlbmd0aC0xKTpuLnN0YXJ0c1dpdGgoIiMiKT9jPW4uc2xpY2UoMSk6bi5zdGFydHNXaXRoKCIuIyIpJiYoYz1uLnNsaWNlKDIpKSk6ci5zdGFydHNXaXRoKCIjIik/Yz1yLnNsaWNlKDEpOm89cix0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiIsYz9pPWUuZ2V0KGMpOihpPSgwLHMuc2VhcmNoTm9kZSkoZS5nZXQoT2UpLHRoaXMsbywhMCwhMSkpJiYoaT1pWzBdKSwhaSlyZXR1cm4oMCxhLndhcm4pKCJYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICIuY29uY2F0KHUsIi4iKSksbnVsbDtpZihpW2dlXSE9PXRoaXNbZ2VdKXJldHVybigwLGEud2FybikoIlhGQSAtIEluY29tcGF0aWJsZSBwcm90b3R5cGU6ICIuY29uY2F0KGlbZ2VdLCIgIT09ICIpLmNvbmNhdCh0aGlzW2dlXSwiLiIpKSxudWxsO2lmKHQuaGFzKGkpKXJldHVybigwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpLG51bGw7dC5hZGQoaSk7dmFyIGw9aVtHZV0oZSx0KTtyZXR1cm4gbCYmaVtOZV0obCxlLHQpLGlbQWVdKGUsdCksdC5kZWxldGUoaSksaX19LHtrZXk6TmUsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKHIuaGFzKGUpKSgwLGEud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO2Vsc2V7IXRoaXNbal0mJmVbal0mJih0aGlzW2pdPWVbal0pLG5ldyBTZXQocikuYWRkKGUpO3ZhciBuLGk9eSh0aGlzW3plXShlW1plXSkpO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG89bi52YWx1ZTt0aGlzW29dPWVbb10sdGhpc1taZV0mJnRoaXNbWmVdLmFkZChvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9dmFyIHMsYz15KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGMucygpOyEocz1jLm4oKSkuZG9uZTspe3ZhciB1PXMudmFsdWU7aWYoIXRoaXNbQmVdLmhhcyh1KSl7dmFyIGw9dGhpc1t1XSxmPWVbdV07aWYobCBpbnN0YW5jZW9mIG50KXt2YXIgaCxkPXkobFtVZV0pO3RyeXtmb3IoZC5zKCk7IShoPWQubigpKS5kb25lOyloLnZhbHVlW0plXSh0LHIpfWNhdGNoKGUpe2QuZShlKX1maW5hbGx5e2QuZigpfWZvcih2YXIgcD1sW1VlXS5sZW5ndGgsZz1mW1VlXS5sZW5ndGg7cDxnO3ArKyl7dmFyIHY9ZVtVZV1bcF1bSV0oKTtpZighbC5wdXNoKHYpKWJyZWFrO3ZbS2VdPXRoaXMsdGhpc1tVZV0ucHVzaCh2KSx2W0plXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1sKXtpZihudWxsIT09Zil7dmFyIG09ZltJXSgpO21bS2VdPXRoaXMsdGhpc1t1XT1tLHRoaXNbVWVdLnB1c2gobSksbVtKZV0odCxyKX19ZWxzZSBsW0FlXSh0LHIpLGYmJmxbTmVdKGYsdCxyKX19fWNhdGNoKGUpe2MuZShlKX1maW5hbGx5e2MuZigpfX19fSx7a2V5OkksdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSxuPXkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO3RyeXtyW2ldPXRoaXNbaV19Y2F0Y2goZSl7KDAsYS5zaGFkb3cpKHIsaSx0aGlzW2ldKX19fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJbUmVdPSIiLmNvbmNhdChyW2dlXSkuY29uY2F0KGV0KyspLHJbVWVdPVtdO3ZhciBvLHM9eShPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz1vLnZhbHVlO2lmKHRoaXNbQmVdLmhhcyhjKSlyW2NdPWVbJGVdKHRoaXNbY10pO2Vsc2V7dmFyIHU9dGhpc1tjXTtyW2NdPXUgaW5zdGFuY2VvZiBudD9uZXcgbnQodVtWZV0pOm51bGx9fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX12YXIgbCxmPXkodGhpc1tVZV0pO3RyeXtmb3IoZi5zKCk7IShsPWYubigpKS5kb25lOyl7dmFyIGg9bC52YWx1ZSxkPWhbZ2VdLHA9aFtJXSgpO3JbVWVdLnB1c2gocCkscFtLZV09cixudWxsPT09cltkXT9yW2RdPXA6cltkXVtVZV0ucHVzaChwKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9cmV0dXJuIHJ9fSx7a2V5OlcsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW1VlXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0W2dlXT09PWV9KSk6dGhpc1tVZV19fSx7a2V5OiQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19fSx7a2V5OlgsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbSF0oZSx0LHIpKX19LHtrZXk6SCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiB2KCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOmlmKCJwYXJlbnQiIT09ZSl7YS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGEubmV4dD0zLHJbS2VdO2Nhc2UgMzpyZXR1cm4gYS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDppPXkocltVZV0pLGEucHJldj01LGkucygpO2Nhc2UgNzppZigobz1pLm4oKSkuZG9uZSl7YS5uZXh0PTE5O2JyZWFrfWlmKChzPW8udmFsdWUpW2dlXSE9PWUpe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHM7Y2FzZSAxMjppZihzLm5hbWUhPT1lKXthLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGEubmV4dD0xNSxzO2Nhc2UgMTU6aWYoIXQmJiFzW2ZlXSgpKXthLm5leHQ9MTc7YnJlYWt9cmV0dXJuIGEuZGVsZWdhdGVZaWVsZChzW0hdKGUsdCwhMSksInQwIiwxNyk7Y2FzZSAxNzphLm5leHQ9NzticmVhaztjYXNlIDE5OmEubmV4dD0yNDticmVhaztjYXNlIDIxOmEucHJldj0yMSxhLnQxPWEuY2F0Y2goNSksaS5lKGEudDEpO2Nhc2UgMjQ6cmV0dXJuIGEucHJldj0yNCxpLmYoKSxhLmZpbmlzaCgyNCk7Y2FzZSAyNzppZighbnx8IXJbQmVdLmhhcyhlKSl7YS5uZXh0PTMwO2JyZWFrfXJldHVybiBhLm5leHQ9MzAsbmV3IGF0KHIsZSxyW2VdKTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSxudWxsLFtbNSwyMSwyNCwyN11dKX0pKSgpfX1dLFt7a2V5OiRlLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVskZV0odCl9KSk6Im9iamVjdCI9PT1nKHQpJiZudWxsIT09dD9PYmplY3QuYXNzaWduKHt9LHQpOnR9fV0pLGV9KCk7dC5YRkFPYmplY3Q9cnQ7dmFyIG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dyh0aGlzLGUpLHRoaXNbVmVdPXQsdGhpc1tVZV09W119cmV0dXJuIFMoZSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbVWVdLmxlbmd0aDw9dGhpc1tWZV0/KHRoaXNbVWVdLnB1c2goZSksITApOigoMCxhLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdChlW2dlXSwnIiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAnKS5jb25jYXQodGhpc1tWZV0sIiBjaGlsZHJlbiIpKSwhMSl9fSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpc1tVZV0ubGVuZ3RofX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXNbVWVdLmxlbmd0aD90aGlzW1VlXVswXVtfXSgpOnRoaXNbVWVdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbX10oKX0pKX19LHtrZXk6SSx2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXNbVmVdKTtyZXR1cm4gdFtVZV09dGhpc1tVZV0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtJXSgpfSkpLHR9fSx7a2V5OiJjaGlsZHJlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVWVdfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tVZV0ubGVuZ3RoPTB9fV0pLGV9KCk7dC5YRkFPYmplY3RBcnJheT1udDt2YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt3KHRoaXMsZSksdGhpc1tLZV09dCx0aGlzW2dlXT1yLHRoaXNbal09bix0aGlzW0VdPSExLHRoaXNbUmVdPSJhdHRyaWJ1dGUiLmNvbmNhdChldCsrKX1yZXR1cm4gUyhlLFt7a2V5OkosdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLZV19fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6RWUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tqXX19LHtrZXk6c2UsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbS2VdPT09ZXx8dGhpc1tLZV1bc2VdKGUpfX1dKSxlfSgpO3QuWEZBQXR0cmlidXRlPWF0O3ZhciBpdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGEsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYodyh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLGUsbikpW2pdPSIiLGFbWGVdPW51bGwsIiN0ZXh0IiE9PW4pe3ZhciBvPW5ldyBNYXA7YVtEZV09bztmb3IodmFyIHM9MCxjPU9iamVjdC5lbnRyaWVzKGkpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD11KGNbc10sMiksZj1sWzBdLGg9bFsxXTtvLnNldChmLG5ldyBhdChkKGEpLGYsaCkpfWlmKGkuaGFzT3duUHJvcGVydHkodmUpKXt2YXIgcD1pW3ZlXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09cCYmKCJkYXRhR3JvdXAiPT09cD9hW1hlXT0hMToiZGF0YVZhbHVlIj09PXAmJihhW1hlXT0hMCkpfX1yZXR1cm4gYVtFXT0hMSxhfXJldHVybiBTKHIsW3trZXk6X2UsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tnZV07aWYoIiN0ZXh0IiE9PXQpe3ZhciByPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbcGVdPT09dHQ/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KG4pLmNvbmNhdChyKSk7dmFyIG8scz15KHRoaXNbRGVdLmVudHJpZXMoKSk7dHJ5e2ZvcihzLnMoKTshKG89cy5uKCkpLmRvbmU7KXt2YXIgYz11KG8udmFsdWUsMiksbD1jWzBdLGY9Y1sxXSxoPSgwLGEudXRmOFN0cmluZ1RvU3RyaW5nKShsKTtlLnB1c2goIiAiLmNvbmNhdChoLCc9IicpLmNvbmNhdCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShmW2pdKSwnIicpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYobnVsbCE9PXRoaXNbWGVdJiYodGhpc1tYZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpLHRoaXNbal18fDAhPT10aGlzW1VlXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbal0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2pdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2pdKSk6dGhpc1tqXVtfZV0oZSk7ZWxzZXt2YXIgZCxwPXkodGhpc1tVZV0pO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOylkLnZhbHVlW19lXShlKX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX19ZS5wdXNoKCI8LyIuY29uY2F0KG4pLmNvbmNhdChyLCI+IikpfWVsc2UgZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLGkuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbal0pKX19LHtrZXk6eWUsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpc1tqXSl7dmFyIHQ9bmV3IHIodGhpc1twZV0sIiN0ZXh0Iik7dGhpc1tBXSh0KSx0W2pdPXRoaXNbal0sdGhpc1tqXT0iIn1yZXR1cm4gdGhpc1tBXShlKSwhMH19LHtrZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbal0mJnRoaXNbVWVdLmxlbmd0aD4wKXt2YXIgZT1uZXcgcih0aGlzW3BlXSwiI3RleHQiKTt0aGlzW0FdKGUpLGVbal09dGhpc1tqXSxkZWxldGUgdGhpc1tqXX19fSx7a2V5Ok1lLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbZ2VdP24uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqXX0pOm4uSFRNTFJlc3VsdC5FTVBUWX19LHtrZXk6Vyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbVWVdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ2VdPT09ZX0pKTp0aGlzW1VlXX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW0RlXX19LHtrZXk6JCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzW0RlXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1ddKGUpfX0se2tleTpILHZhbHVlOnYoKS5tYXJrKChmdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpO3JldHVybiB2KCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoIShyPXRoaXNbRGVdLmdldChlKSkpe28ubmV4dD00O2JyZWFrfXJldHVybiBvLm5leHQ9NCxyO2Nhc2UgNDpuPXkodGhpc1tVZV0pLG8ucHJldj01LG4ucygpO2Nhc2UgNzppZigoYT1uLm4oKSkuZG9uZSl7by5uZXh0PTE2O2JyZWFrfWlmKChpPWEudmFsdWUpW2dlXSE9PWUpe28ubmV4dD0xMjticmVha31yZXR1cm4gby5uZXh0PTEyLGk7Y2FzZSAxMjppZighdCl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmRlbGVnYXRlWWllbGQoaVtIXShlLHQpLCJ0MCIsMTQpO2Nhc2UgMTQ6by5uZXh0PTc7YnJlYWs7Y2FzZSAxNjpvLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpvLnByZXY9MTgsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsbi5mKCksby5maW5pc2goMjEpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE4LDIxLDI0XV0pfSkpfSx7a2V5OkQsdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk7cmV0dXJuIHYoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZighKHI9dGhpc1tEZV0uZ2V0KGUpKXx8dCYmcltFXSl7by5uZXh0PTQ7YnJlYWt9cmV0dXJuIG8ubmV4dD00LHI7Y2FzZSA0Om49eSh0aGlzW1VlXSksby5wcmV2PTUsbi5zKCk7Y2FzZSA3OmlmKChhPW4ubigpKS5kb25lKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGk9YS52YWx1ZSxvLmRlbGVnYXRlWWllbGQoaVtEXShlLHQpLCJ0MCIsMTApO2Nhc2UgMTA6by5uZXh0PTc7YnJlYWs7Y2FzZSAxMjpvLm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDpvLnByZXY9MTQsby50MT1vLmNhdGNoKDUpLG4uZShvLnQxKTtjYXNlIDE3OnJldHVybiBvLnByZXY9MTcsbi5mKCksby5maW5pc2goMTcpO2Nhc2UgMjA6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxyLHRoaXMsW1s1LDE0LDE3LDIwXV0pfSkpfSx7a2V5OnosdmFsdWU6digpLm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3ZhciBhLGksbztyZXR1cm4gdigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmE9eSh0aGlzW1VlXSksZS5wcmV2PTEsYS5zKCk7Y2FzZSAzOmlmKChpPWEubigpKS5kb25lKXtlLm5leHQ9MTI7YnJlYWt9aWYoKG89aS52YWx1ZSlbZ2VdIT09dHx8biYmb1tFXSl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD04LG87Y2FzZSA4OmlmKCFyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChvW3pdKHQscixuKSwidDAiLDEwKTtjYXNlIDEwOmUubmV4dD0zO2JyZWFrO2Nhc2UgMTI6ZS5uZXh0PTE3O2JyZWFrO2Nhc2UgMTQ6ZS5wcmV2PTE0LGUudDE9ZS5jYXRjaCgxKSxhLmUoZS50MSk7Y2FzZSAxNzpyZXR1cm4gZS5wcmV2PTE3LGEuZigpLGUuZmluaXNoKDE3KTtjYXNlIDIwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxNCwxNywyMF1dKX0pKX0se2tleTpvZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpc1tYZV0/MD09PXRoaXNbVWVdLmxlbmd0aHx8dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tYZV19fSx7a2V5OnEsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXNbWGVdPzA9PT10aGlzW1VlXS5sZW5ndGg/dGhpc1tqXS50cmltKCk6dGhpc1tVZV1bMF1bcGVdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tVZV1bMF1bRWVdKCkudHJpbSgpOm51bGw6dGhpc1tqXS50cmltKCl9fSx7a2V5OlRlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe2U9ZS52YWx1ZXx8IiIsdGhpc1tqXT1lLnRvU3RyaW5nKCl9KSl9LHtrZXk6Xyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3BlXSksdGhpc1tqXSYmKHQuJGNvbnRlbnQ9dGhpc1tqXSksdC4kbmFtZT10aGlzW2dlXSx0LmNoaWxkcmVuPVtdO3ZhciByLG49eSh0aGlzW1VlXSk7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgYT1yLnZhbHVlO3QuY2hpbGRyZW4ucHVzaChhW19dKGUpKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dC5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGksbz15KHRoaXNbRGVdKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPXUoaS52YWx1ZSwyKSxjPXNbMF0sbD1zWzFdO3QuYXR0cmlidXRlc1tjXT1sW2pdfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4gdH19XSkscn0ocnQpO3QuWG1sT2JqZWN0PWl0O3ZhciBvdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIHcodGhpcyxyKSwoYT10LmNhbGwodGhpcyxlLG4pKVtqXT0iIixhfXJldHVybiBTKHIsW3trZXk6YmUsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpc1tqXSs9ZX19LHtrZXk6Uix2YWx1ZTpmdW5jdGlvbigpe319XSkscn0ocnQpO3QuQ29udGVudE9iamVjdD1vdDt2YXIgc3Q9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4sYSl7dmFyIGk7cmV0dXJuIHcodGhpcyxyKSwoaT10LmNhbGwodGhpcyxlLG4pKVtZZV09YSxpfXJldHVybiBTKHIsW3trZXk6Uix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpc1tqXT0oMCxuLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbWWVdWzBdLHZhbGlkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlW1llXS5pbmNsdWRlcyh0KX19KX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihlKXtjKHAoci5wcm90b3R5cGUpLEYsdGhpcykuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzW1llXX19XSkscn0ob3QpO3QuT3B0aW9uT2JqZWN0PXN0O3ZhciBjdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKCl7cmV0dXJuIHcodGhpcyxyKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gUyhyLFt7a2V5OlIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2pdPXRoaXNbal0udHJpbSgpfX1dKSxyfShvdCk7dC5TdHJpbmdPYmplY3Q9Y3Q7dmFyIHV0PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSxuLGEsaSl7dmFyIG87cmV0dXJuIHcodGhpcyxyKSwobz10LmNhbGwodGhpcyxlLG4pKVtIZV09YSxvW1FlXT1pLG99cmV0dXJuIFMocixbe2tleTpSLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tqXT0oMCxuLmdldEludGVnZXIpKHtkYXRhOnRoaXNbal0sZGVmYXVsdFZhbHVlOnRoaXNbSGVdLHZhbGlkYXRlOnRoaXNbUWVdfSl9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oZSl7YyhwKHIucHJvdG90eXBlKSxGLHRoaXMpLmNhbGwodGhpcyxlKSxkZWxldGUgdGhpc1tIZV0sZGVsZXRlIHRoaXNbUWVdfX1dKSxyfShvdCk7dC5JbnRlZ2VyT2JqZWN0PXV0O3ZhciBsdD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUsbil7cmV0dXJuIHcodGhpcyxyKSx0LmNhbGwodGhpcyxlLG4sMCwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfSkpfXJldHVybiBTKHIpfSh1dCk7dC5PcHRpb24wMT1sdDt2YXIgZnQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlLG4pe3JldHVybiB3KHRoaXMsciksdC5jYWxsKHRoaXMsZSxuLDEsKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0pKX1yZXR1cm4gUyhyKX0odXQpO3QuT3B0aW9uMTA9ZnR9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkhUTUxSZXN1bHQ9dm9pZCAwLHQuZ2V0QkJveD1mdW5jdGlvbihlKXt2YXIgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwiLTEiKX0pKTtpZihyLmxlbmd0aDw0fHxyWzJdPDB8fHJbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTt2YXIgbj1vKHIsNCk7cmV0dXJue3g6blswXSx5Om5bMV0sd2lkdGg6blsyXSxoZWlnaHQ6blszXX19LHQuZ2V0Q29sb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9byhhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSwzKSxyPXRbMF0sbj10WzFdLGE9dFsyXTtpZighZSlyZXR1cm57cixnOm4sYjphfTt2YXIgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpPzA6ZX0pKTtpZihpLmxlbmd0aDwzKXJldHVybntyLGc6bixiOmF9O3ZhciBzPW8oaSwzKTtyZXR1cm57cjpyPXNbMF0sZzpuPXNbMV0sYjphPXNbMl19fSx0LmdldEZsb2F0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO3ZhciBhPXBhcnNlSW50KHQsMTApO3JldHVybiFpc05hTihhKSYmbihhKT9hOnJ9LHQuZ2V0S2V5d29yZD1sLHQuZ2V0TWVhc3VyZW1lbnQ9Zix0LmdldFJhdGlvPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybntudW06MSxkZW46MX07dmFyIHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KGUpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKGUpfSkpO2lmKDE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpLDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O3ZhciByPW8odCwyKTtyZXR1cm57bnVtOnJbMF0sZGVuOnJbMV19fSx0LmdldFJlbGV2YW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2UudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfX0pKTpbXX0sdC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLGUubGVuZ3RoLTEpOmV9O3ZhciBhPXIoMik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgYz17cHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNtOmZ1bmN0aW9uKGUpe3JldHVybiBlLzIuNTQqNzJ9LG1tOmZ1bmN0aW9uKGUpe3JldHVybiBlLzI1LjQqNzJ9LGluOmZ1bmN0aW9uKGUpe3JldHVybiA3MiplfSxweDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHU9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGF0YSxyPWUuZGVmYXVsdFZhbHVlLG49ZS52YWxpZGF0ZTtyZXR1cm4gdCYmbih0PXQudHJpbSgpKT90OnJ9ZnVuY3Rpb24gZihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO2lmKHQ9dHx8IjAiLCFlKXJldHVybiBmKHQpO3ZhciByPWUudHJpbSgpLm1hdGNoKHUpO2lmKCFyKXJldHVybiBmKHQpO3ZhciBuPW8ociwzKSxhPW5bMV0saT1uWzJdLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZih0KTtpZigwPT09cylyZXR1cm4gMDt2YXIgbD1jW2ldO3JldHVybiBsP2wocyk6c312YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdWNjZXNzPXQsdGhpcy5odG1sPXIsdGhpcy5iYm94PW4sdGhpcy5icmVha05vZGU9YX12YXIgdCxyLG47cmV0dXJuIHQ9ZSxuPVt7a2V5OiJGQUlMVVJFIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGUoITEsbnVsbCxudWxsLG51bGwpKX19LHtrZXk6IkVNUFRZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiRU1QVFkiLG5ldyBlKCEwLG51bGwsbnVsbCxudWxsKSl9fSx7a2V5OiJicmVha05vZGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSghMSxudWxsLG51bGwsdCl9fSx7a2V5OiJzdWNjZXNzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUoITAsdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19XSwocj1be2tleToiaXNCcmVhayIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxuJiZpKHQsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkhUTUxSZXN1bHQ9aH0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO3ZhciByPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PXIsdC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX19LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9fSxkYXRhc2V0czp7aWQ6MixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfX0sZm9ybTp7aWQ6MyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9fSxwZGY6e2lkOjUsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX19LHNpZ25hdHVyZTp7aWQ6NixjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9fSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX19LHRlbXBsYXRlOntpZDo5LGNoZWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfX0seGRjOntpZDoxMCxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX19LHhkcDp7aWQ6MTEsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfX0seGZkZjp7aWQ6MTIsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX19LHhodG1sOntpZDoxMyxjaGVjazpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYT15KHIpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1kLmRvdERvdH0pKSlyZXR1cm4gbnVsbDt2YXIgbz1wLmdldChhWzBdLm5hbWUpLHM9MDtvPyhlPW8oZSx0KSxzPTEpOmU9dHx8ZTtmb3IodmFyIGM9YS5sZW5ndGg7czxjO3MrKyl7dmFyIHU9YVtzXSxsPXUubmFtZSxmPXUub3BlcmF0b3IsaD11LmluZGV4O2lmKCFpc0Zpbml0ZShoKSlyZXR1cm4gYVtzXS5pbmRleD0wLG0oZSxhLnNsaWNlKHMpKTt2YXIgZz12b2lkIDA7c3dpdGNoKGYpe2Nhc2UgZC5kb3Q6Zz1lW24uJGdldENoaWxkcmVuQnlOYW1lXShsLCExKTticmVhaztjYXNlIGQuZG90RG90Omc9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0obCwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6Zz0oZz1lW24uJGdldENoaWxkcmVuQnlDbGFzc10obCkpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P2cuY2hpbGRyZW46W2ddfWlmKDA9PT1nLmxlbmd0aClyZXR1cm4gbShlLGEuc2xpY2UocykpO2lmKCEoaDxnLmxlbmd0aCkpcmV0dXJuIGFbc10uaW5kZXg9aC1nLmxlbmd0aCxtKGUsYS5zbGljZShzKSk7dmFyIHY9Z1toXTtpZighKHYgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIiksbnVsbDtlPXZ9cmV0dXJuIG51bGx9LHQuc2VhcmNoTm9kZT1mdW5jdGlvbihlLHQscil7dmFyIGE9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxpPXkociwhKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYyx1PXAuZ2V0KGlbMF0ubmFtZSksbD0wO3U/KGM9ITAsZT1bdShlLHQpXSxsPTEpOihjPW51bGw9PT10LGU9W3R8fGVdKTtmb3IodmFyIGY9ZnVuY3Rpb24ocil7dmFyIHMsdT1pW2xdLGY9dS5uYW1lLGg9dS5jYWNoZU5hbWUscD11Lm9wZXJhdG9yLHY9dS5pbmRleCx5PVtdLG09byhlKTt0cnl7Zm9yKG0ucygpOyEocz1tLm4oKSkuZG9uZTspe3ZhciBiPXMudmFsdWU7aWYoYiBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXt2YXIgdz12b2lkIDAsaz12b2lkIDA7aWYoYSYmKChrPWcuZ2V0KGIpKXx8KGs9bmV3IE1hcCxnLnNldChiLGspKSx3PWsuZ2V0KGgpKSwhdyl7c3dpdGNoKHApe2Nhc2UgZC5kb3Q6dz1iW24uJGdldENoaWxkcmVuQnlOYW1lXShmLCExKTticmVhaztjYXNlIGQuZG90RG90Onc9YltuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZiwhMCk7YnJlYWs7Y2FzZSBkLmRvdEhhc2g6dz0odz1iW24uJGdldENoaWxkcmVuQnlDbGFzc10oZikpaW5zdGFuY2VvZiBuLlhGQU9iamVjdEFycmF5P3cuY2hpbGRyZW46W3ddfWEmJmsuc2V0KGgsdyl9dy5sZW5ndGg+MCYmeS5wdXNoKHcpfX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9aWYoMD09PXkubGVuZ3RoJiYhYyYmMD09PWwpe3ZhciBTPXRbbi4kZ2V0UGFyZW50XSgpO3JldHVybih0PVMpPyhsPS0xLGU9W3RdLCJjb250aW51ZSIpOnt2Om51bGx9fWU9aXNGaW5pdGUodik/eS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2PGUubGVuZ3RofSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdl19KSk6eS5mbGF0KCl9LGg9aS5sZW5ndGg7bDxoO2wrKyl7dmFyIHY9ZigpO2lmKCJjb250aW51ZSIhPT12JiYib2JqZWN0Ij09PXModikpcmV0dXJuIHYudn1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX07dmFyIG49cigyMDYpLGE9cigyMDgpLGk9cigyKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8dShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2woZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGwoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgZj0vXlteLltdKy8saD0vXlteXF1dKy8sZD17ZG90OjAsZG90RG90OjEsZG90SGFzaDoyLGRvdEJyYWNrZXQ6Myxkb3RQYXJlbjo0fSxwPW5ldyBNYXAoW1siJGRhdGEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmV9XSxbIiRyZWNvcmQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdfV0sWyIkdGVtcGxhdGUiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGVtcGxhdGV9XSxbIiRjb25uZWN0aW9uU2V0IixmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbm5lY3Rpb25TZXR9XSxbIiRmb3JtIixmdW5jdGlvbihlLHQpe3JldHVybiBlLmZvcm19XSxbIiRsYXlvdXQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGF5b3V0fV0sWyIkaG9zdCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0fV0sWyIkZGF0YVdpbmRvdyIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kYXRhV2luZG93fV0sWyIkZXZlbnQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlbnR9XSxbIiEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YXNldHN9XSxbIiR4ZmEiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9XSxbInhmYSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX1dLFsiJCIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH1dXSksZz1uZXcgV2Vha01hcCx2PWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIHkoZSx0KXt2YXIgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChmKTtpZighbilyZXR1cm4gbnVsbDtmb3IodmFyIGEsbz1jKG4sMSlbMF0scz1be25hbWU6byxjYWNoZU5hbWU6Ii4iK28saW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6ZC5kb3R9XSx1PW8ubGVuZ3RoO3U8ZS5sZW5ndGg7KXt2YXIgbD11O2lmKCJbIiE9PWUuY2hhckF0KHUrKykpe3ZhciBwPXZvaWQgMDtzd2l0Y2goZS5jaGFyQXQodSkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7dSsrLHA9ZC5kb3REb3Q7YnJlYWs7Y2FzZSIjIjp1KysscD1kLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtwPWQuZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7cD1kLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6cD1kLmRvdH1pZighKG49ZS5zbGljZSh1KS5tYXRjaChmKSkpYnJlYWs7dSs9KG89YyhuLDEpWzBdKS5sZW5ndGgscy5wdXNoKHtuYW1lOm8sY2FjaGVOYW1lOmUuc2xpY2UobCx1KSxvcGVyYXRvcjpwLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9ZWxzZXtpZighKG49ZS5zbGljZSh1KS5tYXRjaChoKSkpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7cy5hdCgtMSkuaW5kZXg9IioiPT09KGE9KGE9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQoYSwxMCl8fDAsdSs9blswXS5sZW5ndGgrMX19cmV0dXJuIHN9ZnVuY3Rpb24gbShlLHQpe3ZhciByLGE9bnVsbCxpPW8odCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXtmb3IodmFyIHM9ci52YWx1ZSxjPXMubmFtZSx1PXMuaW5kZXgsbD0wLGY9aXNGaW5pdGUodSk/dTowO2w8PWY7bCsrKXt2YXIgaD1lW24uJG5hbWVzcGFjZUlkXT09PXY/LTE6ZVtuLiRuYW1lc3BhY2VJZF07YT1uZXcgbi5YbWxPYmplY3QoaCxjKSxlW24uJGFwcGVuZENoaWxkXShhKX1lPWF9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybiBhfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmRlcj12b2lkIDA7dmFyIG49cigyMDYpLGE9cigyMTEpLGk9cigyMDkpLG89cigyMDgpLHM9cigyKTtmdW5jdGlvbiBjKGUpe3JldHVybiBjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxjKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8ZihlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gbChlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZihlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gZihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gaChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWMoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1jKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09YyhhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHA9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gZyhlKXt2YXIgdD1uZXcgYS5UZXh0KHt9KTtyZXR1cm4gdFtuLiRjb250ZW50XT1lLHR9dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucm9vdD10LHRoaXMuZGF0YXNldHM9dC5kYXRhc2V0cyx0LmRhdGFzZXRzJiZ0LmRhdGFzZXRzLmRhdGE/dGhpcy5kYXRhPXQuZGF0YXNldHMuZGF0YTp0aGlzLmRhdGE9bmV3IG4uWG1sT2JqZWN0KG8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkLCJkYXRhIiksdGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoLHRoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT10LnRlbXBsYXRlW24uJGNsb25lXSgpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToiX2lzQ29uc3VtZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfX0se2tleToiX2lzTWF0Y2hUZW1wbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfX0se2tleToiYmluZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSksdGhpcy5mb3JtfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0se2tleToiX2JpbmRWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2lmKGVbbi4kZGF0YV09dCxlW24uJGhhc1NldHRhYmxlVmFsdWVdKCkpaWYodFtuLiRpc0RhdGFWYWx1ZV0oKSl7dmFyIGk9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oZyhpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmZS51aSYmZS51aS5jaG9pY2VMaXN0JiYibXVsdGlTZWxlY3QiPT09ZS51aS5jaG9pY2VMaXN0Lm9wZW4pe3ZhciBvPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRjb250ZW50XS50cmltKCl9KSkuam9pbigiXG4iKTtlW24uJHNldFZhbHVlXShnKG8pKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKDAscy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtuLiRpc0RhdGFWYWx1ZV0oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTooMCxzLndhcm4pKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9fSx7a2V5OiJfZmluZERhdGFCeU5hbWVUb0NvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgaSxzLGM9MDtjPDM7YysrKXtmb3IoaT1yW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCExLCEwKTtzPWkubmV4dCgpLnZhbHVlOylpZih0PT09c1tuLiRpc0RhdGFWYWx1ZV0oKSlyZXR1cm4gcztpZihyW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1yW24uJG5vZGVOYW1lXSlicmVhaztyPXJbbi4kZ2V0UGFyZW50XSgpfXJldHVybiBhJiYoKHM9KGk9dGhpcy5kYXRhW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLCEwLCExKSkubmV4dCgpLnZhbHVlKXx8KHM9KGk9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSkubmV4dCgpLnZhbHVlKSYmc1tuLiRpc0RhdGFWYWx1ZV0oKSk/czpudWxsfX0se2tleToiX3NldFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSl7dmFyIHIsbz1sKGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7dmFyIGM9ci52YWx1ZSxmPWMucmVmLGg9Yy50YXJnZXQ7aWYoIWMuY29ubmVjdGlvbiYmZil7dmFyIGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxmLCExLCExKTtpZihkKXt2YXIgcD11KGQsMSlbMF07aWYocFtuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpe3ZhciBnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsaCwhMSwhMSk7aWYoZyl7dmFyIHY9dShnLDEpWzBdO2lmKHZbbi4kaXNEZXNjZW5kZW50XShlKSl7dmFyIHk9dltuLiRnZXRQYXJlbnRdKCk7aWYodiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fHkgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7ZWxzZSBpZih2IGluc3RhbmNlb2YgYS5CaW5kSXRlbXN8fHkgaW5zdGFuY2VvZiBhLkJpbmRJdGVtcykoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtlbHNle3ZhciBtPXBbbi4kdGV4dF0oKSxiPXZbbi4kbm9kZU5hbWVdO2lmKHYgaW5zdGFuY2VvZiBuLlhGQUF0dHJpYnV0ZSl7dmFyIHc9T2JqZWN0LmNyZWF0ZShudWxsKTt3W2JdPW07dmFyIGs9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKHkpLmNvbnN0cnVjdG9yLFt3XSk7eVtiXT1rW2JdfWVsc2Ugdi5oYXNPd25Qcm9wZXJ0eShuLiRjb250ZW50KT8odltuLiRkYXRhXT1wLHZbbi4kY29udGVudF09bSx2W24uJGZpbmFsaXplXSgpKTooMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogIi5jb25jYXQoaCwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoZiwiLiIpKX19fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfX19fSx7a2V5OiJfYmluZEl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoIml0ZW1zIikmJmUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpJiYhZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXt2YXIgcixvPWwoZS5pdGVtcy5jaGlsZHJlbik7dHJ5e2ZvcihvLnMoKTshKHI9by5uKCkpLmRvbmU7KXt2YXIgYz1yLnZhbHVlO2Vbbi4kcmVtb3ZlQ2hpbGRdKGMpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1lLml0ZW1zLmNsZWFyKCk7dmFyIGY9bmV3IGEuSXRlbXMoe30pLGg9bmV3IGEuSXRlbXMoe30pO2Vbbi4kYXBwZW5kQ2hpbGRdKGYpLGUuaXRlbXMucHVzaChmKSxlW24uJGFwcGVuZENoaWxkXShoKSxlLml0ZW1zLnB1c2goaCk7dmFyIGQscD1sKGUuYmluZEl0ZW1zLmNoaWxkcmVuKTt0cnl7Zm9yKHAucygpOyEoZD1wLm4oKSkuZG9uZTspe3ZhciB2PWQudmFsdWUseT12LnJlZixtPXYubGFiZWxSZWYsYj12LnZhbHVlUmVmO2lmKCF2LmNvbm5lY3Rpb24mJnkpe3ZhciB3PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQseSwhMSwhMSk7aWYodyl7dmFyIGssUz1sKHcpO3RyeXtmb3IoUy5zKCk7IShrPVMubigpKS5kb25lOyl7dmFyIHg9ay52YWx1ZTtpZih4W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpe3ZhciBPPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHgsbSwhMCwhMSk7aWYoTyl7dmFyIEE9dShPLDEpWzBdO2lmKEFbbi4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7dmFyIEM9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QseCxiLCEwLCExKTtpZihDKXt2YXIgRj11KEMsMSlbMF07aWYoRltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXt2YXIgUD1nKEFbbi4kdGV4dF0oKSksVD1nKEZbbi4kdGV4dF0oKSk7ZltuLiRhcHBlbmRDaGlsZF0oUCksZi50ZXh0LnB1c2goUCksaFtuLiRhcHBlbmRDaGlsZF0oVCksaC50ZXh0LnB1c2goVCl9ZWxzZSgwLHMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogIi5jb25jYXQoYiwiLiIpKX1lbHNlKDAscy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiAiLmNvbmNhdChtLCIuIikpfWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZiAoIi5jb25jYXQoeSwiKTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpKX19Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9fWVsc2UoMCxzLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQoeSwiLiIpKX19fWNhdGNoKGUpe3AuZShlKX1maW5hbGx5e3AuZigpfX19fSx7a2V5OiJfYmluZE9jY3VycmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE7aWYodC5sZW5ndGg+MSYmKChhPWVbbi4kY2xvbmVdKCkpW24uJHJlbW92ZUNoaWxkXShhLm9jY3VyKSxhLm9jY3VyPW51bGwpLHRoaXMuX2JpbmRWYWx1ZShlLHRbMF0sciksdGhpcy5fc2V0UHJvcGVydGllcyhlLHRbMF0pLHRoaXMuX2JpbmRJdGVtcyhlLHRbMF0pLDEhPT10Lmxlbmd0aClmb3IodmFyIGk9ZVtuLiRnZXRQYXJlbnRdKCksbz1lW24uJG5vZGVOYW1lXSxzPWlbbi4kaW5kZXhPZl0oZSksYz0xLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGw9dFtjXSxmPWFbbi4kY2xvbmVdKCk7aVtvXS5wdXNoKGYpLGlbbi4kaW5zZXJ0QXRdKHMrYyxmKSx0aGlzLl9iaW5kVmFsdWUoZixsLHIpLHRoaXMuX3NldFByb3BlcnRpZXMoZixsKSx0aGlzLl9iaW5kSXRlbXMoZixsKX19fSx7a2V5OiJfY3JlYXRlT2NjdXJyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW1wdHlNZXJnZSl7dmFyIHQ9ZS5vY2N1cjtpZih0JiYhKHQuaW5pdGlhbDw9MSkpe3ZhciByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoclthXWluc3RhbmNlb2Ygbi5YRkFPYmplY3RBcnJheSl7dmFyIGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lLm5hbWV9KSkubGVuZ3RoOnJbYV0uY2hpbGRyZW4ubGVuZ3RoO3ZhciBvPXJbbi4kaW5kZXhPZl0oZSkrMSxzPXQuaW5pdGlhbC1pO2lmKHMpe3ZhciBjPWVbbi4kY2xvbmVdKCk7Y1tuLiRyZW1vdmVDaGlsZF0oYy5vY2N1ciksYy5vY2N1cj1udWxsLHJbYV0ucHVzaChjKSxyW24uJGluc2VydEF0XShvLGMpO2Zvcih2YXIgdT0xO3U8czt1Kyspe3ZhciBsPWNbbi4kY2xvbmVdKCk7clthXS5wdXNoKGwpLHJbbi4kaW5zZXJ0QXRdKG8rdSxsKX19fX19fX0se2tleToiX2dldE9jY3VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5vY2N1cjtpZighcnx8IXQpcmV0dXJuWzEsMV07dmFyIG49LTE9PT1yLm1heD8xLzA6ci5tYXg7cmV0dXJuW3IubWluLG5dfX0se2tleToiX3NldEFuZEJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpLHRoaXMuX2JpbmRJdGVtcyhlLHQpLHRoaXMuX2JpbmRFbGVtZW50KGUsdCl9fSx7a2V5OiJfYmluZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7dmFyIGEsbz1sKGVbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioby5zKCk7IShhPW8ubigpKS5kb25lOyl7dmFyIGM9YS52YWx1ZTtpZighY1tuLiRkYXRhXSlpZih2b2lkIDAhPT10aGlzLl9tZXJnZU1vZGV8fCJzdWJmb3JtIiE9PWNbbi4kbm9kZU5hbWVdKXtpZihjW24uJGlzQmluZGFibGVdKCkpe3ZhciBmPSExLGg9bnVsbCxkPW51bGwsZz1udWxsO2lmKGMuYmluZCl7c3dpdGNoKGMuYmluZC5tYXRjaCl7Y2FzZSJub25lIjp0aGlzLl9zZXRBbmRCaW5kKGMsdCk7Y29udGludWU7Y2FzZSJnbG9iYWwiOmY9ITA7YnJlYWs7Y2FzZSJkYXRhUmVmIjppZighYy5iaW5kLnJlZil7KDAscy53YXJuKSgiWEZBIC0gcmVmIGlzIGVtcHR5IGluIG5vZGUgIi5jb25jYXQoY1tuLiRub2RlTmFtZV0sIi4iKSksdGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWQ9Yy5iaW5kLnJlZn1jLmJpbmQucGljdHVyZSYmKGg9Yy5iaW5kLnBpY3R1cmVbbi4kY29udGVudF0pfXZhciB2PXUodGhpcy5fZ2V0T2NjdXJJbmZvKGMpLDIpLHk9dlswXSxtPXZbMV07aWYoZCl7aWYobnVsbD09PShnPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsZCwhMCwhMSkpKXtpZighKGc9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsZCkpKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGdbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGMsZyk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoZz1nLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWVbbi4kY29uc3VtZWRdfSkpKSxnLmxlbmd0aD5tP2c9Zy5zbGljZSgwLG0pOjA9PT1nLmxlbmd0aCYmKGc9bnVsbCksZyYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZnLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWMubmFtZSl7dGhpcy5fc2V0QW5kQmluZChjLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Zm9yKHZhciBiPVtdO2IubGVuZ3RoPG07KXt2YXIgdz10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjLm5hbWUsY1tuLiRoYXNTZXR0YWJsZVZhbHVlXSgpLHQsZik7aWYoIXcpYnJlYWs7d1tuLiRjb25zdW1lZF09ITAsYi5wdXNoKHcpfWc9Yi5sZW5ndGg+MD9iOm51bGx9ZWxzZXtpZighKGc9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYy5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlKSl7aWYoMD09PXkpe3IucHVzaChjKTtjb250aW51ZX12YXIgaz10W24uJG5hbWVzcGFjZUlkXT09PXA/LTE6dFtuLiRuYW1lc3BhY2VJZF07Zz1jW24uJGRhdGFdPW5ldyBuLlhtbE9iamVjdChrLGMubmFtZSksdGhpcy5lbXB0eU1lcmdlJiYoZ1tuLiRjb25zdW1lZF09ITApLHRbbi4kYXBwZW5kQ2hpbGRdKGcpLHRoaXMuX3NldEFuZEJpbmQoYyxnKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihnW24uJGNvbnN1bWVkXT0hMCksZz1bZ119fWc/dGhpcy5fYmluZE9jY3VycmVuY2VzKGMsZyxoKTp5PjA/dGhpcy5fc2V0QW5kQmluZChjLHQpOnIucHVzaChjKX19ZWxzZXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWMubWVyZ2VNb2RlO3ZhciBTPXRbbi4kZ2V0Q2hpbGRyZW5dKCk7aWYoUy5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYyxbU1swXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe3ZhciB4PXRbbi4kbmFtZXNwYWNlSWRdPT09cD8tMTp0W24uJG5hbWVzcGFjZUlkXSxPPWNbbi4kZGF0YV09bmV3IG4uWG1sT2JqZWN0KHgsYy5uYW1lfHwicm9vdCIpO3Rbbi4kYXBwZW5kQ2hpbGRdKE8pLHRoaXMuX2JpbmRFbGVtZW50KGMsTyl9fX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ci5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZVtuLiRnZXRQYXJlbnRdKClbbi4kcmVtb3ZlQ2hpbGRdKGUpfSkpfX1dKSYmZCh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuQmluZGVyPXZ9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDt2YXIgbj1yKDIwNiksYT1yKDIwOCksaT1yKDIxMiksbz1yKDIxMykscz1yKDIwNyksYz1yKDIpLHU9cigyMTQpLGw9cigxMzUpLGY9cigyMDkpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LGgoZSl9ZnVuY3Rpb24gZCgpe3JldHVybiBkPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ayhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8QShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1oKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aChuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWgoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBtKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmIoZSx0KX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxiKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj1rKGUpO2lmKHQpe3ZhciBhPWsodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChuLGFyZ3VtZW50cyxhKX1lbHNlIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09aCh0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gayhlKXtyZXR1cm4gaz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sayhlKX1mdW5jdGlvbiBTKCl7Uz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9YS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG89YS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixzPWEudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGVbdF19dHJ5e2Moe30sIiIpfWNhdGNoKGUpe2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXJ9fWZ1bmN0aW9uIHUoZSx0LHIsYSl7dmFyIGk9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiBkP3Q6ZCxvPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLHM9bmV3IEYoYXx8W10pO3JldHVybiBuKG8sIl9pbnZva2UiLHt2YWx1ZTp4KGUscixzKX0pLG99ZnVuY3Rpb24gbChlLHQscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxyKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD11O3ZhciBmPXt9O2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fXZhciB2PXt9O2ModixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZixtPXkmJnkoeShQKFtdKSkpO20mJm0hPT10JiZyLmNhbGwobSxpKSYmKHY9bSk7dmFyIGI9Zy5wcm90b3R5cGU9ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2KTtmdW5jdGlvbiB3KGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YyhlLHQsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pKX0pKX1mdW5jdGlvbiBrKGUsdCl7ZnVuY3Rpb24gYShuLGksbyxzKXt2YXIgYz1sKGVbbl0sZSxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgdT1jLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1oKGYpJiZyLmNhbGwoZiwiX19hd2FpdCIpP3QucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe2EoIm5leHQiLGUsbyxzKX0pLChmdW5jdGlvbihlKXthKCJ0aHJvdyIsZSxvLHMpfSkpOnQucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbihlKXt1LnZhbHVlPWUsbyh1KX0pLChmdW5jdGlvbihlKXtyZXR1cm4gYSgidGhyb3ciLGUsbyxzKX0pKX1zKGMuYXJnKX12YXIgaTtuKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsbil7YShlLHIsdCxuKX0pKX1yZXR1cm4gaT1pP2kudGhlbihuLG4pOm4oKX19KX1mdW5jdGlvbiB4KGUsdCxyKXt2YXIgbj0ic3VzcGVuZGVkU3RhcnQiO3JldHVybiBmdW5jdGlvbihhLGkpe2lmKCJleGVjdXRpbmciPT09bil0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZigiY29tcGxldGVkIj09PW4pe2lmKCJ0aHJvdyI9PT1hKXRocm93IGk7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1mb3Ioci5tZXRob2Q9YSxyLmFyZz1pOzspe3ZhciBvPXIuZGVsZWdhdGU7aWYobyl7dmFyIHM9TyhvLHIpO2lmKHMpe2lmKHM9PT1mKWNvbnRpbnVlO3JldHVybiBzfX1pZigibmV4dCI9PT1yLm1ldGhvZClyLnNlbnQ9ci5fc2VudD1yLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1yLm1ldGhvZCl7aWYoInN1c3BlbmRlZFN0YXJ0Ij09PW4pdGhyb3cgbj0iY29tcGxldGVkIixyLmFyZztyLmRpc3BhdGNoRXhjZXB0aW9uKHIuYXJnKX1lbHNlInJldHVybiI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoInJldHVybiIsci5hcmcpO249ImV4ZWN1dGluZyI7dmFyIGM9bChlLHQscik7aWYoIm5vcm1hbCI9PT1jLnR5cGUpe2lmKG49ci5kb25lPyJjb21wbGV0ZWQiOiJzdXNwZW5kZWRZaWVsZCIsYy5hcmc9PT1mKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpjLmFyZyxkb25lOnIuZG9uZX19InRocm93Ij09PWMudHlwZSYmKG49ImNvbXBsZXRlZCIsci5tZXRob2Q9InRocm93IixyLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9dC5tZXRob2Qsbj1lLml0ZXJhdG9yW3JdO2lmKHZvaWQgMD09PW4pcmV0dXJuIHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsTyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCl8fCJyZXR1cm4iIT09ciYmKHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIityKyInIG1ldGhvZCIpKSxmO3ZhciBhPWwobixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09YS50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPWEuYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBpPWEuYXJnO3JldHVybiBpP2kuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWkudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmk6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24gQShlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBGKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goQSx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1nLG4oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMH0pLG4oZywiY29uc3RydWN0b3IiLHt2YWx1ZTpwLGNvbmZpZ3VyYWJsZTohMH0pLHAuZGlzcGxheU5hbWU9YyhnLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxjKGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGsucHJvdG90eXBlKSxjKGsucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWssZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBrKHUodCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhiKSxjKGIscywiR2VuZXJhdG9yIiksYyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksYyhiLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPVAsRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkYscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksYz1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQyhyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Mocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX0sZX12YXIgeD1TKCkubWFyayhMKTtmdW5jdGlvbiBPKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1BKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBBKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBDKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/QyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gQyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufXZhciBGPWEuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLFA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUPS9eSChcZCspJC8sST1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLEU9W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGooZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07dmFyIHQ9ZS5ib3JkZXJbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF8oZSx0KXtpZighZS52YWx1ZSl7dmFyIHI9bmV3IFZ0KHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLnZhbHVlPXJ9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24gTChlKXt2YXIgdCxyLGE7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihpKXtmb3IoOzspc3dpdGNoKGkucHJldj1pLm5leHQpe2Nhc2UgMDp0PU8oZVtuLiRnZXRDaGlsZHJlbl0oKSksaS5wcmV2PTEsdC5zKCk7Y2FzZSAzOmlmKChyPXQubigpKS5kb25lKXtpLm5leHQ9MTI7YnJlYWt9aWYoISgoYT1yLnZhbHVlKWluc3RhbmNlb2YgX3QpKXtpLm5leHQ9ODticmVha31yZXR1cm4gaS5kZWxlZ2F0ZVlpZWxkKGFbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCksInQwIiw3KTtjYXNlIDc6cmV0dXJuIGkuYWJydXB0KCJjb250aW51ZSIsMTApO2Nhc2UgODpyZXR1cm4gaS5uZXh0PTEwLGE7Y2FzZSAxMDppLm5leHQ9MzticmVhaztjYXNlIDEyOmkubmV4dD0xNzticmVhaztjYXNlIDE0OmkucHJldj0xNCxpLnQxPWkuY2F0Y2goMSksdC5lKGkudDEpO2Nhc2UgMTc6cmV0dXJuIGkucHJldj0xNyx0LmYoKSxpLmZpbmlzaCgxNyk7Y2FzZSAyMDpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLHgsbnVsbCxbWzEsMTQsMTcsMjBdXSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS52YWxpZGF0ZSYmImVycm9yIj09PWUudmFsaWRhdGUubnVsbFRlc3R9ZnVuY3Rpb24gTihlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47dmFyIHQscj1udWxsLGE9TyhlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihhLnMoKTshKHQ9YS5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlO2lmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXtyPWk7YnJlYWt9fX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1pZighcnx8IXIucmVmKXJldHVybiB2b2lkKGVbbi4kdGFiSW5kZXhdPWVbbi4kZ2V0UGFyZW50XSgpW24uJHRhYkluZGV4XSk7dmFyIG89ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtuLiR0YWJJbmRleF09KytvW24uJHRhYkluZGV4XTt2YXIgcz1vW24uJHNlYXJjaE5vZGVdKHIucmVmLGUpO2lmKCFzKXJldHVybjtlPXNbMF19fWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1lLmFzc2lzdDtpZihyKXt2YXIgYT1yW24uJHRvSFRNTF0oKTthJiYodC50aXRsZT1hKTt2YXIgaT1yLnJvbGUubWF0Y2goVCk7aWYoaSl7dmFyIG89aVsxXTt0LnJvbGU9ImhlYWRpbmciLHRbImFyaWEtbGV2ZWwiXT1vfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBzPWVbbi4kZ2V0UGFyZW50XSgpOyJyb3ciPT09cy5sYXlvdXQmJihzLmFzc2lzdCYmIlRIIj09PXMuYXNzaXN0LnJvbGU/dC5yb2xlPSJjb2x1bW5oZWFkZXIiOnQucm9sZT0iY2VsbCIpfX1mdW5jdGlvbiBCKGUpe2lmKCFlLmFzc2lzdClyZXR1cm4gbnVsbDt2YXIgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gJChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTtudWxsPT09dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGUmJih0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lLHRbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCl9ZnVuY3Rpb24gWChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKTt0W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT09PWUmJih0W24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEpfWZ1bmN0aW9uIEgoZSl7aWYoZVtuLiRleHRyYV0pcmV0dXJuITE7aWYoZVtuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSwiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7dmFyIHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj1udWxsO2lmKGUudGFyZ2V0KXtpZighKHI9dFtuLiRzZWFyY2hOb2RlXShlLnRhcmdldCxlW24uJGdldFBhcmVudF0oKSkpKXJldHVybiExO3I9clswXX12YXIgYT10W24uJGV4dHJhXSxpPWEuY3VycmVudFBhZ2VBcmVhLG89YS5jdXJyZW50Q29udGVudEFyZWE7aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSlyZXR1cm4gciBpbnN0YW5jZW9mIGR0fHwocj1udWxsKSxlLnN0YXJ0TmV3PyhlW24uJGV4dHJhXS50YXJnZXQ9cnx8aSwhMCk6ISghcnx8cj09PWl8fChlW24uJGV4dHJhXS50YXJnZXQ9ciwwKSk7ciBpbnN0YW5jZW9mIHBlfHwocj1udWxsKTt2YXIgcyxjPXImJnJbbi4kZ2V0UGFyZW50XSgpLHU9YztpZihlLnN0YXJ0TmV3KWlmKHIpe3ZhciBsPWMuY29udGVudEFyZWEuY2hpbGRyZW4sZj1sLmluZGV4T2YobyksaD1sLmluZGV4T2Yocik7LTEhPT1mJiZmPGgmJih1PW51bGwpLHM9aC0xfWVsc2Ugcz1pLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobyk7ZWxzZXtpZighcnx8cj09PW8pcmV0dXJuITE7cz1jLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSx1PWM9PT1pP251bGw6Y31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PXUsZVtuLiRleHRyYV0uaW5kZXg9cywhMH1mdW5jdGlvbiBxKGUsdCxyKXt2YXIgYT1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxpPWFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSxvPXRbbi4kZ2V0U3ViZm9ybVBhcmVudF07dFtuLiRnZXRTdWJmb3JtUGFyZW50XT1mdW5jdGlvbigpe3JldHVybiBlfSxhW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dmFyIHM9dFtuLiR0b0hUTUxdKHIpO2Vbbi4kYWRkSFRNTF0ocy5odG1sLHMuYmJveCksYVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWksdFtuLiRnZXRTdWJmb3JtUGFyZW50XT1vfXZhciBHPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJhcHBlYXJhbmNlRmlsdGVyIikpLmlkPWUuaWR8fCIiLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImFyYyIsITApKS5jaXJjdWxhcj0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaGFuZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4uc3RhcnRBbmdsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksbi5zd2VlcEFuZ2xlPSgwLHMuZ2V0RmxvYXQpKHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVkZ2U9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmVkZ2V8fG5ldyBBZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuZmlsbCYmInZpc2libGUiPT09dGhpcy5maWxsLnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO3ZhciBpPXt4bWxuczpQLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpZT17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6UCxjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXt2YXIgYz10aGlzLnN0YXJ0QW5nbGUqTWF0aC5QSS8xODAsdT10aGlzLnN3ZWVwQW5nbGUqTWF0aC5QSS8xODAsbD10aGlzLnN3ZWVwQW5nbGU+MTgwPzE6MCxmPTUwKigxK01hdGguY29zKGMpKSxoPTUwKigxLU1hdGguc2luKGMpKSxkPTUwKigxK01hdGguY29zKGMrdSkpLHA9NTAqKDEtTWF0aC5zaW4oYyt1KSk7ZT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6UCxkOiJNICIuY29uY2F0KGYsIiAiKS5jb25jYXQoaCwiIEEgNTAgNTAgMCAiKS5jb25jYXQobCwiIDAgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCksdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fSxPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfXZhciBnPXtuYW1lOiJzdmciLGNoaWxkcmVuOltlXSxhdHRyaWJ1dGVzOml9O3JldHVybiBNKHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbZ119KTooZy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZykpfX1dKSxyfShuLlhGQU9iamVjdCksVz1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiYXJlYSIsITApKS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cCh0LDQpLGE9clswXSxpPXJbMV0sbz1yWzJdLHM9clszXTt0aGlzW24uJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCxhK28pLHRoaXNbbi4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQsaStzKSx0aGlzW24uJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywicG9zaXRpb24iKSxyPXtzdHlsZTp0LGlkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUFyZWEiXX07KDAsby5pc1ByaW50T25seSkodGhpcykmJnIuY2xhc3MucHVzaCgieGZhUHJpbnRPbmx5IiksdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSk7dmFyIGE9W107dGhpc1tuLiRleHRyYV09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTt2YXIgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO3ZhciBjPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjphfSx1PVt0aGlzLngsdGhpcy55LHRoaXNbbi4kZXh0cmFdLndpZHRoLHRoaXNbbi4kZXh0cmFdLmhlaWdodF07cmV0dXJuIGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjLHUpfX1dKSxyfShuLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYXNzaXN0IiwhMCkpLmlkPWUuaWR8fCIiLG4ucm9sZT1lLnJvbGV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNwZWFrPW51bGwsbi50b29sVGlwPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtuLiRjb250ZW50XT90aGlzLnRvb2xUaXBbbi4kY29udGVudF06bnVsbH19XSkscn0obi5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJhcmNvZGUiLCEwKSkuY2hhckVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxuLmNoZWNrc3VtPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pLG4uZGF0YUNvbHVtbkNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZGF0YUxlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5kYXRhUHJlcD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhUHJlcCxbIm5vbmUiLCJmbGF0ZUNvbXByZXNzIl0pLG4uZGF0YVJvd0NvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhUm93Q291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4uZW5kQ2hhcj1lLmVuZENoYXJ8fCIiLG4uZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9OH19KSxuLmlkPWUuaWR8fCIiLG4ubW9kdWxlSGVpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSxuLm1vZHVsZVdpZHRoPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLG4ucHJpbnRDaGVja0RpZ2l0PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4ucm93Q29sdW1uUmF0aW89KDAscy5nZXRSYXRpbykoZS5yb3dDb2x1bW5SYXRpbyksbi5zdGFydENoYXI9ZS5zdGFydENoYXJ8fCIiLG4udGV4dExvY2F0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRleHRMb2NhdGlvbixbImJlbG93IiwiYWJvdmUiLCJhYm92ZUVtYmVkZGVkIiwiYmVsb3dFbWJlZGRlZCIsIm5vbmUiXSksbi50cnVuY2F0ZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudHJ1bmNhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pLG4udXBzTW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53aWRlTmFycm93UmF0aW89KDAscy5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pLG4uZW5jcnlwdD1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEs9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJpbmQiLCEwKSkubWF0Y2g9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSksbi5yZWY9ZS5yZWZ8fCIiLG4ucGljdHVyZT1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJiaW5kSXRlbXMiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuQmluZEl0ZW1zPUo7dmFyIFo9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJvb2tlbmQiKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksUT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYm9vbGVhbiIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSgxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19XSkscn0obi5PcHRpb24wMSksZWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImJvcmRlciIsITApKS5icmVhaz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKSxhLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY29ybmVyPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZWRnZT1uZXcgbi5YRkFPYmplY3RBcnJheSg0KSxhLmV4dHJhcz1udWxsLGEuZmlsbD1udWxsLGEubWFyZ2luPW51bGwsYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KWZvcih2YXIgdD1lLmF0KC0xKXx8bmV3IEFlKHt9KSxyPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpO3ZhciBhPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50aGlja25lc3N9KSksaT1bMCwwLDAsMF07dGhpcy5tYXJnaW4mJihpWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0LGlbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldCxpWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0LGlbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0KSx0aGlzW24uJGV4dHJhXT17d2lkdGhzOmEsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbbi4kZXh0cmFdfX0se2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRFeHRyYV0oKS5lZGdlcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kdG9TdHlsZV0oKTtyZXR1cm4gdC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCIsdH0pKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24odCx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSx0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbih0LHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKSx0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUucmFkaXVzfSkpKXt2YXIgcj10aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlW24uJHRvU3R5bGVdKCl9KSk7aWYoMj09PXIubGVuZ3RofHwzPT09ci5sZW5ndGgpZm9yKHZhciBhPXIuYXQoLTEpLGk9ci5sZW5ndGg7aTw0O2krKylyLnB1c2goYSk7dC5ib3JkZXJSYWRpdXM9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJhZGl1c30pKS5qb2luKCIgIil9c3dpdGNoKHRoaXMucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjpjYXNlImhpZGRlbiI6dC5ib3JkZXJTdHlsZT0iIjticmVhaztjYXNlImluYWN0aXZlIjp0LmJvcmRlclN0eWxlPSJub25lIjticmVhaztkZWZhdWx0OnQuYm9yZGVyU3R5bGU9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlfSkpLmpvaW4oIiAiKX1yZXR1cm4gdC5ib3JkZXJXaWR0aD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUud2lkdGh9KSkuam9pbigiICIpLHQuYm9yZGVyQ29sb3I9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbG9yfSkpLmpvaW4oIiAiKSx0fX1dKSxyfShuLlhGQU9iamVjdCksdGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImJyZWFrIiwhMCkpLmFmdGVyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFmdGVyLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiLCJwYWdlRXZlbiIsInBhZ2VPZGQiXSksbi5hZnRlclRhcmdldD1lLmFmdGVyVGFyZ2V0fHwiIixuLmJlZm9yZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5iZWZvcmUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSxuLmJlZm9yZVRhcmdldD1lLmJlZm9yZVRhcmdldHx8IiIsbi5ib29rZW5kTGVhZGVyPWUuYm9va2VuZExlYWRlcnx8IiIsbi5ib29rZW5kVHJhaWxlcj1lLmJvb2tlbmRUcmFpbGVyfHwiIixuLmlkPWUuaWR8fCIiLG4ub3ZlcmZsb3dMZWFkZXI9ZS5vdmVyZmxvd0xlYWRlcnx8IiIsbi5vdmVyZmxvd1RhcmdldD1lLm92ZXJmbG93VGFyZ2V0fHwiIixuLm92ZXJmbG93VHJhaWxlcj1lLm92ZXJmbG93VHJhaWxlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxyZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtBZnRlciIsITApKS5pZD1lLmlkfHwiIixuLmxlYWRlcj1lLmxlYWRlcnx8IiIsbi5zdGFydE5ldz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRhcmdldFR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pLG4udHJhaWxlcj1lLnRyYWlsZXJ8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxuZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiYnJlYWtCZWZvcmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4uc3RhcnROZXc9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi50YXJnZXRUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKSxuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW24uJGV4dHJhXT17fSxzLkhUTUxSZXN1bHQuRkFJTFVSRX19XSkscn0obi5YRkFPYmplY3QpLGFlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJidXR0b24iLCEwKSkuaGlnaGxpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhpZ2hsaWdodCxbImludmVydGVkIiwibm9uZSIsIm91dGxpbmUiLCJwdXNoIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0saT1PKHIuZXZlbnQuY2hpbGRyZW4pO3RyeXtmb3IoaS5zKCk7ISh0PWkubigpKS5kb25lOyl7dmFyIGM9dC52YWx1ZTtpZigiY2xpY2siPT09Yy5hY3Rpdml0eSYmYy5zY3JpcHQpe3ZhciB1PSgwLGwucmVjb3ZlckpzVVJMKShjLnNjcmlwdFtuLiRjb250ZW50XSk7aWYodSl7dmFyIGY9KDAsby5maXhVUkwpKHUudXJsKTtmJiZhLmNoaWxkcmVuLnB1c2goe25hbWU6ImEiLGF0dHJpYnV0ZXM6e2lkOiJsaW5rIit0aGlzW24uJHVpZF0saHJlZjpmLG5ld1dpbmRvdzp1Lm5ld1dpbmRvdyxjbGFzczpbInhmYUxpbmsiXSxzdHlsZTp7fX0sY2hpbGRyZW46W119KX19fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3MoYSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxpZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FsY3VsYXRlIiwhMCkpLmlkPWUuaWR8fCIiLG4ub3ZlcnJpZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLm1lc3NhZ2U9bnVsbCxuLnNjcmlwdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxvZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2FwdGlvbiIsITApKS5pZD1lLmlkfHwiIixuLnBsYWNlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJlc2VydmU9TWF0aC5jZWlsKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4uZm9udD1udWxsLG4ubWFyZ2luPW51bGwsbi5wYXJhPW51bGwsbi52YWx1ZT1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kZ2V0RXh0cmEsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQ7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnI9dGhpcy5yZXNlcnZlPD0wP3I6dGhpcy5yZXNlcnZlfXRoaXNbbi4kZXh0cmFdPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6cn0pfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTt2YXIgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oZSkuaHRtbDtpZighdClyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgcj10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXt2YXIgYT10aGlzW24uJGdldEV4dHJhXShlKSxpPWEudyxjPWEuaDtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT1pO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWN9fXZhciB1PVtdOyJzdHJpbmciPT10eXBlb2YgdD91LnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6dS5wdXNoKHQpO3ZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihsLndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpfXJldHVybigwLG8uc2V0UGFyYSkodGhpcyxudWxsLHQpLHRoaXNbbi4kcG9wUGFyYV0oKSx0aGlzLnJlc2VydmU9cixzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpsLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjp1fSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxzZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxjZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiY2VydGlmaWNhdGVzIiwhMCkpLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi5pZD1lLmlkfHwiIixuLnVybD1lLnVybHx8IiIsbi51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmVuY3J5cHRpb249bnVsbCxuLmlzc3VlcnM9bnVsbCxuLmtleVVzYWdlPW51bGwsbi5vaWRzPW51bGwsbi5zaWduaW5nPW51bGwsbi5zdWJqZWN0RE5zPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjaGVja0J1dHRvbiIsITApKS5pZD1lLmlkfHwiIixuLm1hcms9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSksbi5zaGFwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pLG4uc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsaT0oMCxvLnRvU3R5bGUpKCJtYXJnaW4iKSxjPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO2kud2lkdGg9aS5oZWlnaHQ9Yzt2YXIgdSxsPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxmPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW24uJHRvSFRNTF0oKS5odG1sfHxbXSxoPXtvbjoodm9pZCAwIT09ZlswXT9mWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1mWzFdP2ZbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbbi4kdGV4dF0oKXx8Im9mZiIpPT09aC5vbnx8dm9pZCAwLHA9bFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtuLiR1aWRdO3AgaW5zdGFuY2VvZiBSZT8oYT1wW24uJHVpZF0sdD0icmFkaW8iLHI9InhmYVJhZGlvIix1PXBbbi4kZGF0YV0mJnBbbi4kZGF0YV1bbi4kdWlkXXx8cFtuLiR1aWRdKToodD0iY2hlY2tib3giLHI9InhmYUNoZWNrYm94Iix1PWxbbi4kZGF0YV0mJmxbbi4kZGF0YV1bbi4kdWlkXXx8bFtuLiR1aWRdKTt2YXIgdj17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTppLGZpZWxkSWQ6ZyxkYXRhSWQ6dSx0eXBlOnQsY2hlY2tlZDpkLHhmYU9uOmgub24seGZhT2ZmOmgub2ZmLCJhcmlhLWxhYmVsIjpCKGwpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBhJiYodi5hdHRyaWJ1dGVzLm5hbWU9YSksUihsKSYmKHYuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHYuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt2XX0pfX1dKSxyfShuLlhGQU9iamVjdCksbGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNob2ljZUxpc3QiLCEwKSkuY29tbWl0T249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5vcGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSxuLnRleHRFbnRyeT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5ib3JkZXI9bnVsbCxuLmV4dHJhcz1udWxsLG4ubWFyZ2luPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxvLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9ci5mb250JiZyLmZvbnQuc2l6ZXx8MTAsaT17Zm9udFNpemU6ImNhbGMoIi5jb25jYXQoYSwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpfSxjPVtdO2lmKHIuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoPjApe3ZhciB1PXIuaXRlbXMsbD0wLGY9MDsyPT09dS5jaGlsZHJlbi5sZW5ndGgmJihmPTEtKGw9dS5jaGlsZHJlblswXS5zYXZlKSk7Zm9yKHZhciBoPXUuY2hpbGRyZW5bbF1bbi4kdG9IVE1MXSgpLmh0bWwsZD11LmNoaWxkcmVuW2ZdW24uJHRvSFRNTF0oKS5odG1sLHA9ITEsZz1yLnZhbHVlJiZyLnZhbHVlW24uJHRleHRdKCl8fCIiLHY9MCx5PWgubGVuZ3RoO3Y8eTt2Kyspe3ZhciBtPXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmRbdl18fGhbdl0sc3R5bGU6aX0sdmFsdWU6aFt2XX07ZFt2XT09PWcmJihtLmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9cD0hMCksYy5wdXNoKG0pfXB8fGMuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfXZhciBiPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX07cmV0dXJuIFIocikmJihiWyJhcmlhLXJlcXVpcmVkIl09ITAsYi5yZXF1aXJlZD0hMCksIm11bHRpU2VsZWN0Ij09PXRoaXMub3BlbiYmKGIubXVsdGlwbGU9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbe25hbWU6InNlbGVjdCIsY2hpbGRyZW46YyxhdHRyaWJ1dGVzOmJ9XX0pfX1dKSxyfShuLlhGQU9iamVjdCksZmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbG9yIiwhMCkpLmNTcGFjZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4udmFsdWU9ZS52YWx1ZT8oMCxzLmdldENvbG9yKShlLnZhbHVlKToiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT9jLlV0aWwubWFrZUhleENvbG9yKHRoaXMudmFsdWUucix0aGlzLnZhbHVlLmcsdGhpcy52YWx1ZS5iKTpudWxsfX1dKSxyfShuLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbWIiKSkuaWQ9ZS5pZHx8IiIsbi5udW1iZXJPZkNlbGxzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksZGU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImNvbm5lY3QiLCEwKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uaWQ9ZS5pZHx8IiIsbi5yZWY9ZS5yZWZ8fCIiLG4udXNhZ2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5waWN0dXJlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLHBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb250ZW50QXJlYSIsITApKS5oPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KSxuLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxuLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxuLmRlc2M9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2xlZnQ6KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0scj1bInhmYUNvbnRlbnRhcmVhIl07cmV0dXJuKDAsby5pc1ByaW50T25seSkodGhpcykmJnIucHVzaCgieGZhUHJpbnRPbmx5Iikscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczpyLGlkOnRoaXNbbi4kdWlkXX19KX19XSkscn0obi5YRkFPYmplY3QpLGdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJjb3JuZXIiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5pbnZlcnRlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uam9pbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5qb2luLFsic3F1YXJlIiwicm91bmQiXSksbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnJhZGl1cz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl1cyksbi5zdHJva2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSxuLnRoaWNrbmVzcz0oMCxzLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtyZXR1cm4gZS5yYWRpdXM9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2ZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZSIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVSh0aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCkseWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRhdGVUaW1lIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTt0aGlzW24uJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxtZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGF0ZVRpbWVFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGlja2VyPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLHI9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOnJbbi4kdWlkXSxkYXRhSWQ6cltuLiRkYXRhXSYmcltuLiRkYXRhXVtuLiR1aWRdfHxyW24uJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjpCKHIpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBSKHIpJiYoYS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsYS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxiZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZGVjaW1hbCIpKS5mcmFjRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pLG4uaWQ9ZS5pZHx8IiIsbi5sZWFkRGlnaXRzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLHdlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJkZWZhdWx0VWkiLCEwKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLGtlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkZXNjIiwhMCkpLmlkPWUuaWR8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksU2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImRpZ2VzdE1ldGhvZCIsWyIiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiUklQRU1EMTYwIl0pKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyKX0obi5PcHRpb25PYmplY3QpLHhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkaWdlc3RNZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5kaWdlc3RNZXRob2Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLE9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJkcmF3IiwhMCkpLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubG9jYWxlPWUubG9jYWxlfHwiIixhLm1heEg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSxhLm1heFc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSxhLm1pbkg9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSxhLm1pblc9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSxhLm5hbWU9ZS5uYW1lfHwiIixhLnByZXNlbmNlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS5yb3RhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSU5MD09MH19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5ib3JkZXI9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5wYXJhPW51bGwsYS50cmF2ZXJzYWw9bnVsbCxhLnVpPW51bGwsYS52YWx1ZT1udWxsLGEuc2V0UHJvcGVydHk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe18odGhpcyxlKX0pKX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7KDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciB0PXRoaXMudyxyPXRoaXMuaCxhPSgwLG8ubGF5b3V0Tm9kZSkodGhpcyxlKSxjPWEudyx1PWEuaCxsPWEuaXNCcm9rZW47aWYoYyYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7dGhpcy53PWN9aWYodSYmIiI9PT10aGlzLmgmJih0aGlzLmg9dSksJCh0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtYKHRoaXMpO3ZhciBmPSgwLG8udG9TdHlsZSkodGhpcywiZm9udCIsImhBbGlnbiIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsImJvcmRlciIsIm1hcmdpbiIpOygwLG8uc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxmKSxmLm1hcmdpbiYmKGYucGFkZGluZz1mLm1hcmdpbixkZWxldGUgZi5tYXJnaW4pO3ZhciBoPVsieGZhRHJhdyJdO3RoaXMuZm9udCYmaC5wdXNoKCJ4ZmFGb250IiksKDAsby5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7dmFyIGQ9e3N0eWxlOmYsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOmh9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07RCh0aGlzLGQpO3ZhciBnPSgwLG8uY29tcHV0ZUJib3gpKHRoaXMscCxlKSx2PXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXY/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxvLmNyZWF0ZVdyYXBwZXIpKHRoaXMscCksZykpOihwLmNoaWxkcmVuLnB1c2godiksKDAsby5zZXRQYXJhKSh0aGlzLGYsdiksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxwKSxnKSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxBZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZWRnZSIsITApKS5jYXA9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxuLnN0cm9rZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pLG4udGhpY2tuZXNzPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO2lmKE9iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pLCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1dKSxyfShuLlhGQU9iamVjdCksQ2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksRmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY29kaW5ncyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0IiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNlcnRpZmljYXRlPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFRlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0RGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJlbmNyeXB0IiwiZGVjcnlwdCJdKSxuLnRhcmdldD1lLnRhcmdldHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZmlsdGVyPW51bGwsbi5tYW5pZmVzdD1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxJZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZW5jcnlwdGlvbiIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLk9wdGlvbk9iamVjdCksamU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImVuY3J5cHRpb25NZXRob2RzIiwhMCkpLmlkPWUuaWR8fCIiLGEudHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5lbmNyeXB0aW9uTWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxNZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZXZlbnQiLCEwKSkuYWN0aXZpdHk9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aXZpdHksWyJjbGljayIsImNoYW5nZSIsImRvY0Nsb3NlIiwiZG9jUmVhZHkiLCJlbnRlciIsImV4aXQiLCJmdWxsIiwiaW5kZXhDaGFuZ2UiLCJpbml0aWFsaXplIiwibW91c2VEb3duIiwibW91c2VFbnRlciIsIm1vdXNlRXhpdCIsIm1vdXNlVXAiLCJwb3N0RXhlY3V0ZSIsInBvc3RPcGVuIiwicG9zdFByaW50IiwicG9zdFNhdmUiLCJwb3N0U2lnbiIsInBvc3RTdWJtaXQiLCJwcmVFeGVjdXRlIiwicHJlT3BlbiIsInByZVByaW50IiwicHJlU2F2ZSIsInByZVNpZ24iLCJwcmVTdWJtaXQiLCJyZWFkeSIsInZhbGlkYXRpb25TdGF0ZSJdKSxuLmlkPWUuaWR8fCIiLG4ubGlzdGVuPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxpc3RlbixbInJlZk9ubHkiLCJyZWZBbmREZXNjZW5kZW50cyJdKSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5lbmNyeXB0RGF0YT1udWxsLG4uZXhlY3V0ZT1udWxsLG4uc2NyaXB0PW51bGwsbi5zaWduRGF0YT1udWxsLG4uc3VibWl0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLF9lPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJleERhdGEiKSkuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiIsbi5ocmVmPWUuaHJlZnx8IiIsbi5pZD1lLmlkfHwiIixuLm1heExlbmd0aD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTF9fSksbi5uYW1lPWUubmFtZXx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRpc0NEQVRBWG1sLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfX0se2tleTpuLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWR8fCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKSYmKHRoaXNbbi4kY29udGVudF09ZSwhMCl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XVtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5Db250ZW50T2JqZWN0KSxMZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXhPYmplY3QiLCEwKSkuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiLGEuY2xhc3NJZD1lLmNsYXNzSWR8fCIiLGEuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiIsYS5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIixhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJleGNsR3JvdXAiLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIixhLmFuY2hvclR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSxhLmNvbFNwYW49KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF8fC0xPT09ZX19KSxhLmg9ZS5oPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiIsYS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxhLmlkPWUuaWR8fCIiLGEubGF5b3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSksYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLnc9ZS53PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsYS54PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksYS55PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksYS5hc3Npc3Q9bnVsbCxhLmJpbmQ9bnVsbCxhLmJvcmRlcj1udWxsLGEuY2FsY3VsYXRlPW51bGwsYS5jYXB0aW9uPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS52YWxpZGF0ZT1udWxsLGEuY29ubmVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV2ZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmllbGQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRoYXNTZXR0YWJsZVZhbHVlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0LHI9Tyh0aGlzLmZpZWxkLmNoaWxkcmVuKTt0cnl7Zm9yKHIucygpOyEodD1yLm4oKSkuZG9uZTspe3ZhciBhPXQudmFsdWU7aWYoIWEudmFsdWUpe3ZhciBpPW5ldyBWdCh7fSk7YVtuLiRhcHBlbmRDaGlsZF0oaSksYS52YWx1ZT1pfWEudmFsdWVbbi4kc2V0VmFsdWVdKGUpfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19KSl9LHtrZXk6bi4kaXNUaGVyZU1vcmVXaWR0aCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEoZS5sYXlvdXQmJmUubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbbi4kZXh0cmFdLm51bWJlckluTGluZXx8KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITAsMCkpKX19LHtrZXk6bi4kZmx1c2hIVE1MLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfX0se2tleTpuLiRhZGRIVE1MLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9fSx7a2V5Om4uJGdldEF2YWlsYWJsZVNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtpZihOKHRoaXMpLCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTsoMCxvLmZpeERpbWVuc2lvbnMpKHRoaXMpO3ZhciB0PVtdLHI9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAsby5zZXRBY2Nlc3MpKHRoaXMsci5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6cixhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO3ZhciBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fCQodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBzLkhUTUxSZXN1bHQuRkFJTFVSRTt2YXIgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgdT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9dSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfXZhciBsPSgwLG8udG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYUV4Y2xncm91cCJdLGg9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aCYmZi5wdXNoKGgpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWYsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQscD1kPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PHA7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgZz10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmMsaW5jbHVkZTohMH0pO2lmKGcuc3VjY2VzcylicmVhaztpZihnLmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGc7aWYoZCYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PXA7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSxhfHxYKHRoaXMpLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1wKXJldHVybiBhfHxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIHY9MCx5PTA7dGhpcy5tYXJnaW4mJih2PXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0LHk9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBtPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLndpZHRoK3YsdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbbi4kZXh0cmFdLmhlaWdodCt5LHRoaXMuaHx8MCksdz1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykobSkpLCIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKGIpKTt2YXIgaz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIEQodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0scy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLGspLHcpfX1dKSxyfShuLlhGQU9iamVjdCksTmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImV4ZWN1dGUiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4uZXhlY3V0ZVR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pLG4uaWQ9ZS5pZHx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiZXh0cmFzIiwhMCkpLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZVRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWNpbWFsPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXhEYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXh0cmFzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZmxvYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksQmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImZpZWxkIiwhMCkpLmFjY2Vzcz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSxhLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5oPWUuaD8oMCxzLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLGEuaEFsaWduPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5taW5IPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksYS5taW5XPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEucm90YXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUlOTA9PTB9fSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEudz1lLnc/KDAscy5nZXRNZWFzdXJlbWVudCkoZS53KToiIixhLng9KDAscy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSxhLnk9KDAscy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSxhLmFzc2lzdD1udWxsLGEuYmluZD1udWxsLGEuYm9yZGVyPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmNhcHRpb249bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEuZm9udD1udWxsLGEuZm9ybWF0PW51bGwsYS5pdGVtcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKSxhLmtlZXA9bnVsbCxhLm1hcmdpbj1udWxsLGEucGFyYT1udWxsLGEudHJhdmVyc2FsPW51bGwsYS51aT1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhbHVlPW51bGwsYS5iaW5kSXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb25uZWN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRzZXRWYWx1ZSx2YWx1ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBlLnRvU3RyaW5nKCl9LHR9KChmdW5jdGlvbihlKXtfKHRoaXMsZSl9KSl9LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKE4odGhpcyksIXRoaXMudWkpe3ZhciB0O3N3aXRjaCh0aGlzLnVpPW5ldyB6dCh7fSksdGhpcy51aVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpLHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6dD1uZXcgVXQoe30pLHRoaXMudWkudGV4dEVkaXQ9dDticmVhaztjYXNlIDE6dD1uZXcgdWUoe30pLHRoaXMudWkuY2hlY2tCdXR0b249dDticmVhaztjYXNlIDI6dD1uZXcgbGUoe30pLHRoaXMudWkuY2hvaWNlTGlzdD10fXRoaXMudWlbbi4kYXBwZW5kQ2hpbGRdKHQpfWlmKCF0aGlzLnVpfHwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW24uJGV4dHJhXSx0aGlzW24uJHB1c2hQYXJhXSgpO3ZhciByPXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bbi4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsYz10aGlzLmgsbD0wLGY9MDt0aGlzLm1hcmdpbiYmKGw9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsZj10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIGg9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe3ZhciBkPW51bGwsZz1udWxsLHY9MCx5PTA7aWYodGhpcy51aS5jaGVja0J1dHRvbil2PXk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7dmFyIG09KDAsby5sYXlvdXROb2RlKSh0aGlzLGUpLGI9bS53LHc9bS5oO251bGwhPT1iPyh2PWIseT13KTp5PSgwLHUuZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9aWYodis9KGg9aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKSkudyx5Kz1oLmgsdGhpcy5jYXB0aW9uKXt2YXIgaz10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLFM9ay53LHg9ay5oO2lmKGsuaXNCcm9rZW4mJnRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCkscy5IVE1MUmVzdWx0LkZBSUxVUkU7c3dpdGNoKGQ9UyxnPXgsdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6ZCs9djticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmcrPXl9fWVsc2UgZD12LGc9eTtkJiYiIj09PXRoaXMudyYmKGQrPWwsdGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPGQ/ZDp0aGlzLm1pblcpKSxnJiYiIj09PXRoaXMuaCYmKGcrPWYsdGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGc/Zzp0aGlzLm1pbkgpKX1pZih0aGlzW24uJHBvcFBhcmFdKCksKDAsby5maXhEaW1lbnNpb25zKSh0aGlzKSwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PWEsdGhpcy5oPWMsdGhpc1tuLiRwb3BQYXJhXSgpLHMuSFRNTFJlc3VsdC5GQUlMVVJFO1godGhpcyk7dmFyIE89KDAsby50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAsby5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLE8pO3ZhciBBPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJkEucHVzaCgieGZhRm9udCIpLCgwLG8uaXNQcmludE9ubHkpKHRoaXMpJiZBLnB1c2goInhmYVByaW50T25seSIpO3ZhciBDPXtzdHlsZTpPLGlkOnRoaXNbbi4kdWlkXSxjbGFzczpBfTtPLm1hcmdpbiYmKE8ucGFkZGluZz1PLm1hcmdpbixkZWxldGUgTy5tYXJnaW4pLCgwLG8uc2V0QWNjZXNzKSh0aGlzLEEpLHRoaXMubmFtZSYmKEMueGZhTmFtZT10aGlzLm5hbWUpO3ZhciBGPVtdLFA9e25hbWU6ImRpdiIsYXR0cmlidXRlczpDLGNoaWxkcmVuOkZ9O0QodGhpcyxDKTt2YXIgVD10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltuLiR0b1N0eWxlXSgpOm51bGwsST0oMCxvLmNvbXB1dGVCYm94KSh0aGlzLFAsZSksRT10aGlzLnVpW24uJHRvSFRNTF0oKS5odG1sO2lmKCFFKXJldHVybiBPYmplY3QuYXNzaWduKE8sVCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO3RoaXNbbi4kdGFiSW5kZXhdJiYoRS5jaGlsZHJlbiYmRS5jaGlsZHJlblswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tuLiR0YWJJbmRleF06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdKSxFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIE09bnVsbDtpZih0aGlzLnVpLmJ1dHRvbj8oMT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoTT1wKEUuY2hpbGRyZW4uc3BsaWNlKDAsMSksMSlbMF0pLE9iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLFQpKTpPYmplY3QuYXNzaWduKE8sVCksRi5wdXNoKEUpLHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpRS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbbi4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXt2YXIgXz0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSlfPXRoaXMudmFsdWUuZXhEYXRhW24uJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpXz10aGlzLnZhbHVlLnRleHRbbi4kZ2V0RXh0cmFdKCk7ZWxzZXt2YXIgTD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT1MJiYoXz1MLmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiZ0aGlzLnZhbHVlLnRleHQmJnRoaXMudmFsdWUudGV4dC5tYXhDaGFycyYmKEUuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGg9dGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSxfJiYodGhpcy51aS5udW1lcmljRWRpdCYmKF89cGFyc2VGbG9hdChfKSxfPWlzTmFOKF8pPyIiOl8udG9TdHJpbmcoKSksInRleHRhcmVhIj09PUUuY2hpbGRyZW5bMF0ubmFtZT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGV4dENvbnRlbnQ9XzpFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudmFsdWU9Xyl9aWYoIXRoaXMudWkuaW1hZ2VFZGl0JiZFLmNoaWxkcmVuJiZFLmNoaWxkcmVuWzBdJiZ0aGlzLmgpe2g9aHx8aih0aGlzLnVpW24uJGdldEV4dHJhXSgpKTt2YXIgUj0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7KFI9dGhpcy5jYXB0aW9uLnJlc2VydmUpPD0wJiYoUj10aGlzLmNhcHRpb25bbi4kZ2V0RXh0cmFdKGUpLmgpO3ZhciBCPXRoaXMuaC1SLWYtaC5oO0UuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKEIpfWVsc2UgRS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoTSYmRS5jaGlsZHJlbi5wdXNoKE0pLCFyKXJldHVybiBFLmF0dHJpYnV0ZXMuY2xhc3MmJkUuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PWEsdGhpcy5oPWMscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsby5jcmVhdGVXcmFwcGVyKSh0aGlzLFApLEkpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBPLnBhZGRpbmcmJmRlbGV0ZSBPLnBhZGRpbmcsImRpdiI9PT1yLm5hbWUmJihyLm5hbWU9InNwYW4iKSxFLmNoaWxkcmVuLnB1c2gocikscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoUCxJKTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKHIuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksRS5hdHRyaWJ1dGVzLmNsYXNzfHwoRS5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxFLmNoaWxkcmVuLnNwbGljZSgwLDAsciksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1hLHRoaXMuaD1jLHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxQKSxJKX19XSkscn0obi5YRkFPYmplY3QpO3QuRmllbGQ9QmU7dmFyIFVlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmaWxsIiwhMCkpLmlkPWUuaWR8fCIiLG4ucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG4ubGluZWFyPW51bGwsbi5wYXR0ZXJuPW51bGwsbi5yYWRpYWw9bnVsbCxuLnNvbGlkPW51bGwsbi5zdGlwcGxlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PWVbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT0iY29sb3IiLGk9YTtlIGluc3RhbmNlb2YgZWUmJihhPSJiYWNrZ3JvdW5kLWNvbG9yIixpPSJiYWNrZ3JvdW5kIix0IGluc3RhbmNlb2YgenQmJihyLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKGUgaW5zdGFuY2VvZiB4dHx8ZSBpbnN0YW5jZW9mIHopJiYoYT1pPSJmaWxsIixyLmZpbGw9IndoaXRlIik7dmFyIG8scz1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciBjPW8udmFsdWU7aWYoImV4dHJhcyIhPT1jJiYiY29sb3IiIT09Yyl7dmFyIHU9dGhpc1tjXTtpZih1IGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBsPXVbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIGwmJihyW2wuc3RhcnRzV2l0aCgiIyIpP2E6aV09bCkscn19fX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXt2YXIgZj10aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk7cltmLnN0YXJ0c1dpdGgoIiMiKT9hOmldPWZ9cmV0dXJuIHJ9fV0pLHJ9KG4uWEZBT2JqZWN0KSwkZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwiZmlsdGVyIiwhMCkpLmFkZFJldm9jYXRpb25JbmZvPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFkZFJldm9jYXRpb25JbmZvLFsiIiwicmVxdWlyZWQiLCJvcHRpb25hbCIsIm5vbmUiXSksbi5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52ZXJzaW9uPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6bi52ZXJzaW9uLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD01fX0pLG4uYXBwZWFyYW5jZUZpbHRlcj1udWxsLG4uY2VydGlmaWNhdGVzPW51bGwsbi5kaWdlc3RNZXRob2RzPW51bGwsbi5lbmNvZGluZ3M9bnVsbCxuLmVuY3J5cHRpb25NZXRob2RzPW51bGwsbi5oYW5kbGVyPW51bGwsbi5sb2NrRG9jdW1lbnQ9bnVsbCxuLm1kcD1udWxsLG4ucmVhc29ucz1udWxsLG4udGltZVN0YW1wPW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmbG9hdCIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gVShudWxsIT09dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLkNvbnRlbnRPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJmb250IiwhMCkpLmJhc2VsaW5lU2hpZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KSxuLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAscy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5mb250VmVydGljYWxTY2FsZT0oMCxzLmdldEZsb2F0KSh7ZGF0YTplLmZvbnRWZXJ0aWNhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5pZD1lLmlkfHwiIixuLmtlcm5pbmdNb2RlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksbi5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLG4ubGluZVRocm91Z2g9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZXx8Mj09PWV9fSksbi5saW5lVGhyb3VnaFBlcmlvZD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSksbi5vdmVybGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfHwyPT09ZX19KSxuLm92ZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKSxuLnBvc3R1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucG9zdHVyZSxbIm5vcm1hbCIsIml0YWxpYyJdKSxuLnNpemU9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0Iiksbi50eXBlZmFjZT1lLnR5cGVmYWNlfHwiQ291cmllciIsbi51bmRlcmxpbmU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnVuZGVybGluZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDI9PT1lfX0pLG4udW5kZXJsaW5lUGVyaW9kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4ud2VpZ2h0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksbi5leHRyYXM9bnVsbCxuLmZpbGw9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kY2xlYW4sdmFsdWU6ZnVuY3Rpb24oZSl7ZChrKHIucHJvdG90eXBlKSxuLiRjbGVhbix0aGlzKS5jYWxsKHRoaXMsZSksdGhpc1tuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX19LHtrZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSgwLG8udG9TdHlsZSkodGhpcywiZmlsbCIpLHQ9ZS5jb2xvcjtyZXR1cm4gdCYmKCIjMDAwMDAwIj09PXQ/ZGVsZXRlIGUuY29sb3I6dC5zdGFydHNXaXRoKCIjIil8fChlLmJhY2tncm91bmQ9dCxlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IixlLmNvbG9yPSJ0cmFuc3BhcmVudCIpKSx0aGlzLmJhc2VsaW5lU2hpZnQmJihlLnZlcnRpY2FsQWxpZ249KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuYmFzZWxpbmVTaGlmdCkpLGUuZm9udEtlcm5pbmc9Im5vbmUiPT09dGhpcy5rZXJuaW5nTW9kZT8ibm9uZSI6Im5vcm1hbCIsZS5sZXR0ZXJTcGFjaW5nPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxldHRlclNwYWNpbmcpLDAhPT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIiwyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLDAhPT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvbj0ib3ZlcmxpbmUiLDI9PT10aGlzLm92ZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlLGUuZm9udFNpemU9KDAsby5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpLCgwLG8uc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKSwwIT09dGhpcy51bmRlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiLDI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIikpLGUuZm9udFdlaWdodD10aGlzLndlaWdodCxlfX1dKSxyfShuLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImZvcm1hdCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxuLnBpY3R1cmU9bnVsbCxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksR2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImhhbmRsZXIiKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCksemU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImh5cGhlbmF0aW9uIikpLmV4Y2x1ZGVBbGxDYXBzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlQWxsQ2FwcyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5leGNsdWRlSW5pdGlhbENhcD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaHlwaGVuYXRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wdXNoQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnB1c2hDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnJlbWFpbkNoYXJhY3RlckNvdW50PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi53b3JkQ2hhcmFjdGVyQ291bnQ9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksV2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImltYWdlIikpLmFzcGVjdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIixuLmhyZWY9ZS5ocmVmfHwiIixuLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udHJhbnNmZXJFbmNvZGluZz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhSS5oYXModGhpcy5jb250ZW50VHlwZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO3ZhciBlPXRoaXNbbi4kZ2xvYmFsRGF0YV0uaW1hZ2VzJiZ0aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtpZighZSYmKHRoaXMuaHJlZnx8IXRoaXNbbi4kY29udGVudF0pKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPSgwLGMuc3RyaW5nVG9CeXRlcykoYXRvYih0aGlzW24uJGNvbnRlbnRdKSkpLCFlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcih2YXIgdD0wLHI9RTt0PHIubGVuZ3RoO3QrKyl7dmFyIGE9cChyW3RdLDIpLGk9YVswXSxvPWFbMV07aWYoZS5sZW5ndGg+aS5sZW5ndGgmJmkuZXZlcnkoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT1lW3JdfSkpKXt0aGlzLmNvbnRlbnRUeXBlPW87YnJlYWt9fWlmKCF0aGlzLmNvbnRlbnRUeXBlKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFl9dmFyIHUsbD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6dT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOnU9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOnU9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX12YXIgZj10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImltZyIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFJbWFnZSJdLHN0eWxlOnUsc3JjOlVSTC5jcmVhdGVPYmplY3RVUkwobCksYWx0OmY/QihmW24uJGdldFBhcmVudF0oKSk6bnVsbH19KX19XSkscn0obi5TdHJpbmdPYmplY3QpLFZlPWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJpbWFnZUVkaXQiLCEwKSkuZGF0YT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhLFsibGluayIsImVtYmVkIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9zLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShuLlhGQU9iamVjdCksWWU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImludGVnZXIiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXBhcnNlSW50KHRoaXNbbi4kY29udGVudF0udHJpbSgpLDEwKTt0aGlzW24uJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBVKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksS2U9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsImlzc3VlcnMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmNlcnRpZmljYXRlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxKZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwiaXRlbXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS5uYW1lPWUubmFtZXx8IiIsYS5wcmVzZW5jZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSxhLnJlZj1lLnJlZnx8IiIsYS5zYXZlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zYXZlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5ib29sZWFuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGVjaW1hbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZsb2F0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW1hZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbnRlZ2VyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj1PKHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3Ioci5zKCk7IShlPXIubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTt0LnB1c2goYVtuLiR0ZXh0XSgpKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfX1dKSxyfShuLlhGQU9iamVjdCk7dC5JdGVtcz1KZTt2YXIgWmU9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjt5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwia2VlcCIsITApKS5pZD1lLmlkfHwiIjt2YXIgYT1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07cmV0dXJuIG4uaW50YWN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCxhKSxuLm5leHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCxhKSxuLnByZXZpb3VzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLGEpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxRZT1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3kodGhpcyxyKTt2YXIgYT1bIiIsInllcyIsIm5vIl07cmV0dXJuKG49dC5jYWxsKHRoaXMsRiwia2V5VXNhZ2UiKSkuY3JsU2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5jcmxTaWduLGEpLG4uZGF0YUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kYXRhRW5jaXBoZXJtZW50LGEpLG4uZGVjaXBoZXJPbmx5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmRlY2lwaGVyT25seSxhKSxuLmRpZ2l0YWxTaWduYXR1cmU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZGlnaXRhbFNpZ25hdHVyZSxhKSxuLmVuY2lwaGVyT25seT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5lbmNpcGhlck9ubHksYSksbi5pZD1lLmlkfHwiIixuLmtleUFncmVlbWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlBZ3JlZW1lbnQsYSksbi5rZXlDZXJ0U2lnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlDZXJ0U2lnbixhKSxuLmtleUVuY2lwaGVybWVudD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5rZXlFbmNpcGhlcm1lbnQsYSksbi5ub25SZXB1ZGlhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ub25SZXB1ZGlhdGlvbixhKSxuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxldD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibGluZSIsITApKS5oYW5kPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLG4uaWQ9ZS5pZHx8IiIsbi5zbG9wZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5lZGdlPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixhLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGM9dGhpcy5lZGdlfHxuZXcgQWUoe30pLHU9Y1tuLiR0b1N0eWxlXSgpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxmPSJ2aXNpYmxlIj09PWMucHJlc2VuY2U/Yy50aGlja25lc3M6MDtsLnN0cm9rZVdpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShmKSxsLnN0cm9rZT11LmNvbG9yO3ZhciBoPSIxMDAlIixkPSIxMDAlIjtpLnc8PWY/KGU9IjUwJSIsdD0wLHI9IjUwJSIsYT0iMTAwJSIsaD1sLnN0cm9rZVdpZHRoKTppLmg8PWY/KGU9MCx0PSI1MCUiLHI9IjEwMCUiLGE9IjUwJSIsZD1sLnN0cm9rZVdpZHRoKToiXFwiPT09dGhpcy5zbG9wZT8oZT0wLHQ9MCxyPSIxMDAlIixhPSIxMDAlIik6KGU9MCx0PSIxMDAlIixyPSIxMDAlIixhPTApO3ZhciBwPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6UCx4MTplLHkxOnQseDI6cix5MjphLHN0eWxlOmx9fV0sYXR0cmlidXRlczp7eG1sbnM6UCx3aWR0aDpoLGhlaWdodDpkLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07cmV0dXJuIE0oaSk/cy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbcF19KToocC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIscy5IVE1MUmVzdWx0LnN1Y2Nlc3MocCkpfX1dKSxyfShuLlhGQU9iamVjdCksdHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxpbmVhciIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCIgJDEiKS50b0xvd2VyQ2FzZSgpLHI9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodCwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQociwiKSIpfX1dKSxyfShuLlhGQU9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsImxvY2tEb2N1bWVudCIpKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09KDAscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbbi4kY29udGVudF0sWyJhdXRvIiwiMCIsIjEiXSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCksbnQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsIm1hbmlmZXN0IiwhMCkpLmFjdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKSxhLmlkPWUuaWR8fCIiLGEubmFtZT1lLm5hbWV8fCIiLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmV4dHJhcz1udWxsLGEucmVmPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxhdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibWFyZ2luIiwhMCkpLmJvdHRvbUluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuYm90dG9tSW5zZXQsIjAiKSxuLmlkPWUuaWR8fCIiLG4ubGVmdEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubGVmdEluc2V0LCIwIiksbi5yaWdodEluc2V0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUucmlnaHRJbnNldCwiMCIpLG4udG9wSW5zZXQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS50b3BJbnNldCwiMCIpLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue21hcmdpbjooMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50b3BJbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpKyIgIisoMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5ib3R0b21JbnNldCkrIiAiKygwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxlZnRJbnNldCl9fX1dKSxyfShuLlhGQU9iamVjdCksaXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1kcCIpKS5pZD1lLmlkfHwiIixuLnBlcm1pc3Npb25zPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV8fDM9PT1lfX0pLG4uc2lnbmF0dXJlVHlwZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsIm1lZGl1bSIpKS5pZD1lLmlkfHwiIixuLmltYWdpbmdCQm94PSgwLHMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksbi5sb25nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksbi5vcmllbnRhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLG4uc2hvcnQ9KDAscy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksbi5zdG9jaz1lLnN0b2NrfHwiIixuLnRyYXlJbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksbi50cmF5T3V0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxzdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwibWVzc2FnZSIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS50ZXh0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxjdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwibnVtZXJpY0VkaXQiLCEwKSkuaFNjcm9sbFBvbGljeT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pLG4uaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5jb21iPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIikscj10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCksYT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGZpZWxkSWQ6cltuLiR1aWRdLGRhdGFJZDpyW24uJGRhdGFdJiZyW24uJGRhdGFdW24uJHVpZF18fHJbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOkIociksImFyaWEtcmVxdWlyZWQiOiExfX07cmV0dXJuIFIocikmJihhLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMCxhLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITApLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19XSkscn0obi5YRkFPYmplY3QpLHV0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvY2N1ciIsITApKS5pZD1lLmlkfHwiIixuLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0pOiIiLG4ubWF4PSIiIT09ZS5tYXg/KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KToiIixuLm1pbj0iIiE9PWUubWluPygwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSk6IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGNsZWFuLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIGR0fHxlIGluc3RhbmNlb2YgcHQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBkdHx8ZSBpbnN0YW5jZW9mIHB0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBEdD8xOnRoaXMubWluKX19XSkscn0obi5YRkFPYmplY3QpLGx0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJvaWQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxmdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwib2lkcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEub2lkPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxodD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwib3ZlcmZsb3ciKSkuaWQ9ZS5pZHx8IiIsbi5sZWFkZXI9ZS5sZWFkZXJ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnRyYWlsZXI9ZS50cmFpbGVyfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gdihyLFt7a2V5Om4uJGdldEV4dHJhLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXt2YXIgZT10aGlzW24uJGdldFBhcmVudF0oKSx0PXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpLHI9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxhPXRbbi4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W24uJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW24uJGV4dHJhXT17dGFyZ2V0OnImJnJbMF18fG51bGwsbGVhZGVyOmEmJmFbMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19fV0pLHJ9KG4uWEZBT2JqZWN0KSxkdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicGFnZUFyZWEiLCEwKSkuYmxhbmtPck5vdEJsYW5rPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksYS5pZD1lLmlkfHwiIixhLmluaXRpYWxOdW1iZXI9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5uYW1lPWUubmFtZXx8IiIsYS5udW1iZXJlZD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSksYS5vZGRPckV2ZW49KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub2RkT3JFdmVuLFsiYW55IiwiZXZlbiIsIm9kZCJdKSxhLnBhZ2VQb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wYWdlUG9zaXRpb24sWyJhbnkiLCJmaXJzdCIsImxhc3QiLCJvbmx5IiwicmVzdCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEubWVkaXVtPW51bGwsYS5vY2N1cj1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbnRlbnRBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZHJhdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kaXNVc2FibGUsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0/IXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4Oih0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0sITApfX0se2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19fSx7a2V5Om4uJGdldE5leHRQYWdlLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfX0se2tleTpuLiRnZXRBdmFpbGFibGVTcGFjZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzW24uJGV4dHJhXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7dmFyIGU9W107dGhpc1tuLiRleHRyYV0uY2hpbGRyZW49ZTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe3ZhciByPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1yLHRoaXNbbi4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pLHRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KSxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbbi4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1dKSxyfShuLlhGQU9iamVjdCkscHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInBhZ2VTZXQiLCEwKSkuZHVwbGV4SW1wb3NpdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksYS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLGEucmVsZXZhbnQ9KDAscy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuZXh0cmFzPW51bGwsYS5vY2N1cj1udWxsLGEucGFnZUFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYWdlU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRjbGVhblBhZ2UsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PU8odGhpcy5wYWdlQXJlYS5jaGlsZHJlbik7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KWUudmFsdWVbbi4kY2xlYW5QYWdlXSgpfWNhdGNoKGUpe3QuZShlKX1maW5hbGx5e3QuZigpfXZhciByLGE9Tyh0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOylyLnZhbHVlW24uJGNsZWFuUGFnZV0oKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX19fSx7a2V5Om4uJGlzVXNhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbbi4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fX0se2tleTpuLiRnZXROZXh0UGFnZSx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pLCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4Kz0xLHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTEsdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bbi4kZ2V0TmV4dFBhZ2VdKCk7aWYodGhpc1tuLiRpc1VzYWJsZV0oKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTEsdGhpc1tuLiRleHRyYV0ucGFnZUluZGV4PS0xLHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMSx0aGlzW24uJGdldE5leHRQYWdlXSgpO3ZhciBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlIGluc3RhbmNlb2Ygcj9lW24uJGdldE5leHRQYWdlXSgpOih0aGlzW24uJGNsZWFuUGFnZV0oKSx0aGlzW24uJGdldE5leHRQYWdlXSgpKX12YXIgdD10aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFnZU51bWJlcixhPXQlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09dD8iZmlyc3QiOiJyZXN0IixvPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2RkT3JFdmVuPT09YSYmZS5wYWdlUG9zaXRpb249PT1pfSkpO3JldHVybiBvfHwoKG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWl9KSkpP286KG89dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9ufSkpKXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXSl9fV0pLHJ9KG4uWEZBT2JqZWN0KSxndD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFyYSIsITApKS5oQWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSxuLmlkPWUuaWR8fCIiLG4ubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIixuLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsbi5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLG4ub3JwaGFucz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLnByZXNlcnZlPWUucHJlc2VydmV8fCIiLG4ucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxzLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIixuLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLHMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiIsbi5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxzLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiLG4udGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAscy5nZXRNZWFzdXJlbWVudCkobi50YWJEZWZhdWx0KToiIixuLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMj09MT8oMCxzLmdldE1lYXN1cmVtZW50KShlKTplfSkpLG4udGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAscy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi52QWxpZ249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLG4ud2lkb3dzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbi5oeXBoZW5hdGlvbj1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9KDAsby50b1N0eWxlKSh0aGlzLCJoQWxpZ24iKTtyZXR1cm4iIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCkpLCIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luUmlnaHQpKSwiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUFib3ZlKSksIiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209KDAsby5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdykpLCIiIT09dGhpcy50ZXh0SW5kZW50JiYoZS50ZXh0SW5kZW50PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpLCgwLG8uZml4VGV4dEluZGVudCkoZSkpLHRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLG8ubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKSwiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxvLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSksdGhpcy50YWJTdG9wcy5sZW5ndGgsdGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW24uJHRvU3R5bGVdKCkpLGV9fV0pLHJ9KG4uWEZBT2JqZWN0KSx2dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGFzc3dvcmRFZGl0IiwhMCkpLmhTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmlkPWUuaWR8fCIiLG4ucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx5dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwicGF0dGVybiIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5jb2xvcj1udWxsLG4uZXh0cmFzPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHRvU3R5bGUsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7dmFyIHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLHI9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9IiIuY29uY2F0KGUsIiwiKS5jb25jYXQoZSwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCg1LCJweCwiKS5jb25jYXQodCwiICIpLmNvbmNhdCgxMCwicHgiKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpICIpLmNvbmNhdChyLCIodG8gcmlnaHQsIikuY29uY2F0KGEsIikiKTtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybiIiLmNvbmNhdChyLCIoNDVkZWcsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuIiIuY29uY2F0KHIsIigtNDVkZWcsIikuY29uY2F0KGEsIikiKTtjYXNlImhvcml6b250YWwiOnJldHVybiIiLmNvbmNhdChyLCIodG8gdG9wLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpfXJldHVybiIifX1dKSxyfShuLlhGQU9iamVjdCksbXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInBpY3R1cmUiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxidD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicHJvdG8iLCEwKSkuYXBwZWFyYW5jZUZpbHRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyYz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmFyZWE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5hc3Npc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5iYXJjb2RlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYmluZEl0ZW1zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuYm9va2VuZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJvb2xlYW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5ib3JkZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVhaz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJ1dHRvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhbGN1bGF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNhcHRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jZXJ0aWZpY2F0ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNlcnRpZmljYXRlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNoZWNrQnV0dG9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY2hvaWNlTGlzdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbG9yPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuY29tYj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5jb250ZW50QXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvcm5lcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGVUaW1lRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZWZhdWx0VWk9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kZXNjPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZGlnZXN0TWV0aG9kcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRyYXc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jb2Rpbmc9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNvZGluZ3M9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5lbmNyeXB0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZW5jcnlwdGlvbk1ldGhvZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmVuY3J5cHRpb25NZXRob2RzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4ZWN1dGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leHRyYXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWVsZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpbGw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5maWx0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZvbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mb3JtYXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5oYW5kbGVyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaHlwaGVuYXRpb249bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pbWFnZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlRWRpdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmludGVnZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5pc3N1ZXJzPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaXRlbXM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5rZWVwPW5ldyBuLlhGQU9iamVjdEFycmF5LGEua2V5VXNhZ2U9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5saW5lPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubGluZWFyPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubG9ja0RvY3VtZW50PW5ldyBuLlhGQU9iamVjdEFycmF5LGEubWFuaWZlc3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tYXJnaW49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZHA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZWRpdW09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEubnVtZXJpY0VkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vY2N1cj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm9pZHM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5vdmVyZmxvdz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhZ2VBcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGFnZVNldD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnBhcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXNzd29yZEVkaXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5wYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucGljdHVyZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJhZGlhbD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnJlYXNvbnM9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWN0YW5nbGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5yZWY9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zY3JpcHQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmF0dXJlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2lnbmluZz1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNvbGlkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3BlYWs9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdGlwcGxlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE49bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJqZWN0RE5zPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3VibWl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRleHRFZGl0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWVTdGFtcD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRvb2xUaXA9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS50cmF2ZXJzZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnVpPW5ldyBuLlhGQU9iamVjdEFycmF5LGEudmFsaWRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS52YWx1ZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnZhcmlhYmxlcz1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksd3Q9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInJhZGlhbCIsITApKS5pZD1lLmlkfHwiIixuLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmNvbG9yPW51bGwsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtlPWU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjt2YXIgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0idG9FZGdlIj09PXRoaXMudHlwZT8iIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0KToiIi5jb25jYXQodCwiLCIpLmNvbmNhdChlKTtyZXR1cm4icmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICIuY29uY2F0KHIsIikiKX19XSkscn0obi5YRkFPYmplY3QpLGt0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWFzb24iKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxTdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVhc29ucyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEucmVhc29uPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSx4dD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwicmVjdGFuZ2xlIiwhMCkpLmhhbmQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSksYS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5jb3JuZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCksYS5lZGdlPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpLGEuZmlsbD1udWxsLGF9cmV0dXJuIHYocixbe2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgQWUoe30pLHQ9ZVtuLiR0b1N0eWxlXSgpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKHIsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpOnIuZmlsbD0idHJhbnNwYXJlbnQiLHIuc3Ryb2tlV2lkdGg9KDAsby5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCksci5zdHJva2U9dC5jb2xvcjt2YXIgYT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBnZSh7fSkpW24uJHRvU3R5bGVdKCksaT17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDphLnJhZGl1cyxyeTphLnJhZGl1cyxzdHlsZTpyfX1dLGF0dHJpYnV0ZXM6e3htbG5zOlAsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gTSh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP3MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk6KGkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuSFRNTFJlc3VsdC5zdWNjZXNzKGkpKX19XSkscn0obi5YRkFPYmplY3QpLE90PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJyZWYiKSkuaWQ9ZS5pZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxBdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2NyaXB0IikpLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIixuLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5ydW5BdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxDdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic2V0UHJvcGVydHkiKSkuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLG4ucmVmPWUucmVmfHwiIixuLnRhcmdldD1lLnRhcmdldHx8IiIsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpO3QuU2V0UHJvcGVydHk9Q3Q7dmFyIEZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduRGF0YSIsITApKS5pZD1lLmlkfHwiIixuLm9wZXJhdGlvbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksbi5yZWY9ZS5yZWZ8fCIiLG4udGFyZ2V0PWUudGFyZ2V0fHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5maWx0ZXI9bnVsbCxuLm1hbmlmZXN0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFB0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzaWduYXR1cmUiLCEwKSkuaWQ9ZS5pZHx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uYm9yZGVyPW51bGwsbi5leHRyYXM9bnVsbCxuLmZpbHRlcj1udWxsLG4ubWFuaWZlc3Q9bnVsbCxuLm1hcmdpbj1udWxsLG59cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxUdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic2lnbmluZyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuY2VydGlmaWNhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLEl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJzb2xpZCIsITApKS5pZD1lLmlkfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5leHRyYXM9bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9TdHlsZSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1dKSxyfShuLlhGQU9iamVjdCksRXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInNwZWFrIikpLmRpc2FibGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRpc2FibGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lfX0pLG4uaWQ9ZS5pZHx8IiIsbi5wcmlvcml0eT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSxuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocil9KG4uU3RyaW5nT2JqZWN0KSxqdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3RpcHBsZSIsITApKS5pZD1lLmlkfHwiIixuLnJhdGU9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSksbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uY29sb3I9bnVsbCxuLmV4dHJhcz1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiR0b1N0eWxlLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGMuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1dKSxyfShuLlhGQU9iamVjdCksTXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInN1YmZvcm0iLCEwKSkuYWNjZXNzPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLGEuYWxsb3dNYWNybz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dNYWNybyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5hbmNob3JUeXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksYS5jb2xTcGFuPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfHwtMT09PWV9fSksYS5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiItMSI9PT1lPy0xOigwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpfSkpLGEuaD1lLmg/KDAscy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIixhLmhBbGlnbj0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLGEuaWQ9ZS5pZHx8IiIsYS5sYXlvdXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSxhLmxvY2FsZT1lLmxvY2FsZXx8IiIsYS5tYXhIPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksYS5tYXhXPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksYS5tZXJnZU1vZGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pLGEubWluSD0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLGEubWluVz0oMCxzLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLGEubmFtZT1lLm5hbWV8fCIiLGEucHJlc2VuY2U9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksYS5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxhLnJlc3RvcmVTdGF0ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pLGEuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS53PWUudz8oMCxzLmdldE1lYXN1cmVtZW50KShlLncpOiIiLGEueD0oMCxzLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLGEueT0oMCxzLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLGEuYXNzaXN0PW51bGwsYS5iaW5kPW51bGwsYS5ib29rZW5kPW51bGwsYS5ib3JkZXI9bnVsbCxhLmJyZWFrPW51bGwsYS5jYWxjdWxhdGU9bnVsbCxhLmRlc2M9bnVsbCxhLmV4dHJhcz1udWxsLGEua2VlcD1udWxsLGEubWFyZ2luPW51bGwsYS5vY2N1cj1udWxsLGEub3ZlcmZsb3c9bnVsbCxhLnBhZ2VTZXQ9bnVsbCxhLnBhcmE9bnVsbCxhLnRyYXZlcnNhbD1udWxsLGEudmFsaWRhdGU9bnVsbCxhLnZhcmlhYmxlcz1udWxsLGEuYXJlYT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQWZ0ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5icmVha0JlZm9yZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmNvbm5lY3Q9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kcmF3PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuZXZlbnQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leE9iamVjdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmV4Y2xHcm91cD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmZpZWxkPW5ldyBuLlhGQU9iamVjdEFycmF5LGEucHJvdG89bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zZXRQcm9wZXJ0eT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm09bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5zdWJmb3JtU2V0PW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocixbe2tleTpuLiRnZXRTdWJmb3JtUGFyZW50LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBfdD9lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk6ZX19LHtrZXk6bi4kaXNCaW5kYWJsZSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX0se2tleTpuLiRpc1RoZXJlTW9yZVdpZHRoLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW24uJGdldFBhcmVudF0oKVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpfX0se2tleTpuLiRnZXRDb250YWluZWRDaGlsZHJlbix2YWx1ZTpTKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChMKHRoaXMpLCJ0MCIsMSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKX0se2tleTpuLiRmbHVzaEhUTUwsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9fSx7a2V5Om4uJGFkZEhUTUwsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX19LHtrZXk6bi4kZ2V0QXZhaWxhYmxlU3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX19LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhZVtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iil8fHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdD8odGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMSwhMSk6IShlLmxheW91dCYmZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoTih0aGlzKSx0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe3ZhciB0PW5ldyByZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO3Rbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0KSx0aGlzLmJyZWFrQWZ0ZXIucHVzaCh0KX1pZigiYXV0byIhPT10aGlzLmJyZWFrLmJlZm9yZXx8IiIhPT10aGlzLmJyZWFrLmJlZm9yZVRhcmdldCl7dmFyIHI9bmV3IG5lKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtyW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0ociksdGhpcy5icmVha0JlZm9yZS5wdXNoKHIpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7dmFyIGE9bmV3IGh0KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7YVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGEpLHRoaXMub3ZlcmZsb3cucHVzaChhKX10aGlzW24uJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKSx0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2lmKCh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgdT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKEgodSkpcmV0dXJuIHMuSFRNTFJlc3VsdC5icmVha05vZGUodSl9aWYodGhpc1tuLiRleHRyYV0mJnRoaXNbbi4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZOygwLG8uZml4RGltZW5zaW9ucykodGhpcyk7dmFyIGw9W10sZj17aWQ6dGhpc1tuLiR1aWRdLGNsYXNzOltdfTsoMCxvLnNldEFjY2VzcykodGhpcyxmLmNsYXNzKSx0aGlzW24uJGV4dHJhXXx8KHRoaXNbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCkpLE9iamVjdC5hc3NpZ24odGhpc1tuLiRleHRyYV0se2NoaWxkcmVuOmwsbGluZTpudWxsLGF0dHJpYnV0ZXM6ZixhdHRlbXB0OjAsbnVtYmVySW5MaW5lOjAsYXZhaWxhYmxlU3BhY2U6e3dpZHRoOk1hdGgubWluKHRoaXMud3x8MS8wLGUud2lkdGgpLGhlaWdodDpNYXRoLm1pbih0aGlzLmh8fDEvMCxlLmhlaWdodCl9LHdpZHRoOjAsaGVpZ2h0OjAscHJldkhlaWdodDowLGN1cnJlbnRXaWR0aDowfSk7dmFyIGg9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksZD1oW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscD10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZihwfHwkKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gcy5IVE1MUmVzdWx0LkZBSUxVUkU7dmFyIGc9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciB2PXRoaXNbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7QXJyYXkuaXNBcnJheSh2KSYmdi5sZW5ndGg+MCYmKHRoaXNbbi4kZXh0cmFdLmNvbHVtbldpZHRocz12LHRoaXNbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW49MCl9dmFyIHk9KDAsby50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxtPVsieGZhU3ViZm9ybSJdLGI9KDAsby5sYXlvdXRDbGFzcykodGhpcyk7aWYoYiYmbS5wdXNoKGIpLGYuc3R5bGU9eSxmLmNsYXNzPW0sdGhpcy5uYW1lJiYoZi54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7dmFyIHc9dGhpcy5vdmVyZmxvd1tuLiRnZXRFeHRyYV0oKTt3LmFkZExlYWRlciYmKHcuYWRkTGVhZGVyPSExLHEodGhpcyx3LmxlYWRlcixlKSl9dGhpc1tuLiRwdXNoUGFyYV0oKTtmb3IodmFyIGs9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsUz1rPzI6MTt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PFM7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtrJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTt2YXIgeD10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOmcsaW5jbHVkZTohMH0pO2lmKHguc3VjY2VzcylicmVhaztpZih4LmlzQnJlYWsoKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLHg7aWYoayYmMD09PXRoaXNbbi4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFoW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9UzticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLHB8fFgodGhpcyksaFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWQsdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PVMpcmV0dXJuIHRoaXMub3ZlcmZsb3cmJih0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpLHB8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxzLkhUTUxSZXN1bHQuRkFJTFVSRTtpZih0aGlzLm92ZXJmbG93KXt2YXIgTz10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO08uYWRkVHJhaWxlciYmKE8uYWRkVHJhaWxlcj0hMSxxKHRoaXMsTy50cmFpbGVyLGUpKX12YXIgQT0wLEM9MDt0aGlzLm1hcmdpbiYmKEE9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsQz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7dmFyIEY9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgrQSx0aGlzLnd8fDApLFA9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0K0MsdGhpcy5ofHwwKSxUPVt0aGlzLngsdGhpcy55LEYsUF07aWYoIiI9PT10aGlzLncmJih5LndpZHRoPSgwLG8ubWVhc3VyZVRvU3RyaW5nKShGKSksIiI9PT10aGlzLmgmJih5LmhlaWdodD0oMCxvLm1lYXN1cmVUb1N0cmluZykoUCkpLCgiMHB4Ij09PXkud2lkdGh8fCIwcHgiPT09eS5oZWlnaHQpJiYwPT09bC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTt2YXIgST17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmYsY2hpbGRyZW46bH07RCh0aGlzLGYpO3ZhciBFPXMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLG8uY3JlYXRlV3JhcHBlcikodGhpcyxJKSxUKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXt2YXIgaj10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoSChqKSlyZXR1cm4gdGhpc1tuLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyPUUscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShqKX1yZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLEV9fV0pLHJ9KG4uWEZBT2JqZWN0KSxfdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViZm9ybVNldCIsITApKS5pZD1lLmlkfHwiIixhLm5hbWU9ZS5uYW1lfHwiIixhLnJlbGF0aW9uPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSxhLnJlbGV2YW50PSgwLHMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLGEudXNlPWUudXNlfHwiIixhLnVzZWhyZWY9ZS51c2VocmVmfHwiIixhLmJvb2tlbmQ9bnVsbCxhLmJyZWFrPW51bGwsYS5kZXNjPW51bGwsYS5leHRyYXM9bnVsbCxhLm9jY3VyPW51bGwsYS5vdmVyZmxvdz1udWxsLGEuYnJlYWtBZnRlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmJyZWFrQmVmb3JlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnN1YmZvcm1TZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGdldENvbnRhaW5lZENoaWxkcmVuLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIFMoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5kZWxlZ2F0ZVlpZWxkKEwodGhpcyksInQwIiwxKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfSx7a2V5Om4uJGdldFN1YmZvcm1QYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tuLiRnZXRQYXJlbnRdKCk7IShlIGluc3RhbmNlb2YgTXQpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfX0se2tleTpuLiRpc0JpbmRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fV0pLHJ9KG4uWEZBT2JqZWN0KSxMdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwic3ViamVjdEROIikpLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLG4uaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbbi4kY29udGVudF09bmV3IE1hcCh0aGlzW24uJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybihlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKSxlfSkpKX19XSkscn0obi5Db250ZW50T2JqZWN0KSxSdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3ViamVjdEROcyIsITApKS5pZD1lLmlkfHwiIixhLnR5cGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuc3ViamVjdEROPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxOdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwic3VibWl0IiwhMCkpLmVtYmVkUERGPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksYS5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pLGEuaWQ9ZS5pZHx8IiIsYS50YXJnZXQ9ZS50YXJnZXR8fCIiLGEudGV4dEVuY29kaW5nPSgwLHMuZ2V0S2V5d29yZCkoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuWyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX19KSxhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiIsYS5lbmNyeXB0PW51bGwsYS5lbmNyeXB0RGF0YT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnNpZ25EYXRhPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxEdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBhO3JldHVybiB5KHRoaXMsciksKGE9dC5jYWxsKHRoaXMsRiwidGVtcGxhdGUiLCEwKSkuYmFzZVByb2ZpbGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSxhLmV4dHJhcz1udWxsLGEuc3ViZm9ybT1uZXcgbi5YRkFPYmplY3RBcnJheSxhfXJldHVybiB2KHIsW3trZXk6bi4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKSx0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpLHRoaXNbbi4kdGFiSW5kZXhdPTVlM319LHtrZXk6bi4kaXNTcGxpdHRhYmxlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJHNlYXJjaE5vZGUsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGYuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfX0se2tleTpuLiR0b1BhZ2VzLHZhbHVlOlMoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscixhLGksbyx1LGwsZixkLHAsZyx2LHksbSxiLHcsaz10aGlzO3JldHVybiBTKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSkpO2Nhc2UgMjp0aGlzW24uJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119LCh0PXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXSkucGFnZVNldFtuLiRjbGVhblBhZ2VdKCkscj10LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX0saT1udWxsLG89bnVsbCx1PW51bGwsdC5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89dC5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZ0LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSx1PW8udGFyZ2V0KTp0LmJyZWFrJiZ0LmJyZWFrLmJlZm9yZVRhcmdldD8obz10LmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpOnQuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJnQuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCYmKG89dC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLHU9by5iZWZvcmVUYXJnZXQpLG8mJihsPXRoaXNbbi4kc2VhcmNoTm9kZV0odSxvW24uJGdldFBhcmVudF0oKSkpaW5zdGFuY2VvZiBkdCYmKGk9bCxvW24uJGV4dHJhXT17fSksaXx8KGk9clswXSksaVtuLiRleHRyYV09e251bWJlck9mVXNlOjF9LChmPWlbbi4kZ2V0UGFyZW50XSgpKVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OmYucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKSxwYWdlU2V0SW5kZXg6MH0scD1udWxsLGc9bnVsbCx2PSEwLHk9MCxtPTAsYj1TKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciByLG8scyx1LGwsZixoLGIsdyx4LE8sQSxDLEYsUDtyZXR1cm4gUygpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHYpe2UubmV4dD03O2JyZWFrfWlmKGEuY2hpbGRyZW4ucG9wKCksMyE9Kyt5KXtlLm5leHQ9NTticmVha31yZXR1cm4oMCxjLndhcm4pKCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuIiksZS5hYnJ1cHQoInJldHVybiIse3Y6YX0pO2Nhc2UgNTplLm5leHQ9ODticmVhaztjYXNlIDc6eT0wO2Nhc2UgODpkPW51bGwsa1tuLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPWkscj1pW24uJHRvSFRNTF0oKS5odG1sLGEuY2hpbGRyZW4ucHVzaChyKSxwJiYoa1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLHIuY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oaVtuLiRleHRyYV0uc3BhY2UpLmh0bWwpLHA9bnVsbCksZyYmKGtbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMCxyLmNoaWxkcmVuLnB1c2goZ1tuLiR0b0hUTUxdKGlbbi4kZXh0cmFdLnNwYWNlKS5odG1sKSxnPW51bGwpLG89aS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXIuY2hpbGRyZW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCJ4ZmFDb250ZW50YXJlYSIpfSkpLHY9ITEsa1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCxrW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITEsdT1mdW5jdGlvbihlKXt2YXIgcj10W24uJGZsdXNoSFRNTF0oKTtyJiYodj12fHxyLmNoaWxkcmVuJiYwIT09ci5jaGlsZHJlbi5sZW5ndGgsc1tlXS5jaGlsZHJlbi5wdXNoKHIpKX0sbD1tLGY9by5sZW5ndGg7Y2FzZSAyMTppZighKGw8Zikpe2UubmV4dD01NjticmVha31pZihoPWtbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1vW2xdLGI9e3dpZHRoOmgudyxoZWlnaHQ6aC5ofSxtPTAscCYmKHNbbF0uY2hpbGRyZW4ucHVzaChwW24uJHRvSFRNTF0oYikuaHRtbCkscD1udWxsKSxnJiYoc1tsXS5jaGlsZHJlbi5wdXNoKGdbbi4kdG9IVE1MXShiKS5odG1sKSxnPW51bGwpLCEodz10W24uJHRvSFRNTF0oYikpLnN1Y2Nlc3Mpe2UubmV4dD0zMTticmVha31yZXR1cm4gdy5odG1sPyh2PXZ8fHcuaHRtbC5jaGlsZHJlbiYmMCE9PXcuaHRtbC5jaGlsZHJlbi5sZW5ndGgsc1tsXS5jaGlsZHJlbi5wdXNoKHcuaHRtbCkpOiF2JiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2OmF9KTtjYXNlIDMxOmlmKCF3LmlzQnJlYWsoKSl7ZS5uZXh0PTQwO2JyZWFrfWlmKHg9dy5icmVha05vZGUsdShsKSwiYXV0byIhPT14LnRhcmdldFR5cGUpe2UubmV4dD0zNjticmVha31yZXR1cm4gZS5hYnJ1cHQoImNvbnRpbnVlIiw1Myk7Y2FzZSAzNjpyZXR1cm4geC5sZWFkZXImJihwPShwPWtbbi4kc2VhcmNoTm9kZV0oeC5sZWFkZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9wWzBdOm51bGwpLHgudHJhaWxlciYmKGc9KGc9a1tuLiRzZWFyY2hOb2RlXSh4LnRyYWlsZXIseFtuLiRnZXRQYXJlbnRdKCkpKT9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT14LnRhcmdldFR5cGU/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LGw9MS8wKTp4W24uJGV4dHJhXS50YXJnZXQ/KGQ9eFtuLiRleHRyYV0udGFyZ2V0LG09eFtuLiRleHRyYV0uaW5kZXgrMSxsPTEvMCk6bD14W24uJGV4dHJhXS5pbmRleCxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDQwOmlmKCFrW24uJGV4dHJhXS5vdmVyZmxvd05vZGUpe2UubmV4dD01MjticmVha31yZXR1cm4gTz1rW24uJGV4dHJhXS5vdmVyZmxvd05vZGUsa1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGwsQT1PW24uJGdldEV4dHJhXSgpLEM9QS50YXJnZXQsQS5hZGRMZWFkZXI9bnVsbCE9PUEubGVhZGVyLEEuYWRkVHJhaWxlcj1udWxsIT09QS50cmFpbGVyLHUobCksRj1sLGw9MS8wLEMgaW5zdGFuY2VvZiBkdD9kPUM6QyBpbnN0YW5jZW9mIHBlJiYoLTEhPT0oUD1vLmluZGV4T2YoQykpP1A+Rj9sPVAtMTptPVA6KGQ9Q1tuLiRnZXRQYXJlbnRdKCksbT1kLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoQykpKSxlLmFicnVwdCgiY29udGludWUiLDUzKTtjYXNlIDUyOnUobCk7Y2FzZSA1MzpsKyssZS5uZXh0PTIxO2JyZWFrO2Nhc2UgNTY6cmV0dXJuIGtbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxpPWR8fGlbbi4kZ2V0TmV4dFBhZ2VdKCksZS5uZXh0PTYxLG51bGw7Y2FzZSA2MTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpO2Nhc2UgMjI6cmV0dXJuIGUuZGVsZWdhdGVZaWVsZChiKCksInQwIiwyNCk7Y2FzZSAyNDppZigib2JqZWN0IiE9PWgodz1lLnQwKSl7ZS5uZXh0PTI3O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix3LnYpO2Nhc2UgMjc6ZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMjk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpfV0pLHJ9KG4uWEZBT2JqZWN0KTt0LlRlbXBsYXRlPUR0O3ZhciBCdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dCIpKS5pZD1lLmlkfHwiIixuLm1heENoYXJzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MH19KSxuLm5hbWU9ZS5uYW1lfHwiIixuLnJpZD1lLnJpZHx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRhY2NlcHRXaGl0ZXNwYWNlLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5Om4uJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbi4kbmFtZXNwYWNlSWRdPT09YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/KHRoaXNbbi4kY29udGVudF09ZSwhMCk6KCgwLGMud2FybikoIlhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAiLmNvbmNhdChlW24uJG5vZGVOYW1lXSwiLiIpKSwhMSl9fSx7a2V5Om4uJG9uVGV4dCx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzW24uJGNvbnRlbnRdaW5zdGFuY2VvZiBuLlhGQU9iamVjdHx8ZChrKHIucHJvdG90eXBlKSxuLiRvblRleHQsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS5yZXBsYWNlKC9cclxuL2csIlxuIikpfX0se2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI5XHUyMDI4XG5dLykucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0JiZlLnB1c2godCksZX0pLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tuLiRjb250ZW50XSl7dmFyIHQ9VSh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8odC5uYW1lPSJkaXYiLHQuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSksZX0pLFtdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOmV9KX0pKSk6L1tcdTIwMjhcbl0vLnRlc3QodGhpc1tuLiRjb250ZW50XSkmJih0Lm5hbWU9ImRpdiIsdC5jaGlsZHJlbj1bXSx0aGlzW24uJGNvbnRlbnRdLnNwbGl0KC9bXHUyMDI4XG5dLykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTplfSx7bmFtZToiYnIifSl9KSkpLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHQpfXJldHVybiB0aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSl9fV0pLHJ9KG4uQ29udGVudE9iamVjdCk7dC5UZXh0PUJ0O3ZhciBVdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidGV4dEVkaXQiLCEwKSkuYWxsb3dSaWNoVGV4dD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5oU2Nyb2xsUG9saWN5PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSksbi5pZD1lLmlkfHwiIixuLm11bHRpTGluZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubXVsdGlMaW5lLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lfX0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLnZTY3JvbGxQb2xpY3k9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSxuLmJvcmRlcj1udWxsLG4uY29tYj1udWxsLG4uZXh0cmFzPW51bGwsbi5tYXJnaW49bnVsbCxufXJldHVybiB2KHIsW3trZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9KDAsby50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksYT10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBPZT8xOjApLHQ9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbbi4kZGF0YV0mJmFbbi4kZGF0YV1bbi4kdWlkXXx8YVtuLiR1aWRdLGZpZWxkSWQ6YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QihhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDphW24uJGRhdGFdJiZhW24uJGRhdGFdW24uJHVpZF18fGFbbi4kdWlkXSxmaWVsZElkOmFbbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnIsImFyaWEtbGFiZWwiOkIoYSksImFyaWEtcmVxdWlyZWQiOiExfX0sUihhKSYmKHQuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHQuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCkscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt0XX0pfX1dKSxyfShuLlhGQU9iamVjdCksJHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWUiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHYocixbe2tleTpuLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfX0se2tleTpuLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFUodGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1dKSxyfShuLlN0cmluZ09iamVjdCksWHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRpbWVTdGFtcCIpKS5pZD1lLmlkfHwiIixuLnNlcnZlcj1lLnNlcnZlcnx8IiIsbi50eXBlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlhGQU9iamVjdCksSHQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInRvb2xUaXAiKSkuaWQ9ZS5pZHx8IiIsbi5yaWQ9ZS5yaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiB2KHIpfShuLlN0cmluZ09iamVjdCkscXQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgYTtyZXR1cm4geSh0aGlzLHIpLChhPXQuY2FsbCh0aGlzLEYsInRyYXZlcnNhbCIsITApKS5pZD1lLmlkfHwiIixhLnVzZT1lLnVzZXx8IiIsYS51c2VocmVmPWUudXNlaHJlZnx8IiIsYS5leHRyYXM9bnVsbCxhLnRyYXZlcnNlPW5ldyBuLlhGQU9iamVjdEFycmF5LGF9cmV0dXJuIHYocil9KG4uWEZBT2JqZWN0KSxHdD1mdW5jdGlvbihlKXttKHIsZSk7dmFyIHQ9dyhyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB5KHRoaXMsciksKG49dC5jYWxsKHRoaXMsRiwidHJhdmVyc2UiLCEwKSkuaWQ9ZS5pZHx8IiIsbi5vcGVyYXRpb249KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKSxuLnJlZj1lLnJlZnx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG4uZXh0cmFzPW51bGwsbi5zY3JpcHQ9bnVsbCxufXJldHVybiB2KHIsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZXJhdGlvbn19LHtrZXk6bi4kaXNUcmFuc3BhcmVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExfX1dKSxyfShuLlhGQU9iamVjdCksenQ9ZnVuY3Rpb24oZSl7bShyLGUpO3ZhciB0PXcocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4geSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLEYsInVpIiwhMCkpLmlkPWUuaWR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ucGljdHVyZT1udWxsLG4uYmFyY29kZT1udWxsLG4uYnV0dG9uPW51bGwsbi5jaGVja0J1dHRvbj1udWxsLG4uY2hvaWNlTGlzdD1udWxsLG4uZGF0ZVRpbWVFZGl0PW51bGwsbi5kZWZhdWx0VWk9bnVsbCxuLmltYWdlRWRpdD1udWxsLG4ubnVtZXJpY0VkaXQ9bnVsbCxuLnBhc3N3b3JkRWRpdD1udWxsLG4uc2lnbmF0dXJlPW51bGwsbi50ZXh0RWRpdD1udWxsLG59cmV0dXJuIHYocixbe2tleTpuLiRnZXRFeHRyYSx2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXNbbi4kZXh0cmFdKXt2YXIgZSx0PU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3IodC5zKCk7IShlPXQubigpKS5kb25lOyl7dmFyIHI9ZS52YWx1ZTtpZigiZXh0cmFzIiE9PXImJiJwaWN0dXJlIiE9PXIpe3ZhciBhPXRoaXNbcl07aWYoYSBpbnN0YW5jZW9mIG4uWEZBT2JqZWN0KXJldHVybiB0aGlzW24uJGV4dHJhXT1hLGF9fX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX10aGlzW24uJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW24uJGV4dHJhXX19LHtrZXk6bi4kdG9IVE1MLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtuLiR0b0hUTUxdKGUpOnMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpLFd0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWxpZGF0ZSIsITApKS5mb3JtYXRUZXN0PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSxuLmlkPWUuaWR8fCIiLG4ubnVsbFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSxuLnNjcmlwdFRlc3Q9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixuLmV4dHJhcz1udWxsLG4ubWVzc2FnZT1udWxsLG4ucGljdHVyZT1udWxsLG4uc2NyaXB0PW51bGwsbn1yZXR1cm4gdihyKX0obi5YRkFPYmplY3QpLFZ0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHkodGhpcyxyKSwobj10LmNhbGwodGhpcyxGLCJ2YWx1ZSIsITApKS5pZD1lLmlkfHwiIixuLm92ZXJyaWRlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWV9fSksbi5yZWxldmFudD0oMCxzLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSxuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbi5hcmM9bnVsbCxuLmJvb2xlYW49bnVsbCxuLmRhdGU9bnVsbCxuLmRhdGVUaW1lPW51bGwsbi5kZWNpbWFsPW51bGwsbi5leERhdGE9bnVsbCxuLmZsb2F0PW51bGwsbi5pbWFnZT1udWxsLG4uaW50ZWdlcj1udWxsLG4ubGluZT1udWxsLG4ucmVjdGFuZ2xlPW51bGwsbi50ZXh0PW51bGwsbi50aW1lPW51bGwsbn1yZXR1cm4gdihyLFt7a2V5Om4uJHNldFZhbHVlLHZhbHVlOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdH0oKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBCZSYmdC51aSYmdC51aS5pbWFnZUVkaXQpcmV0dXJuIHRoaXMuaW1hZ2V8fCh0aGlzLmltYWdlPW5ldyBXZSh7fSksdGhpc1tuLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSkpLHZvaWQodGhpcy5pbWFnZVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdKTt2YXIgcj1lW24uJG5vZGVOYW1lXTtpZihudWxsPT09dGhpc1tyXSl7dmFyIGEsaT1PKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKTt0cnl7Zm9yKGkucygpOyEoYT1pLm4oKSkuZG9uZTspe3ZhciBvPWEudmFsdWUscz10aGlzW29dO3MgaW5zdGFuY2VvZiBuLlhGQU9iamVjdCYmKHRoaXNbb109bnVsbCx0aGlzW24uJHJlbW92ZUNoaWxkXShzKSl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXRoaXNbZVtuLiRub2RlTmFtZV1dPWUsdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW3JdW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF19KSl9LHtrZXk6bi4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO3ZhciBlLHQ9TyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSk7dHJ5e2Zvcih0LnMoKTshKGU9dC5uKCkpLmRvbmU7KXt2YXIgcj1lLnZhbHVlO2lmKCJpbWFnZSIhPT1yKXt2YXIgYT10aGlzW3JdO2lmKGEgaW5zdGFuY2VvZiBuLlhGQU9iamVjdClyZXR1cm4oYVtuLiRjb250ZW50XXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfX19Y2F0Y2goZSl7dC5lKGUpfWZpbmFsbHl7dC5mKCl9cmV0dXJuIG51bGx9fSx7a2V5Om4uJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPU8oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl7dmFyIGE9dGhpc1t0LnZhbHVlXTtpZihhIGluc3RhbmNlb2Ygbi5YRkFPYmplY3QpcmV0dXJuIGFbbi4kdG9IVE1MXShlKX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWX19XSkscn0obi5YRkFPYmplY3QpO3QuVmFsdWU9VnQ7dmFyIFl0PWZ1bmN0aW9uKGUpe20ocixlKTt2YXIgdD13KHIpO2Z1bmN0aW9uIHIoZSl7dmFyIGE7cmV0dXJuIHkodGhpcyxyKSwoYT10LmNhbGwodGhpcyxGLCJ2YXJpYWJsZXMiLCEwKSkuaWQ9ZS5pZHx8IiIsYS51c2U9ZS51c2V8fCIiLGEudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLGEuYm9vbGVhbj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRhdGU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5kYXRlVGltZT1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmRlY2ltYWw9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5leERhdGE9bmV3IG4uWEZBT2JqZWN0QXJyYXksYS5mbG9hdD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLmltYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5LGEuaW50ZWdlcj1uZXcgbi5YRkFPYmplY3RBcnJheSxhLm1hbmlmZXN0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEuc2NyaXB0PW5ldyBuLlhGQU9iamVjdEFycmF5LGEudGV4dD1uZXcgbi5YRkFPYmplY3RBcnJheSxhLnRpbWU9bmV3IG4uWEZBT2JqZWN0QXJyYXksYX1yZXR1cm4gdihyLFt7a2V5Om4uJGlzVHJhbnNwYXJlbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XSkscn0obi5YRkFPYmplY3QpLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3kodGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgYT1lW3RdKHIpO3JldHVybiBhW24uJHNldFNldEF0dHJpYnV0ZXNdKHIpLGF9fX0se2tleToiYXBwZWFyYW5jZUZpbHRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHKGUpfX0se2tleToiYXJjIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFcoZSl9fSx7a2V5OiJhc3Npc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImJhcmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWShlKX19LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImJpbmRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKKGUpfX0se2tleToiYm9va2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiYm9vbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRKGUpfX0se2tleToiYm9yZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiYnJlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJicmVha0FmdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiYnJlYWtCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbmUoZSl9fSx7a2V5OiJidXR0b24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYWUoZSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJjYXB0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG9lKGUpfX0se2tleToiY2VydGlmaWNhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc2UoZSl9fSx7a2V5OiJjZXJ0aWZpY2F0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJjaGVja0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1ZShlKX19LHtrZXk6ImNob2ljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJjb2xvciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImNvbWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGRlKGUpfX0se2tleToiY29udGVudEFyZWEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJjb3JuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ2UoZSl9fSx7a2V5OiJkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZlKGUpfX0se2tleToiZGF0ZVRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJkYXRlVGltZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbWUoZSl9fSx7a2V5OiJkZWNpbWFsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUpfX0se2tleToiZGVmYXVsdFVpIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHdlKGUpfX0se2tleToiZGVzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBTZShlKX19LHtrZXk6ImRpZ2VzdE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeGUoZSl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE9lKGUpfX0se2tleToiZWRnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImVuY29kaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IENlKGUpfX0se2tleToiZW5jb2RpbmdzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZlKGUpfX0se2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQZShlKX19LHtrZXk6ImVuY3J5cHREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJZShlKX19LHtrZXk6ImVuY3J5cHRpb25NZXRob2QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRWUoZSl9fSx7a2V5OiJlbmNyeXB0aW9uTWV0aG9kcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6ImV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToiZXhEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF9lKGUpfX0se2tleToiZXhPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9fSx7a2V5OiJleGNsR3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJleGVjdXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToiZXh0cmFzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToiZmllbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQmUoZSl9fSx7a2V5OiJmaWxsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToiZmlsdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToiZmxvYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWGUoZSl9fSx7a2V5OiJmb250Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKGUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHFlKGUpfX0se2tleToiaGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHZShlKX19LHtrZXk6Imh5cGhlbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToiaW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2UoZSl9fSx7a2V5OiJpbWFnZUVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVmUoZSl9fSx7a2V5OiJpbnRlZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFllKGUpfX0se2tleToiaXNzdWVycyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBLZShlKX19LHtrZXk6Iml0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEplKGUpfX0se2tleToia2VlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaZShlKX19LHtrZXk6ImtleVVzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFFlKGUpfX0se2tleToibGluZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBldChlKX19LHtrZXk6ImxpbmVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0dChlKX19LHtrZXk6ImxvY2tEb2N1bWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBydChlKX19LHtrZXk6Im1hbmlmZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG50KGUpfX0se2tleToibWFyZ2luIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToibWRwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToibWVkaXVtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG90KGUpfX0se2tleToibWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6Im51bWVyaWNFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToib2NjdXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJvaWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJvaWRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZ0KGUpfX0se2tleToib3ZlcmZsb3ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaHQoZSl9fSx7a2V5OiJwYWdlQXJlYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InBhZ2VTZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJwYXJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfX0se2tleToicGFzc3dvcmRFZGl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHZ0KGUpfX0se2tleToicGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5dChlKX19LHtrZXk6InBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJwcm90byIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBidChlKX19LHtrZXk6InJhZGlhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3dChlKX19LHtrZXk6InJlYXNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdChlKX19LHtrZXk6InJlYXNvbnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJyZWN0YW5nbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJyZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgT3QoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQXQoZSl9fSx7a2V5OiJzZXRQcm9wZXJ0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDdChlKX19LHtrZXk6InNpZ25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUpfX0se2tleToic2lnbmF0dXJlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToic2lnbmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUdChlKX19LHtrZXk6InNvbGlkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToic3BlYWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRXQoZSl9fSx7a2V5OiJzdGlwcGxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGp0KGUpfX0se2tleToic3ViZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdChlKX19LHtrZXk6InN1YmZvcm1TZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJzdWJqZWN0RE4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTHQoZSl9fSx7a2V5OiJzdWJqZWN0RE5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToic3VibWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE50KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ0ZXh0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJ0KGUpfX0se2tleToidGV4dEVkaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVXQoZSl9fSx7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToidGltZVN0YW1wIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFh0KGUpfX0se2tleToidG9vbFRpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InRyYXZlcnNhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InRyYXZlcnNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEd0KGUpfX0se2tleToidWkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgenQoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFZ0KGUpfX0se2tleToidmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFl0KGUpfX1dKSxlfSgpO3QuVGVtcGxhdGVOYW1lc3BhY2U9S3R9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRIVE1MPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lW24uJGV4dHJhXSx1PXMuYXZhaWxhYmxlU3BhY2UsbD1pKHIsNCksZj1sWzBdLGg9bFsxXSxkPWxbMl0scD1sWzNdO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6cy53aWR0aD1NYXRoLm1heChzLndpZHRoLGYrZCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQsaCtwKSxzLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cy5saW5lJiYxIT09cy5hdHRlbXB0fHwocy5saW5lPWMoZSxbXSkscy5jaGlsZHJlbi5wdXNoKHMubGluZSkscy5udW1iZXJJbkxpbmU9MCkscy5udW1iZXJJbkxpbmUrPTEscy5saW5lLmNoaWxkcmVuLnB1c2godCksMD09PXMuYXR0ZW1wdD8ocy5jdXJyZW50V2lkdGgrPWQscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHQscy5wcmV2SGVpZ2h0K3ApKToocy5jdXJyZW50V2lkdGg9ZCxzLnByZXZIZWlnaHQ9cy5oZWlnaHQscy5oZWlnaHQrPXAscy5hdHRlbXB0PTApLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aCxzLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9ZCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxwKTt2YXIgZyx2PSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCkseT1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9byhlKSkpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLHM9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Yz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7c3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19KHMuY2hpbGRyZW4pO3RyeXtmb3IoeS5zKCk7IShnPXkubigpKS5kb25lOylnLnZhbHVlLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PXZ9Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9YnJlYWs7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbih1LndpZHRoLE1hdGgubWF4KHMud2lkdGgsZCkpLHMuaGVpZ2h0Kz1wLHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO3ZhciByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKSxhPXJbbi4kZXh0cmFdJiZyW24uJGV4dHJhXS5hdHRlbXB0fHwwLG89aShmdW5jdGlvbihlKXt2YXIgdCxyLG49IiI9PT1lLnc/TmFOOmUudyxhPSIiPT09ZS5oP05hTjplLmgsaT0wLG89MDtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOmk9bi8yLG89YTticmVhaztjYXNlImJvdHRvbUxlZnQiOmk9MCxvPWE7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6aT1uLG89YTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6aT1uLzIsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjppPTAsbz1hLzI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6aT1uLG89YS8yO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjppPW4vMixvPTA7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6aT1uLG89MH1zd2l0Y2goZS5yb3RhdGV8fDApe2Nhc2UgMDp0PS1pLHI9LW87YnJlYWs7Y2FzZSA5MDp0PS1vLHI9aTt2YXIgcz1bYSwtbl07bj1zWzBdLGE9c1sxXTticmVhaztjYXNlIDE4MDp0PWkscj1vO3ZhciBjPVstbiwtYV07bj1jWzBdLGE9Y1sxXTticmVhaztjYXNlIDI3MDp0PW8scj0taTt2YXIgdT1bLWEsbl07bj11WzBdLGE9dVsxXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxuKSxlLnkrcitNYXRoLm1pbigwLGEpLE1hdGguYWJzKG4pLE1hdGguYWJzKGEpXX0oZSksNCkscz1vWzFdLGM9b1syXSx1PW9bM107c3dpdGNoKHIubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fDA9PT1yW24uJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQodS10LmhlaWdodCk+MikmJigiIj09PWUud3x8TWF0aC5yb3VuZChjLXQud2lkdGgpPD0yfHwhcltuLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm4hIWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtuLiRpc1NwbGl0dGFibGVdKCk/KCIiPT09ZS53fHxNYXRoLnJvdW5kKGMtdC53aWR0aCk8PTJ8fCFyW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQodS10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodStzLXQuaGVpZ2h0KTw9Mnx8dStzPmVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWEuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8IiI9PT1lLmh8fE1hdGgucm91bmQodS10LmhlaWdodCk8PTI7ZGVmYXVsdDpyZXR1cm4hMH19LHQuZmx1c2hIVE1MPWZ1bmN0aW9uKGUpe2lmKCFlW24uJGV4dHJhXSlyZXR1cm4gbnVsbDt2YXIgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbbi4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtuLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbbi4kZXh0cmFdLmZhaWxpbmdOb2RlKXt2YXIgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goYyhlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuLiRleHRyYV0uYXZhaWxhYmxlU3BhY2Uscj1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtuLiRleHRyYV0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbbi4kZXh0cmFdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtci1lW24uJGV4dHJhXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtuLiRleHRyYV0uY29sdW1uV2lkdGhzLnNsaWNlKGVbbi4kZXh0cmFdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19O3ZhciBuPXIoMjA2KSxhPXIoMjEzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fG8oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIG8oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9zKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBzKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZUJib3g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIXIpcmV0dXJuIG51bGw7dmFyIGk9ZS53O2lmKCIiPT09aSl7aWYoMD09PWUubWF4Vyl7dmFyIG89ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PW8ubGF5b3V0JiYiIiE9PW8udz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLHIud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD11KGkpfXZhciBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe3ZhciBjPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT1jLmxheW91dCYmIiIhPT1jLmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD11KHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5hdHRyaWJ1dGVzLGE9ci5zdHlsZSxpPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhV3JhcHBlciJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOltdfTtpZihyLmNsYXNzLnB1c2goInhmYVdyYXBwZWQiKSxlLmJvcmRlcil7dmFyIG8scyxjPWUuYm9yZGVyW24uJGV4dHJhXSx1PWMud2lkdGhzLGw9Yy5pbnNldHMsZj1sWzBdLGQ9bFszXSxwPWxbMF0rbFsyXSxnPWxbMV0rbFszXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpmLT11WzBdLzIsZC09dVszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KCh1WzFdK3VbM10pLzItZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHVbMF0rdVsyXSkvMi1wLCJweCkiKTticmVhaztjYXNlImxlZnQiOmYtPXVbMF0sZC09dVszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdCh1WzFdK3VbM10tZywicHgpIikscz0iY2FsYygxMDAlICsgIi5jb25jYXQodVswXSt1WzJdLXAsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zz8iY2FsYygxMDAlIC0gIi5jb25jYXQoZywicHgpIik6IjEwMCUiLHM9cD8iY2FsYygxMDAlIC0gIi5jb25jYXQocCwicHgpIik6IjEwMCUifXZhciB2PVsieGZhQm9yZGVyIl07aChlLmJvcmRlcikmJnYucHVzaCgieGZhUHJpbnRPbmx5Iik7Zm9yKHZhciB5PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOnYsc3R5bGU6e3RvcDoiIi5jb25jYXQoZiwicHgiKSxsZWZ0OiIiLmNvbmNhdChkLCJweCIpLHdpZHRoOm8saGVpZ2h0OnN9fSxjaGlsZHJlbjpbXX0sbT0wLGI9WyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXTttPGIubGVuZ3RoO20rKyl7dmFyIHc9YlttXTt2b2lkIDAhPT1hW3ddJiYoeS5hdHRyaWJ1dGVzLnN0eWxlW3ddPWFbd10sZGVsZXRlIGFbd10pfWkuY2hpbGRyZW4ucHVzaCh5LHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcih2YXIgaz0wLFM9WyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdO2s8Uy5sZW5ndGg7aysrKXt2YXIgeD1TW2tdO3ZvaWQgMCE9PWFbeF0mJihpLmF0dHJpYnV0ZXMuc3R5bGVbeF09YVt4XSxkZWxldGUgYVt4XSl9cmV0dXJuImFic29sdXRlIj09PWEucG9zaXRpb24/aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI6aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZGVsZXRlIGEucG9zaXRpb24sYS5hbGlnblNlbGYmJihpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmLGRlbGV0ZSBhLmFsaWduU2VsZiksaX0sdC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZih0LmxheW91dCYmdC5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt2YXIgcixhPXRbbi4kZXh0cmFdLGk9ZS5jb2xTcGFuO3I9LTE9PT1pP2EuY29sdW1uV2lkdGhzLnNsaWNlKGEuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKTphLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4sYS5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0fSksMCksaXNOYU4ocil8fChlLnc9cil9dC5sYXlvdXQmJiJwb3NpdGlvbiIhPT10LmxheW91dCYmKGUueD1lLnk9MCksInRhYmxlIj09PWUubGF5b3V0JiYiIj09PWUudyYmQXJyYXkuaXNBcnJheShlLmNvbHVtbldpZHRocykmJihlLnc9ZS5jb2x1bW5XaWR0aHMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSl9LHQuZml4VGV4dEluZGVudD1mdW5jdGlvbihlKXt2YXIgdD0oMCxpLmdldE1lYXN1cmVtZW50KShlLnRleHRJbmRlbnQsIjBweCIpO2lmKCEodD49MCkpe3ZhciByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPSIiLmNvbmNhdChuLXQsInB4Iil9fSx0LmZpeFVSTD1mdW5jdGlvbihlKXt2YXIgdD0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGUsbnVsbCx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO3JldHVybiB0P3QuaHJlZjpudWxsfSx0LmlzUHJpbnRPbmx5PWgsdC5sYXlvdXRDbGFzcz1mdW5jdGlvbihlKXtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UicG9zaXRpb24iOmRlZmF1bHQ6cmV0dXJuInhmYVBvc2l0aW9uIjtjYXNlImxyLXRiIjpyZXR1cm4ieGZhTHJUYiI7Y2FzZSJybC1yb3ciOnJldHVybiJ4ZmFSbFJvdyI7Y2FzZSJybC10YiI6cmV0dXJuInhmYVJsVGIiO2Nhc2Uicm93IjpyZXR1cm4ieGZhUm93IjtjYXNlInRhYmxlIjpyZXR1cm4ieGZhVGFibGUiO2Nhc2UidGIiOnJldHVybiJ4ZmFUYiJ9fSx0LmxheW91dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsLGE9bnVsbCxpPSExO2lmKCghZS53fHwhZS5oKSYmZS52YWx1ZSl7dmFyIG89MCxzPTA7ZS5tYXJnaW4mJihvPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0LHM9ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQpO3ZhciBjPW51bGwsdT1udWxsO2UucGFyYSYmKHU9T2JqZWN0LmNyZWF0ZShudWxsKSxjPSIiPT09ZS5wYXJhLmxpbmVIZWlnaHQ/bnVsbDplLnBhcmEubGluZUhlaWdodCx1LnRvcD0iIj09PWUucGFyYS5zcGFjZUFib3ZlPzA6ZS5wYXJhLnNwYWNlQWJvdmUsdS5ib3R0b209IiI9PT1lLnBhcmEuc3BhY2VCZWxvdz8wOmUucGFyYS5zcGFjZUJlbG93LHUubGVmdD0iIj09PWUucGFyYS5tYXJnaW5MZWZ0PzA6ZS5wYXJhLm1hcmdpbkxlZnQsdS5yaWdodD0iIj09PWUucGFyYS5tYXJnaW5SaWdodD8wOmUucGFyYS5tYXJnaW5SaWdodCk7dmFyIGw9ZS5mb250O2lmKCFsKWZvcih2YXIgaD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKSxkPWVbbi4kZ2V0UGFyZW50XSgpO2QmJmQhPT1oOyl7aWYoZC5mb250KXtsPWQuZm9udDticmVha31kPWRbbi4kZ2V0UGFyZW50XSgpfXZhciBwPShlLnd8fHQud2lkdGgpLW8sZz1lW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7aWYoZS52YWx1ZS5leERhdGEmJmUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdJiYidGV4dC9odG1sIj09PWUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlKXt2YXIgdj1mKGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGwsdSxjLGcscCk7YT12LndpZHRoLHI9di5oZWlnaHQsaT12LmlzQnJva2VufWVsc2V7dmFyIHk9ZS52YWx1ZVtuLiR0ZXh0XSgpO2lmKHkpe3ZhciBtPWYoeSxsLHUsYyxnLHApO2E9bS53aWR0aCxyPW0uaGVpZ2h0LGk9bS5pc0Jyb2tlbn19bnVsbD09PWF8fGUud3x8KGErPW8pLG51bGw9PT1yfHxlLmh8fChyKz1zKX1yZXR1cm57dzphLGg6cixpc0Jyb2tlbjppfX0sdC5tZWFzdXJlVG9TdHJpbmc9dSx0LnNldEFjY2Vzcz1mdW5jdGlvbihlLHQpe3N3aXRjaChlLmFjY2Vzcyl7Y2FzZSJub25JbnRlcmFjdGl2ZSI6dC5wdXNoKCJ4ZmFOb25JbnRlcmFjdGl2ZSIpO2JyZWFrO2Nhc2UicmVhZE9ubHkiOnQucHVzaCgieGZhUmVhZE9ubHkiKTticmVhaztjYXNlInByb3RlY3RlZCI6dC5wdXNoKCJ4ZmFEaXNhYmxlZCIpfX0sdC5zZXRGb250RmFtaWx5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHIpe3ZhciBhPSgwLGkuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpO24uZm9udEZhbWlseT0nIicuY29uY2F0KGEsJyInKTt2YXIgcz1yLmZpbmQoYSk7aWYocyl7dmFyIGM9cy5yZWd1bGFyLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7YyE9PWEmJihuLmZvbnRGYW1pbHk9JyInLmNvbmNhdChjLCciJykpO3ZhciB1PWQodCk7aWYodSYmIiIhPT11LmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47dmFyIGw9KDAsby5zZWxlY3RGb250KShlLHMpO2wmJihuLmxpbmVIZWlnaHQ9TWF0aC5tYXgoMS4yLGwubGluZUhlaWdodCkpfX1lbHNlIGRlbGV0ZSBuLmZvbnRGYW1pbHl9LHQuc2V0TWluTWF4RGltZW5zaW9ucz1mdW5jdGlvbihlLHQpeyJwb3NpdGlvbiI9PT1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0JiYoZS5taW5XPjAmJih0Lm1pbldpZHRoPXUoZS5taW5XKSksZS5tYXhXPjAmJih0Lm1heFdpZHRoPXUoZS5tYXhXKSksZS5taW5IPjAmJih0Lm1pbkhlaWdodD11KGUubWluSCkpLGUubWF4SD4wJiYodC5tYXhIZWlnaHQ9dShlLm1heEgpKSl9LHQuc2V0UGFyYT1mdW5jdGlvbihlLHQscil7aWYoci5hdHRyaWJ1dGVzLmNsYXNzJiZyLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7dCYmKCIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKSwiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKSk7dmFyIGE9ZChlKTtpZihhKXt2YXIgaT1yLmF0dHJpYnV0ZXMuc3R5bGU7c3dpdGNoKGkuZGlzcGxheT0iZmxleCIsaS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGEudkFsaWduKXtjYXNlInRvcCI6aS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjppLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjppLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWZvcih2YXIgbz1hW24uJHRvU3R5bGVdKCkscz0wLHU9T2JqZWN0LmVudHJpZXMobyk7czx1Lmxlbmd0aDtzKyspe3ZhciBsPSgyLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHA9dVtzXSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7Zm9yKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA7IShjPShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSksMiE9PXMubGVuZ3RoKTtjPSEwKTt9Y2F0Y2goZSl7dT0hMCxhPWV9ZmluYWxseXt0cnl7aWYoIWMmJm51bGwhPXIucmV0dXJuJiYobz1yLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgYX19cmV0dXJuIHN9fShwKXx8ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSwyKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsMik6dm9pZCAwfX0ocCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksZj1sWzBdLGg9bFsxXTtmIGluIGl8fChpW2ZdPWgpfX19dmFyIHB9LHQudG9TdHlsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKylpW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgcz0wLGM9aTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXSxmPWVbdV07aWYobnVsbCE9PWYpaWYobC5oYXNPd25Qcm9wZXJ0eSh1KSlsW3VdKGUsdCk7ZWxzZSBpZihmIGluc3RhbmNlb2Ygbi5YRkFPYmplY3Qpe3ZhciBoPWZbbi4kdG9TdHlsZV0oKTtoP09iamVjdC5hc3NpZ24odCxoKTooMCxhLndhcm4pKCIoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICIuY29uY2F0KHUsIiBub3QgaW1wbGVtZW50ZWQgeWV0IikpfX1yZXR1cm4gdH07dmFyIG49cigyMDYpLGE9cigyKSxpPXIoMjA3KSxvPXIoMjE0KSxzPXIoMjE1KTtmdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfXZhciBsPXthbmNob3JUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKHImJighci5sYXlvdXR8fCJwb3NpdGlvbiI9PT1yLmxheW91dCkpc3dpdGNoKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSxlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fSxkaW1lbnNpb25zOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGE9ZS53LGk9ZS5oO2lmKHIubGF5b3V0JiZyLmxheW91dC5pbmNsdWRlcygicm93Iikpe3ZhciBvLHM9cltuLiRleHRyYV0sYz1lLmNvbFNwYW47LTE9PT1jPyhvPXMuY29sdW1uV2lkdGhzLnNsaWNlKHMuY3VycmVudENvbHVtbikucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSxzLmN1cnJlbnRDb2x1bW49MCk6KG89cy5jb2x1bW5XaWR0aHMuc2xpY2Uocy5jdXJyZW50Q29sdW1uLHMuY3VycmVudENvbHVtbitjKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLDApLHMuY3VycmVudENvbHVtbj0ocy5jdXJyZW50Q29sdW1uK2UuY29sU3Bhbiklcy5jb2x1bW5XaWR0aHMubGVuZ3RoKSxpc05hTihvKXx8KGE9ZS53PW8pfXQud2lkdGg9IiIhPT1hP3UoYSk6ImF1dG8iLHQuaGVpZ2h0PSIiIT09aT91KGkpOiJhdXRvIn0scG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7ciYmci5sYXlvdXQmJiJwb3NpdGlvbiIhPT1yLmxheW91dHx8KHQucG9zaXRpb249ImFic29sdXRlIix0LmxlZnQ9dShlLngpLHQudG9wPXUoZS55KSl9LHJvdGF0ZTpmdW5jdGlvbihlLHQpe2Uucm90YXRlJiYoInRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpLHQudHJhbnNmb3JtKz0icm90YXRlKC0iLmNvbmNhdChlLnJvdGF0ZSwiZGVnKSIpLHQudHJhbnNmb3JtT3JpZ2luPSJ0b3AgbGVmdCIpfSxwcmVzZW5jZTpmdW5jdGlvbihlLHQpe3N3aXRjaChlLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6dC52aXNpYmlsaXR5PSJoaWRkZW4iO2JyZWFrO2Nhc2UiaGlkZGVuIjpjYXNlImluYWN0aXZlIjp0LmRpc3BsYXk9Im5vbmUifX0saEFsaWduOmZ1bmN0aW9uKGUsdCl7aWYoInBhcmEiPT09ZVtuLiRub2RlTmFtZV0pc3dpdGNoKGUuaEFsaWduKXtjYXNlImp1c3RpZnlBbGwiOnQudGV4dEFsaWduPSJqdXN0aWZ5LWFsbCI7YnJlYWs7Y2FzZSJyYWRpeCI6dC50ZXh0QWxpZ249ImxlZnQiO2JyZWFrO2RlZmF1bHQ6dC50ZXh0QWxpZ249ZS5oQWxpZ259ZWxzZSBzd2l0Y2goZS5oQWxpZ24pe2Nhc2UibGVmdCI6dC5hbGlnblNlbGY9InN0YXJ0IjticmVhaztjYXNlImNlbnRlciI6dC5hbGlnblNlbGY9ImNlbnRlciI7YnJlYWs7Y2FzZSJyaWdodCI6dC5hbGlnblNlbGY9ImVuZCJ9fSxtYXJnaW46ZnVuY3Rpb24oZSx0KXtlLm1hcmdpbiYmKHQubWFyZ2luPWUubWFyZ2luW24uJHRvU3R5bGVdKCkubWFyZ2luKX19O2Z1bmN0aW9uIGYoZSx0LHIsYSxpLG8pe3ZhciBjPW5ldyBzLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShvKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZChlKXt2YXIgdD1lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXt2YXIgaT0oMCxhLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKSxvPWVbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGkpO3I9ZChlLG8pfWlmKCFyKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O3ZhciBzPWUuc2l6ZXx8MTAsYz1yLmxpbmVIZWlnaHQ/TWF0aC5tYXgodD8wOjEuMixyLmxpbmVIZWlnaHQpOjEuMix1PXZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXA7cmV0dXJue2xpbmVIZWlnaHQ6YypzLGxpbmVHYXA6dSpzLGxpbmVOb0dhcDpNYXRoLm1heCgxLGMtdSkqc319LHQuc2VsZWN0Rm9udD1kO3ZhciBuPXIoMjA2KSxhPXIoMjA3KSxpPXIoMik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbyhlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPXUoZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgbj0wLGE9ZnVuY3Rpb24oKXt9O3JldHVybntzOmEsbjpmdW5jdGlvbigpe3JldHVybiBuPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtuKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOmF9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPXIuY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPXIubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsaT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX19fWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1vKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09byhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PW8oYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmZvbnRzPW5ldyBNYXAsdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMud2FybmVkPW5ldyBTZXQsdGhpcy5kZWZhdWx0Rm9udD1udWxsLHRoaXMuYWRkKHQpfXZhciB0LHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1jKGUpO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIGE9dC52YWx1ZTt0aGlzLmFkZFBkZkZvbnQoYSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXZhciBpLG89Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7cy5yZWd1bGFyfHwocy5yZWd1bGFyPXMuaXRhbGljfHxzLmJvbGR8fHMuYm9sZGl0YWxpYyl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHImJjAhPT1yLnNpemUpe3ZhciB1LGw9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpLGY9YyhyKTt0cnl7Zm9yKGYucygpOyEodT1mLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7dGhpcy5mb250cy5zZXQoaCxsKX19Y2F0Y2goZSl7Zi5lKGUpfWZpbmFsbHl7Zi5mKCl9fX19LHtrZXk6ImFkZFBkZkZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY3NzRm9udEluZm8scj10LmZvbnRGYW1pbHksbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO3ZhciBhPSIiLGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP2E9aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihhPSJib2xkIiksYXx8KChlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWUmJmUucHNOYW1lLmluY2x1ZGVzKCJCb2xkIikpJiYoYT0iYm9sZCIpLChlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lJiYoZS5wc05hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLnBzTmFtZS5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX19LHtrZXk6ImdldERlZmF1bHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9fSx7a2V5OiJmaW5kIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7dmFyIG49Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpLGE9ZS5yZXBsYWNlKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkpcmV0dXJuIHRoaXMuY2FjaGUuc2V0KGUscikscjthPWEudG9Mb3dlckNhc2UoKTt2YXIgbyx1PVtdLGw9Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgZj1zKG8udmFsdWUsMiksaD1mWzBdLGQ9ZlsxXTtoLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goZCl9fWNhdGNoKGUpe2wuZShlKX1maW5hbGx5e2wuZigpfWlmKDA9PT11Lmxlbmd0aCl7dmFyIHAsZz1jKHRoaXMuZm9udHMuZW50cmllcygpKTt0cnl7Zm9yKGcucygpOyEocD1nLm4oKSkuZG9uZTspe3ZhciB2PXMocC52YWx1ZSwyKVsxXTt2LnJlZ3VsYXIubmFtZSYmdi5yZWd1bGFyLm5hbWUucmVwbGFjZShuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkmJnUucHVzaCh2KX19Y2F0Y2goZSl7Zy5lKGUpfWZpbmFsbHl7Zy5mKCl9fWlmKDA9PT11Lmxlbmd0aCl7YT1hLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO3ZhciB5LG09Yyh0aGlzLmZvbnRzLmVudHJpZXMoKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj1zKHkudmFsdWUsMiksdz1iWzBdLGs9YlsxXTt3LnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goayl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfX1pZigwPT09dS5sZW5ndGgpe3ZhciBTLHg9Yyh0aGlzLmZvbnRzLnZhbHVlcygpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7Ty5yZWd1bGFyLm5hbWUmJk8ucmVndWxhci5uYW1lLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZ1LnB1c2goTyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfX1yZXR1cm4gdS5sZW5ndGg+PTE/KDEhPT11Lmxlbmd0aCYmdCYmKDAsaS53YXJuKSgiWEZBIC0gVG9vIG1hbnkgY2hvaWNlcyB0byBndWVzcyB0aGUgY29ycmVjdCBmb250OiAiLmNvbmNhdChlKSksdGhpcy5jYWNoZS5zZXQoZSx1WzBdKSx1WzBdKToodCYmIXRoaXMud2FybmVkLmhhcyhlKSYmKHRoaXMud2FybmVkLmFkZChlKSwoMCxpLndhcm4pKCJYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogIi5jb25jYXQoZSkpKSxudWxsKX19XSxyJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiJpdGFsaWMiPT09ZS5wb3N0dXJlPyJib2xkIj09PWUud2VpZ2h0P3QuYm9sZGl0YWxpYzp0Lml0YWxpYzoiYm9sZCI9PT1lLndlaWdodD90LmJvbGQ6dC5yZWd1bGFyfXQuRm9udEZpbmRlcj1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciBuPXIoMjE0KTtmdW5jdGlvbiBhKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8cyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09aShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWkoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsYSxpKXtpZih1KHRoaXMsZSksdGhpcy5saW5lSGVpZ2h0PWEsdGhpcy5wYXJhTWFyZ2luPXJ8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH0sIXQpe3ZhciBzPW8odGhpcy5kZWZhdWx0Rm9udChpKSwyKTtyZXR1cm4gdGhpcy5wZGZGb250PXNbMF0sdm9pZCh0aGlzLnhmYUZvbnQ9c1sxXSl9dGhpcy54ZmFGb250PXt0eXBlZmFjZTp0LnR5cGVmYWNlLHBvc3R1cmU6dC5wb3N0dXJlLHdlaWdodDp0LndlaWdodCxzaXplOnQuc2l6ZSxsZXR0ZXJTcGFjaW5nOnQubGV0dGVyU3BhY2luZ307dmFyIGM9aS5maW5kKHQudHlwZWZhY2UpO2lmKCFjKXt2YXIgbD1vKHRoaXMuZGVmYXVsdEZvbnQoaSksMik7cmV0dXJuIHRoaXMucGRmRm9udD1sWzBdLHZvaWQodGhpcy54ZmFGb250PWxbMV0pfWlmKHRoaXMucGRmRm9udD0oMCxuLnNlbGVjdEZvbnQpKHQsYyksIXRoaXMucGRmRm9udCl7dmFyIGY9byh0aGlzLmRlZmF1bHRGb250KGkpLDIpO3RoaXMucGRmRm9udD1mWzBdLHRoaXMueGZhRm9udD1mWzFdfX1yZXR1cm4gZihlLFt7a2V5OiJkZWZhdWx0Rm9udCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXt2YXIgcj10LnJlZ3VsYXI7cmV0dXJuW3Ise3R5cGVmYWNlOnIuY3NzRm9udEluZm8uZm9udEZhbWlseSxwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfXJldHVybltudWxsLHt0eXBlZmFjZToiQ291cmllciIscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX19XSksZX0oKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixhKXt1KHRoaXMsZSksdGhpcy5mb250RmluZGVyPWEsdGhpcy5zdGFjaz1bbmV3IGgodCxyLG4sYSldfXJldHVybiBmKGUsW3trZXk6InB1c2hEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMuc3RhY2suYXQoLTEpLGE9MCxpPVsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXTthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dfHwoZVtvXT1uLnhmYUZvbnRbb10pfWZvcih2YXIgcz0wLGM9WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXTtzPGMubGVuZ3RoO3MrKyl7dmFyIHU9Y1tzXTtpc05hTih0W3VdKSYmKHRbdV09bi5wYXJhTWFyZ2luW3VdKX12YXIgbD1uZXcgaChlLHQscnx8bi5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bC5wZGZGb250fHwobC5wZGZGb250PW4ucGRmRm9udCksdGhpcy5zdGFjay5wdXNoKGwpfX0se2tleToicG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpfX0se2tleToidG9wRm9udCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fV0pLGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4sYSl7dSh0aGlzLGUpLHRoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBkKHQscixuLGEpLHRoaXMuZXh0cmFIZWlnaHQ9MH1yZXR1cm4gZihlLFt7a2V5OiJwdXNoRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxyKX19LHtrZXk6InBvcEZvbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9fSx7a2V5OiJhZGRQYXJhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219fSx7a2V5OiJhZGRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxyPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7dmFyIG4saT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxvPXQucGRmRm9udCxzPW8ubGluZUhlaWdodHx8MS4yLGM9dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqcix1PXMtKHZvaWQgMD09PW8ubGluZUdhcD8uMjpvLmxpbmVHYXApLGw9TWF0aC5tYXgoMSx1KSpyLGY9ci8xZTMsaD1vLmRlZmF1bHRXaWR0aHx8by5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGgsZD1hKGUuc3BsaXQoL1tcdTIwMjlcbl0vKSk7dHJ5e2ZvcihkLnMoKTshKG49ZC5uKCkpLmRvbmU7KXt2YXIgcCxnPW4udmFsdWUsdj1vLmVuY29kZVN0cmluZyhnKS5qb2luKCIiKSx5PWEoby5jaGFyc1RvR2x5cGhzKHYpKTt0cnl7Zm9yKHkucygpOyEocD15Lm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWUsYj1tLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW2IqZitpLGMsbCxtLnVuaWNvZGUsITFdKX19Y2F0Y2goZSl7eS5lKGUpfWZpbmFsbHl7eS5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtkLmUoZSl9ZmluYWxseXtkLmYoKX10aGlzLmdseXBocy5wb3AoKX1lbHNle3ZhciB3LGs9YShlLnNwbGl0KC9bXHUyMDI5XG5dLykpO3RyeXtmb3Ioay5zKCk7ISh3PWsubigpKS5kb25lOyl7dmFyIFMseD1hKHcudmFsdWUuc3BsaXQoIiIpKTt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBPPVMudmFsdWU7dGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLE8sITFdKX19Y2F0Y2goZSl7eC5lKGUpfWZpbmFsbHl7eC5mKCl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfX1jYXRjaChlKXtrLmUoZSl9ZmluYWxseXtrLmYoKX10aGlzLmdseXBocy5wb3AoKX19fX0se2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS0xLHI9MCxuPTAsYT0wLGk9MCxzPTAsYz0hMSx1PSEwLGw9MCxmPXRoaXMuZ2x5cGhzLmxlbmd0aDtsPGY7bCsrKXt2YXIgaD1vKHRoaXMuZ2x5cGhzW2xdLDUpLGQ9aFswXSxwPWhbMV0sZz1oWzJdLHY9IiAiPT09aFszXSx5PXU/ZzpwO2hbNF0/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPXksdD0tMSxyPTAsdT0hMSk6dj9pK2Q+ZT8obj1NYXRoLm1heChuLGkpLGk9MCxhKz1zLHM9eSx0PS0xLHI9MCxjPSEwLHU9ITEpOihzPU1hdGgubWF4KHkscykscj1pLGkrPWQsdD1sKTppK2Q+ZT8oYSs9cyxzPXksLTEhPT10PyhsPXQsbj1NYXRoLm1heChuLHIpLGk9MCx0PS0xLHI9MCk6KG49TWF0aC5tYXgobixpKSxpPWQpLGM9ITAsdT0hMSk6KGkrPWQscz1NYXRoLm1heCh5LHMpKX1yZXR1cm57d2lkdGg6MS4wMioobj1NYXRoLm1heChuLGkpKSxoZWlnaHQ6YSs9cyt0aGlzLmV4dHJhSGVpZ2h0LGlzQnJva2VuOmN9fX1dKSxlfSgpO3QuVGV4dE1lYXN1cmU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgbj1yKDIwNik7ZnVuY3Rpb24gYShlKXtyZXR1cm4gYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYShlKX1mdW5jdGlvbiBpKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1zKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtjPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHMoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHMoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGMoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9jKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1hKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09YShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PWEoaSk/aTpTdHJpbmcoaSkpLG4pfXZhciBpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuZGF0YT1yLHRoaXMuZGF0YXNldD10LmRhdGFzZXRzfHxudWxsfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W1stMSx0aGlzLmRhdGFbbi4kZ2V0Q2hpbGRyZW5dKCldXTt0Lmxlbmd0aD4wOyl7dmFyIHI9dC5hdCgtMSksYT1vKHIsMikscz1hWzBdLGM9YVsxXTtpZihzKzEhPT1jLmxlbmd0aCl7dmFyIHU9Y1srK3JbMF1dLGw9ZS5nZXQodVtuLiR1aWRdKTtpZihsKXVbbi4kc2V0VmFsdWVdKGwpO2Vsc2V7dmFyIGYsaD1pKHVbbi4kZ2V0QXR0cmlidXRlc10oKS52YWx1ZXMoKSk7dHJ5e2ZvcihoLnMoKTshKGY9aC5uKCkpLmRvbmU7KXt2YXIgZD1mLnZhbHVlLHA9ZS5nZXQoZFtuLiR1aWRdKTtpZihwKXtkW24uJHNldFZhbHVlXShwKTticmVha319fWNhdGNoKGUpe2guZShlKX1maW5hbGx5e2guZigpfX12YXIgZz11W24uJGdldENoaWxkcmVuXSgpO2cubGVuZ3RoPjAmJnQucHVzaChbLTEsZ10pfWVsc2UgdC5wb3AoKX12YXIgdj1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldCl7dmFyIHksbT1pKHRoaXMuZGF0YXNldFtuLiRnZXRDaGlsZHJlbl0oKSk7dHJ5e2ZvcihtLnMoKTshKHk9bS5uKCkpLmRvbmU7KXt2YXIgYj15LnZhbHVlOyJkYXRhIiE9PWJbbi4kbm9kZU5hbWVdJiZiW24uJHRvU3RyaW5nXSh2KX19Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fXJldHVybiB0aGlzLmRhdGFbbi4kdG9TdHJpbmddKHYpLHYucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iiksdi5qb2luKCIiKX19XSkmJnUodC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LkRhdGFIYW5kbGVyPWx9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigxOTUpLG89cigyMTgpLHM9cigyKTtmdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fHUoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIHUoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGwoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9sKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBsKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZoKGUsdCl9KHYsZSk7dmFyIHQscixsLHAsZz0obD12LHA9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsdD1kKGwpO2lmKHApe3ZhciByPWQodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyxyKX1lbHNlIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIHYoKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx2KSwoZT1nLmNhbGwodGhpcykpLl9idWlsZGVyPW5ldyBvLkJ1aWxkZXIodCksZS5fc3RhY2s9W10sZS5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fSxlLl9pZHM9bmV3IE1hcCxlLl9jdXJyZW50PWUuX2J1aWxkZXIuYnVpbGRSb290KGUuX2lkcyksZS5fZXJyb3JDb2RlPWkuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IsZS5fd2hpdGVSZWdleD0vXlxzKyQvLGUuX25ic3BzPS9ceGEwKy9nLGUuX3JpY2hUZXh0PXIsZX1yZXR1cm4gdD12LChyPVt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5wYXJzZVhtbChlKSx0aGlzLl9lcnJvckNvZGU9PT1pLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXJldHVybiB0aGlzLl9jdXJyZW50W2EuJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnQuZWxlbWVudH19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UodGhpcy5fbmJzcHMsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKDEpKyIgIn0pKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFthLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbYS4kb25UZXh0XShlLnRyaW0oKSl9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50W2EuJG9uVGV4dF0oZSl9fSx7a2V5OiJfbWtBdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49bnVsbCxpPW51bGwsbz1PYmplY3QuY3JlYXRlKHt9KSxjPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj11KGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihjLnMoKTshKHI9Yy5uKCkpLmRvbmU7KXt2YXIgbD1yLnZhbHVlLGY9bC5uYW1lLGg9bC52YWx1ZTtpZigieG1sbnMiPT09ZiluPygwLHMud2FybikoIlhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwiLmNvbmNhdCh0LCI+IikpOm49aDtlbHNlIGlmKGYuc3RhcnRzV2l0aCgieG1sbnM6Iikpe3ZhciBkPWYuc3Vic3RyaW5nKDYpO2l8fChpPVtdKSxpLnB1c2goe3ByZWZpeDpkLHZhbHVlOmh9KX1lbHNle3ZhciBwPWYuaW5kZXhPZigiOiIpO2lmKC0xPT09cClvW2ZdPWg7ZWxzZXt2YXIgZz1vW2EuJG5zQXR0cmlidXRlc107Z3x8KGc9b1thLiRuc0F0dHJpYnV0ZXNdPU9iamVjdC5jcmVhdGUobnVsbCkpO3ZhciB2PVtmLnNsaWNlKDAscCksZi5zbGljZShwKzEpXSx5PXZbMF0sbT12WzFdLGI9Z1t5XTtifHwoYj1nW3ldPU9iamVjdC5jcmVhdGUobnVsbCkpLGJbbV09aH19fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1yZXR1cm5bbixpLG9dfX0se2tleToiX2dldE5hbWVBbmRQcmVmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19fSx7a2V5OiJvbkJlZ2luRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWModGhpcy5fbWtBdHRyaWJ1dGVzKHQsZSksMyksaT1uWzBdLG89blsxXSxzPW5bMl0sdT1jKHRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSwyKSxsPXVbMF0sZj11WzFdLGg9dGhpcy5fYnVpbGRlci5idWlsZCh7bnNQcmVmaXg6ZixuYW1lOmwsYXR0cmlidXRlczpzLG5hbWVzcGFjZTppLHByZWZpeGVzOm99KTtpZihoW2EuJGdsb2JhbERhdGFdPXRoaXMuX2dsb2JhbERhdGEscilyZXR1cm4gaFthLiRmaW5hbGl6ZV0oKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKGgpJiZoW2EuJHNldElkXSh0aGlzLl9pZHMpLHZvaWQgaFthLiRjbGVhbl0odGhpcy5fYnVpbGRlcik7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KSx0aGlzLl9jdXJyZW50PWh9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnQ7aWYodFthLiRpc0NEQVRBWG1sXSgpJiYic3RyaW5nIj09dHlwZW9mIHRbYS4kY29udGVudF0pe3ZhciByPW5ldyB2O3IuX2dsb2JhbERhdGE9dGhpcy5fZ2xvYmFsRGF0YTt2YXIgbj1yLnBhcnNlKHRbYS4kY29udGVudF0pO3RbYS4kY29udGVudF09bnVsbCx0W2EuJG9uQ2hpbGRdKG4pfXRbYS4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W2EuJG9uQ2hpbGRdKHQpJiZ0W2EuJHNldElkXSh0aGlzLl9pZHMpLHRbYS4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfX0se2tleToib25FcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZXJyb3JDb2RlPWV9fV0pJiZmKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHZ9KGkuWE1MUGFyc2VyQmFzZSk7dC5YRkFQYXJzZXI9cH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQnVpbGRlcj12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpLG89cigyMTkpLHM9cigyMTEpLGM9cigyMjgpLHU9cigyKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGYoZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGYoZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGgoZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9oKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBoKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmcChlLnByb3RvdHlwZSx0KSxyJiZwKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KCl7cmV0dXJuIHY9InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT13KGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTphLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZtKGUsdCl9ZnVuY3Rpb24gbShlLHQpe3JldHVybiBtPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbShlLHQpfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9dyhlKTtpZih0KXt2YXIgaT13KHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LHcoZSl9dmFyIGs9ZnVuY3Rpb24oZSl7eShyLGUpO3ZhciB0PWIocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZCh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKSkuZWxlbWVudD1udWxsLG5baS4kaWRzXT1lLG59cmV0dXJuIGcocixbe2tleTppLiRvbkNoaWxkLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH19LHtrZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt2KHcoci5wcm90b3R5cGUpLGkuJGZpbmFsaXplLHRoaXMpLmNhbGwodGhpcyksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbaS4kaWRzXS5zZXQoaS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtpLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tpLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbaS4kaWRzXT10aGlzW2kuJGlkc10pfX1dKSxyfShpLlhGQU9iamVjdCksUz1mdW5jdGlvbihlKXt5KHIsZSk7dmFyIHQ9YihyKTtmdW5jdGlvbiByKCl7cmV0dXJuIGQodGhpcyxyKSx0LmNhbGwodGhpcywtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gZyhyLFt7a2V5OmkuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITF9fV0pLHJ9KGkuWEZBT2JqZWN0KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7ZCh0aGlzLGUpLHRoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4LmFwcGx5KE1hdGgsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaChlKX0odD1PYmplY3QudmFsdWVzKGEuTmFtZXNwYWNlSWRzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSkpKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8Zih0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKSksdGhpcy5fY3VycmVudE5hbWVzcGFjZT1yfHxuZXcgYy5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfXJldHVybiBnKGUsW3trZXk6ImJ1aWxkUm9vdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYnVpbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubnNQcmVmaXgscj1lLm5hbWUsbj1lLmF0dHJpYnV0ZXMscz1lLm5hbWVzcGFjZSxjPWUucHJlZml4ZXMsdT1udWxsIT09cztpZih1JiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShzKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLG4uaGFzT3duUHJvcGVydHkoaS4kbnNBdHRyaWJ1dGVzKSl7Zm9yKHZhciBmPW8uTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsaD1uW2kuJG5zQXR0cmlidXRlc10sZD1udWxsLHA9MCxnPU9iamVjdC5lbnRyaWVzKGgpO3A8Zy5sZW5ndGg7cCsrKXt2YXIgdj1sKGdbcF0sMikseT12WzBdLG09dlsxXTtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh5KT09PWYpe2Q9e3hmYTptfTticmVha319ZD9uW2kuJG5zQXR0cmlidXRlc109ZDpkZWxldGUgbltpLiRuc0F0dHJpYnV0ZXNdfXZhciBiPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKHQpLHc9YiYmYlthLiRidWlsZFhGQU9iamVjdF0ocixuKXx8bmV3IFM7cmV0dXJuIHdbaS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywodXx8Y3x8d1tpLiRpc05zQWdub3N0aWNdKCkpJiYod1tpLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOnUscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOndbaS4kaXNOc0Fnbm9zdGljXSgpfSksd319LHtrZXk6ImlzTnNBZ25vc3RpYyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9fSx7a2V5OiJfc2VhcmNoTmFtZXNwYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj0wLG49T2JqZWN0LmVudHJpZXMoYS5OYW1lc3BhY2VJZHMpO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1sKG5bcl0sMikscz1pWzBdO2lmKCgwLGlbMV0uY2hlY2spKGUpKXtpZih0PW8uTmFtZXNwYWNlU2V0VXBbc10pcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha319cmV0dXJuIHQ9bmV3IGMuVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKSx0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpLHR9fSx7a2V5OiJfYWRkTmFtZXNwYWNlUHJlZml4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mKGUpKSl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0oZSk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbj10LnZhbHVlLGE9bi5wcmVmaXgsaT1uLnZhbHVlLG89dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGkpLHM9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGEpO3N8fChzPVtdLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChhLHMpKSxzLnB1c2gobyl9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfX19LHtrZXk6Il9nZXROYW1lc3BhY2VUb1VzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7dmFyIHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO3JldHVybiB0JiZ0Lmxlbmd0aD4wP3QuYXQoLTEpOigoMCx1Lndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9fSx7a2V5OiJjbGVhbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuaGFzTmFtZXNwYWNlLG49ZS5wcmVmaXhlcyxhPWUubnNBZ25vc3RpYztyJiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSksbiYmbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLnByZWZpeDt0Ll9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocikucG9wKCl9KSksYSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fV0pLGV9KCk7dC5CdWlsZGVyPXh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIG49cigyMjApLGE9cigyMjEpLGk9cigyMjIpLG89cigyMjMpLHM9cigyMjQpLGM9cigyMjUpLHU9cigyMTEpLGw9cigyMjYpLGY9cigyMjcpLGg9e2NvbmZpZzpuLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOmEuQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpvLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6cy5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6dS5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6bC5YZHBOYW1lc3BhY2UseGh0bWw6Zi5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1ofSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KSxzPXIoMik7ZnVuY3Rpb24gYyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBmKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sZChlLHQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9ZyhlKTtpZih0KXt2YXIgaT1nKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGc9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGcoZSl9dmFyIHY9YS5OYW1lc3BhY2VJZHMuY29uZmlnLmlkLHk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFjcm9iYXQiLCEwKSkuYWNyb2JhdDc9bnVsbCxuLmF1dG9TYXZlPW51bGwsbi5jb21tb249bnVsbCxuLnZhbGlkYXRlPW51bGwsbi52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsLG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxtPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhY3JvYmF0NyIsITApKS5keW5hbWljUmVuZGVyPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLGI9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRTaWxlbnRQcmludCIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxTPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx4PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhZGp1c3REYXRhIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMTApLE89ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xJiZlPD04fSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImFnZW50IiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImFsd2F5c0VtYmVkIil9cmV0dXJuIGwocil9KGkuQ29udGVudE9iamVjdCksRj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiYW1kIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJhcmVhIikpLmxldmVsPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49MSYmZTw9M319KSxuLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxFPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiYXNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJiYXRjaE91dHB1dCIpKS5mb3JtYXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJiZWhhdmlvck92ZXJyaWRlIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09bmV3IE1hcCh0aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcygiOiIpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoIjoiLDIpfSkpKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjYWNoZSIsITApKS50ZW1wbGF0ZUNhY2hlPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNoYW5nZSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxSPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21tb24iLCEwKSkuZGF0YT1udWxsLG4ubG9jYWxlPW51bGwsbi5sb2NhbGVTZXQ9bnVsbCxuLm1lc3NhZ2luZz1udWxsLG4uc3VwcHJlc3NCYW5uZXI9bnVsbCxuLnRlbXBsYXRlPW51bGwsbi52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGwsbi52ZXJzaW9uQ29udHJvbD1udWxsLG4ubG9nPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxOPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJjb21wcmVzcyIpKS5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxEPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29tcHJlc3NPYmplY3RTdHJlYW0iKX1yZXR1cm4gbChyKX0oaS5PcHRpb24xMCksVT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29tcHJlc3Npb24iLCEwKSkuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsbi5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLG4ubGV2ZWw9bnVsbCxuLnR5cGU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiY29uZmlnIiwhMCkpLmFjcm9iYXQ9bnVsbCxuLnByZXNlbnQ9bnVsbCxuLnRyYWNlPW51bGwsbi5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxIPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb250ZW50Q29weSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxxPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJjb3BpZXMiLDEsKGZ1bmN0aW9uKGUpe3JldHVybiBlPj0xfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEc9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImNyZWF0b3IiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImN1cnJlbnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxXPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJkYXRhIiwhMCkpLmFkanVzdERhdGE9bnVsbCxuLmF0dHJpYnV0ZXM9bnVsbCxuLmluY3JlbWVudGFsTG9hZD1udWxsLG4ub3V0cHV0WFNMPW51bGwsbi5yYW5nZT1udWxsLG4ucmVjb3JkPW51bGwsbi5zdGFydE5vZGU9bnVsbCxuLnVyaT1udWxsLG4ud2luZG93PW51bGwsbi54c2w9bnVsbCxuLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksVj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZGVidWciLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFk9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImRlZmF1bHRUeXBlZmFjZSIpKS53cml0aW5nU2NyaXB0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSksbn1yZXR1cm4gbChyKX0oaS5Db250ZW50T2JqZWN0KSxLPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImRvY3VtZW50QXNzZW1ibHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksWj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZHJpdmVyIiwhMCkpLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsbi5mb250SW5mbz1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFE9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksdGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVtYmVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLHJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmNyeXB0Iil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLG5lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJlbmNyeXB0aW9uIiwhMCkpLmVuY3J5cHQ9bnVsbCxuLmVuY3J5cHRpb25MZXZlbD1udWxsLG4ucGVybWlzc2lvbnM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJlbmZvcmNlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxvZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZXF1YXRlIikpLmZvcmNlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9fSksbi5mcm9tPWUuZnJvbXx8IiIsbi50bz1lLnRvfHwiIixufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksc2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsImVxdWF0ZVJhbmdlIikpLmZyb209ZS5mcm9tfHwiIixuLnRvPWUudG98fCIiLG4uX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiIsbn1yZXR1cm4gbChyLFt7a2V5OiJ1bmljb2RlUmFuZ2UiLGdldDpmdW5jdGlvbigpe3ZhciBlLHQ9W10scj0vVVwrKFswLTlhLWZBLUZdKykvLG49ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkoZSl8fChyPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBjKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/YyhlLHQpOnZvaWQgMH19KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX0odGhpcy5fdW5pY29kZVJhbmdlLnNwbGl0KCIsIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkpO3RyeXtmb3Iobi5zKCk7IShlPW4ubigpKS5kb25lOyl7dmFyIGE9ZS52YWx1ZTsxPT09KGE9YS5zcGxpdCgiLSIsMikubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKHIpO3JldHVybiB0P3BhcnNlSW50KHRbMV0sMTYpOjB9KSkpLmxlbmd0aCYmYS5wdXNoKGFbMF0pLHQucHVzaChhKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsInVuaWNvZGVSYW5nZSIsdCl9fV0pLHJ9KGkuWEZBT2JqZWN0KSxjZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSx1ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZXhjbHVkZU5TIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxsZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxmZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiZm9udEluZm8iLCEwKSkuZW1iZWQ9bnVsbCxuLm1hcD1udWxsLG4uc3Vic2V0QmVsb3c9bnVsbCxuLmFsd2F5c0VtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZGVmYXVsdFR5cGVmYWNlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ubmV2ZXJFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksaGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImZvcm1GaWVsZEZpbGxpbmciKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksZGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImdyb3VwUGFyZW50Iil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxwZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxnZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwiaW5jbHVkZVhEUENvbnRlbnQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLHZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkseWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImluY3JlbWVudGFsTWVyZ2UiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksbWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImludGVyYWN0aXZlIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLGJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsYWJlbFByaW50ZXIiLCEwKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSxuLmJhdGNoT3V0cHV0PW51bGwsbi5mbGlwTGFiZWw9bnVsbCxuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksa2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksU2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsImxldmVsIiwwLChmdW5jdGlvbihlKXtyZXR1cm4gZT4wfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLHhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsaW5lYXJpemVkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE9lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEFlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJsb2NhbGVTZXQiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLENlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJsb2ciLCEwKSkubW9kZT1udWxsLG4udGhyZXNob2xkPW51bGwsbi50bz1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEZlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtYXAiLCEwKSkuZXF1YXRlPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uZXF1YXRlUmFuZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFBlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJtZWRpdW1JbmZvIiwhMCkpLm1hcD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxUZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwibWVzc2FnZSIsITApKS5tc2dJZD1udWxsLG4uc2V2ZXJpdHk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm1lc3NhZ2luZyIsITApKS5tZXNzYWdlPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxFZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxqZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibW9kaWZ5QW5ub3RzIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLE1lPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJtc2dJZCIsMSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTF9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksX2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIm5hbWVBdHRyIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxMZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwibmV2ZXJFbWJlZCIpfXJldHVybiBsKHIpfShpLkNvbnRlbnRPYmplY3QpLFJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTImJmU8PTV9KSl9cmV0dXJuIGwocil9KGkuSW50ZWdlck9iamVjdCksTmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm9wZW5BY3Rpb24iLCEwKSkuZGVzdGluYXRpb249bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksRGU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsIm91dHB1dCIsITApKS50bz1udWxsLG4udHlwZT1udWxsLG4udXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEJlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdXRwdXRCaW4iKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLFVlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJvdXRwdXRYU0wiLCEwKSkudXJpPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCRlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxYZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFja2V0cyIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXsiKiIhPT10aGlzW2kuJGNvbnRlbnRdJiYodGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpfSkpKX19XSkscn0oaS5TdHJpbmdPYmplY3QpLEhlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwYWdlT2Zmc2V0IikpLng9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxuLnk9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KSxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCkscWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBhZ2VSYW5nZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpLHQ9W10scj0wLG49ZS5sZW5ndGg7cjxuO3IrPTIpdC5wdXNoKGUuc2xpY2UocixyKzIpKTt0aGlzW2kuJGNvbnRlbnRdPXR9fV0pLHJ9KGkuU3RyaW5nT2JqZWN0KSxHZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx6ZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLFdlPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwYXJ0IiwxLChmdW5jdGlvbihlKXtyZXR1cm4hMX0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxWZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwicGNsIiwhMCkpLm5hbWU9ZS5uYW1lfHwiIixuLmJhdGNoT3V0cHV0PW51bGwsbi5mb250SW5mbz1udWxsLG4uam9nPW51bGwsbi5tZWRpdW1JbmZvPW51bGwsbi5vdXRwdXRCaW49bnVsbCxuLnBhZ2VPZmZzZXQ9bnVsbCxuLnN0YXBsZT1udWxsLG4ueGRjPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFllPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwZGYiLCEwKSkubmFtZT1lLm5hbWV8fCIiLG4uYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmNvbXByZXNzaW9uPW51bGwsbi5jcmVhdG9yPW51bGwsbi5lbmNyeXB0aW9uPW51bGwsbi5mb250SW5mbz1udWxsLG4uaW50ZXJhY3RpdmU9bnVsbCxuLmxpbmVhcml6ZWQ9bnVsbCxuLm9wZW5BY3Rpb249bnVsbCxuLnBkZmE9bnVsbCxuLnByb2R1Y2VyPW51bGwsbi5yZW5kZXJQb2xpY3k9bnVsbCxuLnNjcmlwdE1vZGVsPW51bGwsbi5zaWxlbnRQcmludD1udWxsLG4uc3VibWl0Rm9ybWF0PW51bGwsbi50YWdnZWQ9bnVsbCxuLnZlcnNpb249bnVsbCxuLnZpZXdlclByZWZlcmVuY2VzPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksS2U9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBkZmEiLCEwKSkuYW1kPW51bGwsbi5jb25mb3JtYW5jZT1udWxsLG4uaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCxuLnBhcnQ9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksSmU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInBlcm1pc3Npb25zIiwhMCkpLmFjY2Vzc2libGVDb250ZW50PW51bGwsbi5jaGFuZ2U9bnVsbCxuLmNvbnRlbnRDb3B5PW51bGwsbi5kb2N1bWVudEFzc2VtYmx5PW51bGwsbi5mb3JtRmllbGRGaWxsaW5nPW51bGwsbi5tb2RpZnlBbm5vdHM9bnVsbCxuLnBsYWludGV4dE1ldGFkYXRhPW51bGwsbi5wcmludD1udWxsLG4ucHJpbnRIaWdoUXVhbGl0eT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxaZT1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicGlja1RyYXlCeVBERlNpemUiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksUWU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInBpY3R1cmUiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJwbGFpbnRleHRNZXRhZGF0YSIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSx0dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCkscnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInByZXNlbnQiLCEwKSkuYmVoYXZpb3JPdmVycmlkZT1udWxsLG4uY2FjaGU9bnVsbCxuLmNvbW1vbj1udWxsLG4uY29waWVzPW51bGwsbi5kZXN0aW5hdGlvbj1udWxsLG4uaW5jcmVtZW50YWxNZXJnZT1udWxsLG4ubGF5b3V0PW51bGwsbi5vdXRwdXQ9bnVsbCxuLm92ZXJwcmludD1udWxsLG4ucGFnaW5hdGlvbj1udWxsLG4ucGFnaW5hdGlvbk92ZXJyaWRlPW51bGwsbi5zY3JpcHQ9bnVsbCxuLnZhbGlkYXRlPW51bGwsbi54ZHA9bnVsbCxuLmRyaXZlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLmxhYmVsUHJpbnRlcj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBjbD1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBkZj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnBzPW5ldyBpLlhGQU9iamVjdEFycmF5LG4uc3VibWl0VXJsPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ud2ViQ2xpZW50PW5ldyBpLlhGQU9iamVjdEFycmF5LG4uenBsPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxudD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJpbnQiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksYXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50SGlnaFF1YWxpdHkiKX1yZXR1cm4gbChyKX0oaS5PcHRpb24wMSksaXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksb3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInByaW50ZXJOYW1lIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxzdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicHJvZHVjZXIiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLGN0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJwcyIsITApKS5uYW1lPWUubmFtZXx8IiIsbi5iYXRjaE91dHB1dD1udWxsLG4uZm9udEluZm89bnVsbCxuLmpvZz1udWxsLG4ubWVkaXVtSW5mbz1udWxsLG4ub3V0cHV0QmluPW51bGwsbi5zdGFwbGU9bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx1dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmFuZ2UiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiLSIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUudHJpbSgpLDEwKX0pKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSksZX0pKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxsdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVjb3JkIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCk7dmFyIGU9cGFyc2VJbnQodGhpc1tpLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tpLiRjb250ZW50XT1lKX19XSkscn0oaS5Db250ZW50T2JqZWN0KSxmdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicmVsZXZhbnQiKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dGhpc1tpLiRjb250ZW50XT10aGlzW2kuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksaHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmFtZSIpfXJldHVybiBsKHIsW3trZXk6aS4kZmluYWxpemUsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzW2kuJGNvbnRlbnRdPXRoaXNbaS4kY29udGVudF0udHJpbSgpLCh0aGlzW2kuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbaS4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksZHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxwdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLGd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzY3JpcHQiLCEwKSkuY3VycmVudFBhZ2U9bnVsbCxuLmV4Y2x1ZGU9bnVsbCxuLnJ1blNjcmlwdHM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksdnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSx5dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLG10PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJzaWxlbnRQcmludCIsITApKS5hZGRTaWxlbnRQcmludD1udWxsLG4ucHJpbnRlck5hbWU9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksYnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInN0YXBsZSIpKS5tb2RlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx3dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnROb2RlIil9cmV0dXJuIGwocil9KGkuU3RyaW5nT2JqZWN0KSxrdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3RhcnRQYWdlIiwwLChmdW5jdGlvbihlKXtyZXR1cm4hMH0pKX1yZXR1cm4gbChyKX0oaS5JbnRlZ2VyT2JqZWN0KSxTdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLHh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJtaXRVcmwiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLE90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdWJzZXRCZWxvdyIsMTAwLChmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MTAwfSkpfXJldHVybiBsKHIpfShpLkludGVnZXJPYmplY3QpLEF0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJzdXBwcmVzc0Jhbm5lciIpfXJldHVybiBsKHIpfShpLk9wdGlvbjAxKSxDdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGFnZ2VkIil9cmV0dXJuIGwocil9KGkuT3B0aW9uMDEpLEZ0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZSIsITApKS5iYXNlPW51bGwsbi5yZWxldmFudD1udWxsLG4uc3RhcnRQYWdlPW51bGwsbi51cmk9bnVsbCxuLnhzbD1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxQdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxUdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEl0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0ZW1wbGF0ZUNhY2hlIikpLm1heEVudHJpZXM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTB9fSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ0cmFjZSIsITApKS5hcmVhPW5ldyBpLlhGQU9iamVjdEFycmF5LG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxqdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwidHJhbnNmb3JtIiwhMCkpLmdyb3VwUGFyZW50PW51bGwsbi5pZkVtcHR5PW51bGwsbi5uYW1lQXR0cj1udWxsLG4ucGljdHVyZT1udWxsLG4ucHJlc2VuY2U9bnVsbCxuLnJlbmFtZT1udWxsLG4ud2hpdGVzcGFjZT1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxNdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLF90PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ1cmkiKX1yZXR1cm4gbChyKX0oaS5TdHJpbmdPYmplY3QpLEx0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfXJldHVybiBsKHIpfShpLk9wdGlvbk9iamVjdCksUnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9cmV0dXJuIGwocixbe2tleTppLiRmaW5hbGl6ZSx2YWx1ZTpmdW5jdGlvbigpe3RoaXNbaS4kY29udGVudF09dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuWyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSl9KSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCksTnQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxEdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBmKHRoaXMsciksdC5jYWxsKHRoaXMsdiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9cmV0dXJuIGwocil9KGkuT3B0aW9uT2JqZWN0KSxCdD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwiVmVyc2lvbkNvbnRyb2wiKSkub3V0cHV0QmVsb3c9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSksbi5zb3VyY2VBYm92ZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKSxuLnNvdXJjZUJlbG93PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLFV0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApKS5BREJFX0pTQ29uc29sZT1udWxsLG4uQURCRV9KU0RlYnVnZ2VyPW51bGwsbi5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsLG4uZHVwbGV4T3B0aW9uPW51bGwsbi5lbmZvcmNlPW51bGwsbi5udW1iZXJPZkNvcGllcz1udWxsLG4ucGFnZVJhbmdlPW51bGwsbi5waWNrVHJheUJ5UERGU2l6ZT1udWxsLG4ucHJpbnRTY2FsaW5nPW51bGwsbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLCR0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ3ZWJDbGllbnQiLCEwKSkubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIixuLmZvbnRJbmZvPW51bGwsbi54ZGM9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksWHQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZih0aGlzLHIpLHQuY2FsbCh0aGlzLHYsIndoaXRlc3BhY2UiLFsicHJlc2VydmUiLCJsdHJpbSIsIm5vcm1hbGl6ZSIsInJ0cmltIiwidHJpbSJdKX1yZXR1cm4gbChyKX0oaS5PcHRpb25PYmplY3QpLEh0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGYodGhpcyxyKSx0LmNhbGwodGhpcyx2LCJ3aW5kb3ciKX1yZXR1cm4gbChyLFt7a2V5OmkuJGZpbmFsaXplLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1tpLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSkpO2Uuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpP3RoaXNbaS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbaS4kY29udGVudF09ZSl9fV0pLHJ9KGkuQ29udGVudE9iamVjdCkscXQ9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInhkYyIsITApKS51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksbi54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gbChyKX0oaS5YRkFPYmplY3QpLEd0PWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGYodGhpcyxyKSwobj10LmNhbGwodGhpcyx2LCJ4ZHAiLCEwKSkucGFja2V0cz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSx6dD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBmKHRoaXMsciksKG49dC5jYWxsKHRoaXMsdiwieHNsIiwhMCkpLmRlYnVnPW51bGwsbi51cmk9bnVsbCxufXJldHVybiBsKHIpfShpLlhGQU9iamVjdCksV3Q9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gZih0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHYsInpwbCIsITApKS5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLG4uYmF0Y2hPdXRwdXQ9bnVsbCxuLmZsaXBMYWJlbD1udWxsLG4uZm9udEluZm89bnVsbCxuLnhkYz1udWxsLG59cmV0dXJuIGwocil9KGkuWEZBT2JqZWN0KSxWdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtmKHRoaXMsZSl9cmV0dXJuIGwoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImFjcm9iYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeShlKX19LHtrZXk6ImFjcm9iYXQ3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9fSx7a2V5OiJBREJFX0pTQ29uc29sZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiQURCRV9KU0RlYnVnZ2VyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJhZGRTaWxlbnRQcmludCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToiYWRkVmlld2VyUHJlZmVyZW5jZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6ImFkanVzdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX19LHtrZXk6ImFnZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fSx7a2V5OiJhbHdheXNFbWJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToiYW1kIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEYoZSl9fSx7a2V5OiJhcmVhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFAoZSl9fSx7a2V5OiJhdHRyaWJ1dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJhdXRvU2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBJKGUpfX0se2tleToiYmFzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFKGUpfX0se2tleToiYmF0Y2hPdXRwdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaihlKX19LHtrZXk6ImJlaGF2aW9yT3ZlcnJpZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTShlKX19LHtrZXk6ImNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJjaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTChlKX19LHtrZXk6ImNvbW1vbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSKGUpfX0se2tleToiY29tcHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTihlKX19LHtrZXk6ImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEKGUpfX0se2tleToiY29tcHJlc3NPYmplY3RTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQihlKX19LHtrZXk6ImNvbXByZXNzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFUoZSl9fSx7a2V5OiJjb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgJChlKX19LHtrZXk6ImNvbmZvcm1hbmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFgoZSl9fSx7a2V5OiJjb250ZW50Q29weSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIKGUpfX0se2tleToiY29waWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHEoZSl9fSx7a2V5OiJjcmVhdG9yIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEcoZSl9fSx7a2V5OiJjdXJyZW50UGFnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6KGUpfX0se2tleToiZGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXKGUpfX0se2tleToiZGVidWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVihlKX19LHtrZXk6ImRlZmF1bHRUeXBlZmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZKGUpfX0se2tleToiZGVzdGluYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSyhlKX19LHtrZXk6ImRvY3VtZW50QXNzZW1ibHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSihlKX19LHtrZXk6ImRyaXZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaKGUpfX0se2tleToiZHVwbGV4T3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFEoZSl9fSx7a2V5OiJkeW5hbWljUmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVlKGUpfX0se2tleToiZW1iZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGUoZSl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJlKGUpfX0se2tleToiZW5jcnlwdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuZShlKX19LHtrZXk6ImVuY3J5cHRpb25MZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhZShlKX19LHtrZXk6ImVuZm9yY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaWUoZSl9fSx7a2V5OiJlcXVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb2UoZSl9fSx7a2V5OiJlcXVhdGVSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzZShlKX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgY2UoZSl9fSx7a2V5OiJleGNsdWRlTlMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdWUoZSl9fSx7a2V5OiJmbGlwTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbGUoZSl9fSx7a2V5OiJmb250SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmZShlKX19LHtrZXk6ImZvcm1GaWVsZEZpbGxpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGUoZSl9fSx7a2V5OiJncm91cFBhcmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkZShlKX19LHtrZXk6ImlmRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcGUoZSl9fSx7a2V5OiJpbmNsdWRlWERQQ29udGVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnZShlKX19LHtrZXk6ImluY3JlbWVudGFsTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2ZShlKX19LHtrZXk6ImluY3JlbWVudGFsTWVyZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeWUoZSl9fSx7a2V5OiJpbnRlcmFjdGl2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtZShlKX19LHtrZXk6ImpvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiZShlKX19LHtrZXk6ImxhYmVsUHJpbnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3ZShlKX19LHtrZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrZShlKX19LHtrZXk6ImxldmVsIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFNlKGUpfX0se2tleToibGluZWFyaXplZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4ZShlKX19LHtrZXk6ImxvY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPZShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBZShlKX19LHtrZXk6ImxvZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDZShlKX19LHtrZXk6Im1hcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBGZShlKX19LHtrZXk6Im1lZGl1bUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUGUoZSl9fSx7a2V5OiJtZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfX0se2tleToibWVzc2FnaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEllKGUpfX0se2tleToibW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZShlKX19LHtrZXk6Im1vZGlmeUFubm90cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqZShlKX19LHtrZXk6Im1zZ0lkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE1lKGUpfX0se2tleToibmFtZUF0dHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX2UoZSl9fSx7a2V5OiJuZXZlckVtYmVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IExlKGUpfX0se2tleToibnVtYmVyT2ZDb3BpZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUmUoZSl9fSx7a2V5OiJvcGVuQWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5lKGUpfX0se2tleToib3V0cHV0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IERlKGUpfX0se2tleToib3V0cHV0QmluIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJlKGUpfX0se2tleToib3V0cHV0WFNMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVlKGUpfX0se2tleToib3ZlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICRlKGUpfX0se2tleToicGFja2V0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYZShlKX19LHtrZXk6InBhZ2VPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgSGUoZSl9fSx7a2V5OiJwYWdlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcWUoZSl9fSx7a2V5OiJwYWdpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEdlKGUpfX0se2tleToicGFnaW5hdGlvbk92ZXJyaWRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHplKGUpfX0se2tleToicGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXZShlKX19LHtrZXk6InBjbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBWZShlKX19LHtrZXk6InBkZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBZZShlKX19LHtrZXk6InBkZmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgS2UoZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKZShlKX19LHtrZXk6InBpY2tUcmF5QnlQREZTaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFplKGUpfX0se2tleToicGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRZShlKX19LHtrZXk6InBsYWludGV4dE1ldGFkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGV0KGUpfX0se2tleToicHJlc2VuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdHQoZSl9fSx7a2V5OiJwcmVzZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJ0KGUpfX0se2tleToicHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSl9fSx7a2V5OiJwcmludEhpZ2hRdWFsaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGF0KGUpfX0se2tleToicHJpbnRTY2FsaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl0KGUpfX0se2tleToicHJpbnRlck5hbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3QoZSl9fSx7a2V5OiJwcm9kdWNlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBzdChlKX19LHtrZXk6InBzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGN0KGUpfX0se2tleToicmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXQoZSl9fSx7a2V5OiJyZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHQoZSl9fSx7a2V5OiJyZWxldmFudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmdChlKX19LHtrZXk6InJlbmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodChlKX19LHtrZXk6InJlbmRlclBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkdChlKX19LHtrZXk6InJ1blNjcmlwdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcHQoZSl9fSx7a2V5OiJzY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ3QoZSl9fSx7a2V5OiJzY3JpcHRNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2dChlKX19LHtrZXk6InNldmVyaXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHl0KGUpfX0se2tleToic2lsZW50UHJpbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbXQoZSl9fSx7a2V5OiJzdGFwbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYnQoZSl9fSx7a2V5OiJzdGFydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd3QoZSl9fSx7a2V5OiJzdGFydFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcga3QoZSl9fSx7a2V5OiJzdWJtaXRGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoZSl9fSx7a2V5OiJzdWJtaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeHQoZSl9fSx7a2V5OiJzdWJzZXRCZWxvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPdChlKX19LHtrZXk6InN1cHByZXNzQmFubmVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF0KGUpfX0se2tleToidGFnZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KGUpfX0se2tleToidGVtcGxhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRnQoZSl9fSx7a2V5OiJ0ZW1wbGF0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEl0KGUpfX0se2tleToidGhyZXNob2xkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB0KGUpfX0se2tleToidG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVHQoZSl9fSx7a2V5OiJ0cmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFdChlKX19LHtrZXk6InRyYW5zZm9ybSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqdChlKX19LHtrZXk6InR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTXQoZSl9fSx7a2V5OiJ1cmkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3QoZSl9fSx7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdChlKX19LHtrZXk6InZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJ0KGUpfX0se2tleToidmFsaWRhdGlvbk1lc3NhZ2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOdChlKX19LHtrZXk6InZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRHQoZSl9fSx7a2V5OiJ2ZXJzaW9uQ29udHJvbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBCdChlKX19LHtrZXk6InZpZXdlclByZWZlcmVuY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUpfX0se2tleToid2ViQ2xpZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0KGUpfX0se2tleToid2hpdGVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBYdChlKX19LHtrZXk6IndpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIdChlKX19LHtrZXk6InhkYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBxdChlKX19LHtrZXk6InhkcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBHdChlKX19LHtrZXk6InhzbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB6dChlKX19LHtrZXk6InpwbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlKX19XSksZX0oKTt0LkNvbmZpZ05hbWVzcGFjZT1WdH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDgpLGk9cigyMDYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBzKGUsdCxyKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxyJiZvKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0JiZsKGUsdCl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbChlLHQpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciByLGE9aChlKTtpZih0KXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO3I9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSByPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMscil9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGgoZSl9dmFyIGQ9YS5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJjb25uZWN0aW9uU2V0IiwhMCkpLndzZGxDb25uZWN0aW9uPW5ldyBpLlhGQU9iamVjdEFycmF5LG4ueG1sQ29ubmVjdGlvbj1uZXcgaS5YRkFPYmplY3RBcnJheSxuLnhzZENvbm5lY3Rpb249bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gcyhyKX0oaS5YRkFPYmplY3QpLGc9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsImVmZmVjdGl2ZUlucHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksdj1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZWZmZWN0aXZlT3V0cHV0UG9saWN5IikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCkseT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwib3BlcmF0aW9uIikpLmlkPWUuaWR8fCIiLG4uaW5wdXQ9ZS5pbnB1dHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5vdXRwdXQ9ZS5vdXRwdXR8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksbT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwicm9vdEVsZW1lbnQiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxiPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJzb2FwQWN0aW9uIikpLmlkPWUuaWR8fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4udXNlPWUudXNlfHwiIixuLnVzZWhyZWY9ZS51c2VocmVmfHwiIixufXJldHVybiBzKHIpfShpLlN0cmluZ09iamVjdCksdz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwic29hcEFkZHJlc3MiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxrPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ1cmkiKSkuaWQ9ZS5pZHx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51c2U9ZS51c2V8fCIiLG4udXNlaHJlZj1lLnVzZWhyZWZ8fCIiLG59cmV0dXJuIHMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ3c2RsQWRkcmVzcyIpKS5pZD1lLmlkfHwiIixuLm5hbWU9ZS5uYW1lfHwiIixuLnVzZT1lLnVzZXx8IiIsbi51c2VocmVmPWUudXNlaHJlZnx8IiIsbn1yZXR1cm4gcyhyKX0oaS5TdHJpbmdPYmplY3QpLHg9ZnVuY3Rpb24oZSl7dShyLGUpO3ZhciB0PWYocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gYyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGQsIndzZGxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsLG4uZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGwsbi5vcGVyYXRpb249bnVsbCxuLnNvYXBBY3Rpb249bnVsbCxuLnNvYXBBZGRyZXNzPW51bGwsbi53c2RsQWRkcmVzcz1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxkLCJ4bWxDb25uZWN0aW9uIiwhMCkpLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiIsbi5uYW1lPWUubmFtZXx8IiIsbi51cmk9bnVsbCxufXJldHVybiBzKHIpfShpLlhGQU9iamVjdCksQT1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBjKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwieHNkQ29ubmVjdGlvbiIsITApKS5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLG4ubmFtZT1lLm5hbWV8fCIiLG4ucm9vdEVsZW1lbnQ9bnVsbCxuLnVyaT1udWxsLG59cmV0dXJuIHMocil9KGkuWEZBT2JqZWN0KSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2ModGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6YS4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZihlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBlW3RdKHIpfX0se2tleToiY29ubmVjdGlvblNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfX0se2tleToiZWZmZWN0aXZlSW5wdXRQb2xpY3kiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZyhlKX19LHtrZXk6ImVmZmVjdGl2ZU91dHB1dFBvbGljeSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB2KGUpfX0se2tleToib3BlcmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHkoZSl9fSx7a2V5OiJyb290RWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBtKGUpfX0se2tleToic29hcEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToic29hcEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdyhlKX19LHtrZXk6InVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfX0se2tleToid3NkbEFkZHJlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUyhlKX19LHtrZXk6IndzZGxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHgoZSl9fSx7a2V5OiJ4bWxDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJ4c2RDb25uZWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEEoZSl9fV0pLGV9KCk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPUN9LChlLHQscik9PntmdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRzTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwNiksaT1yKDIwOCk7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmwoZSx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxsKGUsdCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsYT1oKGUpO2lmKHQpe3ZhciBpPWgodGhpcykuY29uc3RydWN0b3I7cj1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIHI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxyKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX12YXIgZD1pLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCxwPWZ1bmN0aW9uKGUpe3UocixlKTt2YXIgdD1mKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8odGhpcyxyKSx0LmNhbGwodGhpcyxkLCJkYXRhIixlKX1yZXR1cm4gYyhyLFt7a2V5OmEuJGlzTnNBZ25vc3RpYyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEwfX1dKSxyfShhLlhtbE9iamVjdCksZz1mdW5jdGlvbihlKXt1KHIsZSk7dmFyIHQ9ZihyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZCwiZGF0YXNldHMiLCEwKSkuZGF0YT1udWxsLG4uU2lnbmF0dXJlPW51bGwsbn1yZXR1cm4gYyhyLFt7a2V5OmEuJG9uQ2hpbGQsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVthLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbYS4kbmFtZXNwYWNlSWRdPT09ZHx8IlNpZ25hdHVyZSI9PT10JiZlW2EuJG5hbWVzcGFjZUlkXT09PWkuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpLHRoaXNbYS4kYXBwZW5kQ2hpbGRdKGUpfX1dKSxyfShhLlhGQU9iamVjdCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmkuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImRhdGFzZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGcoZSl9fSx7a2V5OiJkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHAoZSl9fV0pLGV9KCk7dC5EYXRhc2V0c05hbWVzcGFjZT12fSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbGVTZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBhPXIoMjA4KSxpPXIoMjA2KSxvPXIoMjA3KTtmdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksciYmcyhlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZihlLHQpfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGYoZSx0KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWQoZSk7aWYodCl7dmFyIGk9ZCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBkKGUpe3JldHVybiBkPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxkKGUpfXZhciBwPWEuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZCxnPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjYWxlbmRhclN5bWJvbHMiLCEwKSkubmFtZT0iZ3JlZ29yaWFuIixuLmRheU5hbWVzPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG4uZXJhTmFtZXM9bnVsbCxuLm1lcmlkaWVtTmFtZXM9bnVsbCxuLm1vbnRoTmFtZXM9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLHY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImN1cnJlbmN5U3ltYm9sIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSx5PWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSkuY3VycmVuY3lTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMyksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLG09ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLGI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImRhdGVQYXR0ZXJucyIsITApKS5kYXRlUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksdz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF0ZVRpbWVTeW1ib2xzIil9cmV0dXJuIGMocil9KGkuQ29udGVudE9iamVjdCksaz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZGF5Iil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxTPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJkYXlOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLmRheT1uZXcgaS5YRkFPYmplY3RBcnJheSg3KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCkseD1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3JldHVybiB1KHRoaXMsciksdC5jYWxsKHRoaXMscCwiZXJhIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxPPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJlcmFOYW1lcyIsITApKS5lcmE9bmV3IGkuWEZBT2JqZWN0QXJyYXkoMiksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEE9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZSIsITApKS5kZXNjPWUuZGVzY3x8IiIsbi5uYW1lPSJpc29uYW1lIixuLmNhbGVuZGFyU3ltYm9scz1udWxsLG4uY3VycmVuY3lTeW1ib2xzPW51bGwsbi5kYXRlUGF0dGVybnM9bnVsbCxuLmRhdGVUaW1lU3ltYm9scz1udWxsLG4ubnVtYmVyUGF0dGVybnM9bnVsbCxuLm51bWJlclN5bWJvbHM9bnVsbCxuLnRpbWVQYXR0ZXJucz1udWxsLG4udHlwZUZhY2VzPW51bGwsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEM9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsImxvY2FsZVNldCIsITApKS5sb2NhbGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEY9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdSh0aGlzLHIpLHQuY2FsbCh0aGlzLHAsIm1lcmlkaWVtIil9cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxQPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJtZXJpZGllbU5hbWVzIiwhMCkpLm1lcmlkaWVtPW5ldyBpLlhGQU9iamVjdEFycmF5KDIpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxUPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHUodGhpcyxyKSx0LmNhbGwodGhpcyxwLCJtb250aCIpfXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksST1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibW9udGhOYW1lcyIsITApKS5hYmJyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZX19KSxuLm1vbnRoPW5ldyBpLlhGQU9iamVjdEFycmF5KDEyKSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksRT1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyUGF0dGVybiIpKS5uYW1lPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pLG59cmV0dXJuIGMocil9KGkuU3RyaW5nT2JqZWN0KSxqPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJQYXR0ZXJucyIsITApKS5udW1iZXJQYXR0ZXJuPW5ldyBpLlhGQU9iamVjdEFycmF5KDQpLG59cmV0dXJuIGMocil9KGkuWEZBT2JqZWN0KSxNPWZ1bmN0aW9uKGUpe2wocixlKTt2YXIgdD1oKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIHUodGhpcyxyKSwobj10LmNhbGwodGhpcyxwLCJudW1iZXJTeW1ib2wiKSkubmFtZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKSxufXJldHVybiBjKHIpfShpLlN0cmluZ09iamVjdCksXz1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwibnVtYmVyU3ltYm9scyIsITApKS5udW1iZXJTeW1ib2w9bmV3IGkuWEZBT2JqZWN0QXJyYXkoNSksbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEw9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJuIikpLm5hbWU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSksbn1yZXR1cm4gYyhyKX0oaS5TdHJpbmdPYmplY3QpLFI9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInRpbWVQYXR0ZXJucyIsITApKS50aW1lUGF0dGVybj1uZXcgaS5YRkFPYmplY3RBcnJheSg0KSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksTj1mdW5jdGlvbihlKXtsKHIsZSk7dmFyIHQ9aChyKTtmdW5jdGlvbiByKGUpe3ZhciBuO3JldHVybiB1KHRoaXMsciksKG49dC5jYWxsKHRoaXMscCwidHlwZUZhY2UiLCEwKSkubmFtZT0iInxlLm5hbWUsbn1yZXR1cm4gYyhyKX0oaS5YRkFPYmplY3QpLEQ9ZnVuY3Rpb24oZSl7bChyLGUpO3ZhciB0PWgocik7ZnVuY3Rpb24gcihlKXt2YXIgbjtyZXR1cm4gdSh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLHAsInR5cGVGYWNlcyIsITApKS50eXBlRmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSxufXJldHVybiBjKHIpfShpLlhGQU9iamVjdCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt1KHRoaXMsZSl9cmV0dXJuIGMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6ImNhbGVuZGFyU3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKGUpfX0se2tleToiY3VycmVuY3lTeW1ib2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdihlKX19LHtrZXk6ImN1cnJlbmN5U3ltYm9scyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB5KGUpfX0se2tleToiZGF0ZVBhdHRlcm4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbShlKX19LHtrZXk6ImRhdGVQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBiKGUpfX0se2tleToiZGF0ZVRpbWVTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHcoZSl9fSx7a2V5OiJkYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX19LHtrZXk6ImRheU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9fSx7a2V5OiJlcmEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeChlKX19LHtrZXk6ImVyYU5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE8oZSl9fSx7a2V5OiJsb2NhbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQShlKX19LHtrZXk6ImxvY2FsZVNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfX0se2tleToibWVyaWRpZW0iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRihlKX19LHtrZXk6Im1lcmlkaWVtTmFtZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUChlKX19LHtrZXk6Im1vbnRoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQoZSl9fSx7a2V5OiJtb250aE5hbWVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJudW1iZXJQYXR0ZXJucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfX0se2tleToibnVtYmVyU3ltYm9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE0oZSl9fSx7a2V5OiJudW1iZXJTeW1ib2xzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IF8oZSl9fSx7a2V5OiJ0aW1lUGF0dGVybiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToidGltZVBhdHRlcm5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFIoZSl9fSx7a2V5OiJ0eXBlRmFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOKGUpfX0se2tleToidHlwZUZhY2VzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fV0pLGV9KCk7dC5Mb2NhbGVTZXROYW1lc3BhY2U9Qn0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShpLGUpO3ZhciB0LHIsYT0odD1pLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGModGhpcyxpKSxhLmNhbGwodGhpcyxmLCJzaWduYXR1cmUiLCEwKX1yZXR1cm4gcyhpKX0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJzaWduYXR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlNpZ25hdHVyZU5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkLGg9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJnUoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9bCh0KTtpZihyKXt2YXIgaT1sKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3JldHVybiBjKHRoaXMsaSksYS5jYWxsKHRoaXMsZiwic3R5bGVzaGVldCIsITApfXJldHVybiBzKGkpfShpLlhGQU9iamVjdCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIHMoZSxudWxsLFt7a2V5OmEuJGJ1aWxkWEZBT2JqZWN0LHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gZVt0XShyKX19LHtrZXk6InN0eWxlc2hlZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9ZH0sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgYT1yKDIwOCksaT1yKDIwNik7ZnVuY3Rpb24gbyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsaT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09bihlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBhPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PW4oYSkpcmV0dXJuIGE7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShhLmtleSksInN5bWJvbCI9PT1uKGkpP2k6U3RyaW5nKGkpKSxhKX12YXIgaX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gdCYmcyhlLnByb3RvdHlwZSx0KSxyJiZzKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSx1KGUsdCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX12YXIgZj1hLk5hbWVzcGFjZUlkcy54ZHAuaWQsaD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfShoLGUpO3ZhciB0LHIscz0odD1oLHI9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUsYT1sKHQpO2lmKHIpe3ZhciBpPWwodGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChhLGFyZ3VtZW50cyxpKX1lbHNlIGU9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodCYmKCJvYmplY3QiPT09bih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX0odGhpcyxlKX0pO2Z1bmN0aW9uIGgoZSl7dmFyIHQ7cmV0dXJuIG8odGhpcyxoKSwodD1zLmNhbGwodGhpcyxmLCJ4ZHAiLCEwKSkudXVpZD1lLnV1aWR8fCIiLHQudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0LmNvbmZpZz1udWxsLHQuY29ubmVjdGlvblNldD1udWxsLHQuZGF0YXNldHM9bnVsbCx0LmxvY2FsZVNldD1udWxsLHQuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0LnRlbXBsYXRlPW51bGwsdH1yZXR1cm4gYyhoLFt7a2V5OmkuJG9uQ2hpbGRDaGVjayx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLk5hbWVzcGFjZUlkc1tlW2kuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbaS4kbmFtZXNwYWNlSWRdPT09dC5pZH19XSksaH0oaS5YRkFPYmplY3QpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBjKGUsbnVsbCxbe2tleTphLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJ4ZHAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaChlKX19XSksZX0oKTt0LlhkcE5hbWVzcGFjZT1kfSwoZSx0LHIpPT57ZnVuY3Rpb24gbihlKXtyZXR1cm4gbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbihlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7dmFyIGE9cigyMDYpLGk9cigyMDgpLG89cigyMTMpLHM9cigyMDcpO2Z1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBhPXRbcl07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGEmJihhLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGk9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1uKGEpKXJldHVybiBhO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0oYS5rZXkpLCJzeW1ib2wiPT09bihpKT9pOlN0cmluZyhpKSksYSl9dmFyIGl9ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIHQmJnUoZS5wcm90b3R5cGUsdCksciYmdShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gZigpe3JldHVybiBmPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9ZyhlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aDwzP2U6cik6YS52YWx1ZX19LGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGgoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmZChlLHQpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGQoZSx0KX1mdW5jdGlvbiBwKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPWcoZSk7aWYodCl7dmFyIGk9Zyh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLGkpfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0JiYoIm9iamVjdCI9PT1uKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpfSh0aGlzLHIpfX1mdW5jdGlvbiBnKGUpe3JldHVybiBnPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxnKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9bnVsbD09ZT9udWxsOiJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1yKXt2YXIgbixhLGksbyxzPVtdLGM9ITAsdT0hMTt0cnl7aWYoaT0ocj1yLmNhbGwoZSkpLm5leHQsMD09PXQpe2lmKE9iamVjdChyKSE9PXIpcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0obj1pLmNhbGwocikpLmRvbmUpJiYocy5wdXNoKG4udmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe3U9ITAsYT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZudWxsIT1yLnJldHVybiYmKG89ci5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGF9fXJldHVybiBzfX0oZSx0KXx8bShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24geShlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9bShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYihlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2IoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn12YXIgdz1pLk5hbWVzcGFjZUlkcy54aHRtbC5pZCxrPVN5bWJvbCgpLFM9bmV3IFNldChbImNvbG9yIiwiZm9udCIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtd2VpZ2h0IiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsImxldHRlci1zcGFjaW5nIiwibGluZS1oZWlnaHQiLCJvcnBoYW5zIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJ0YWItaW50ZXJ2YWwiLCJ0YWItc3RvcCIsInRleHQtYWxpZ24iLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWluZGVudCIsInZlcnRpY2FsLWFsaWduIiwid2lkb3dzIiwia2VybmluZy1tb2RlIiwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIiwieGZhLXNwYWNlcnVuIiwieGZhLXRhYi1zdG9wcyJdKSx4PW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZnVuY3Rpb24oZSl7cmV0dXJuIm5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJ9XSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGZ1bmN0aW9uKGUpe3JldHVybiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIil9XSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixmdW5jdGlvbihlKXtyZXR1cm4ic2NhbGVZKCIuY29uY2F0KE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKSwiKSIpfV0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLG8ubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJsaW5lLWhlaWdodCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tYm90dG9tIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tbGVmdCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsibWFyZ2luLXJpZ2h0IixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJtYXJnaW4tdG9wIixmdW5jdGlvbihlKXtyZXR1cm4oMCxvLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpfV0sWyJ0ZXh0LWluZGVudCIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dLFsiZm9udC1mYW1pbHkiLGZ1bmN0aW9uKGUpe3JldHVybiBlfV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZnVuY3Rpb24oZSl7cmV0dXJuKDAsby5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKX1dXSksTz0vXHMrL2csQT0vW1xyXG5dKy9nLEM9L1xyXG4/L2c7ZnVuY3Rpb24gRihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gbjt2YXIgaSxjPU9iamVjdC5jcmVhdGUobnVsbCksdT15KGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2Zvcih1LnMoKTshKGk9dS5uKCkpLmRvbmU7KXt2YXIgbD12KGkudmFsdWUsMiksZj1sWzBdLGg9bFsxXSxkPXguZ2V0KGYpO2lmKCIiIT09ZCl7dmFyIHA9aDtkJiYocD0ic3RyaW5nIj09dHlwZW9mIGQ/ZDpkKGgsYykpLGYuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09IiIuY29uY2F0KG5bZl0sIiAiKS5jb25jYXQocCk6bi50cmFuc2Zvcm09cDpuW2YucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpXT1wfX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9aWYobi5mb250RmFtaWx5JiYoMCxvLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTpuLmZvbnRGYW1pbHksd2VpZ2h0Om4uZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTpuLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpjLmZvbnRTaXplfHwwfSx0LHRbYS4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixuKSxyJiZuLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09bi52ZXJ0aWNhbEFsaWduJiZuLmZvbnRTaXplKXt2YXIgZz0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLG8ubWVhc3VyZVRvU3RyaW5nKSguNTgzKmcpLG4udmVydGljYWxBbGlnbj0oMCxvLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmcqLjMzMyl9cmV0dXJuIHImJm4uZm9udFNpemUmJihuLmZvbnRTaXplPSJjYWxjKCIuY29uY2F0KG4uZm9udFNpemUsIiAqIHZhcigtLXNjYWxlLWZhY3RvcikpIikpLCgwLG8uZml4VGV4dEluZGVudCkobiksbn12YXIgUD1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSksVD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUsbil7dmFyIGE7cmV0dXJuIGModGhpcyxyKSwoYT10LmNhbGwodGhpcyx3LG4pKVtrXT0hMSxhLnN0eWxlPWUuc3R5bGV8fCIiLGF9cmV0dXJuIGwocixbe2tleTphLiRjbGVhbix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtmKGcoci5wcm90b3R5cGUpLGEuJGNsZWFuLHRoaXMpLmNhbGwodGhpcyxlKSx0aGlzLnN0eWxlPSh0PXRoaXMpLnN0eWxlP3Quc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHMqOlxzKi8sMil9KSkuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgcj12KGUsMiksbj1yWzBdLGk9clsxXTtyZXR1cm4iZm9udC1mYW1pbHkiPT09biYmdFthLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChpKSxTLmhhcyhuKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmpvaW4oIjoiKX0pKS5qb2luKCI7Iik6IiJ9fSx7a2V5OmEuJGFjY2VwdFdoaXRlc3BhY2UsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hUC5oYXModGhpc1thLiRub2RlTmFtZV0pfX0se2tleTphLiRvblRleHQsdmFsdWU6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT90aGlzW2tdPSEwOihlPWUucmVwbGFjZShBLCIiKSx0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZShPLCIgIikpKSxlJiYodGhpc1thLiRjb250ZW50XSs9ZSl9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfSxvPW51bGwsYz15KHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCI6IiwyKX0pKSk7dHJ5e2ZvcihjLnMoKTshKHQ9Yy5uKCkpLmRvbmU7KXt2YXIgdT12KHQudmFsdWUsMiksbD11WzBdLGY9dVsxXTtzd2l0Y2gobCl7Y2FzZSJmb250LWZhbWlseSI6bi50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKShmKTticmVhaztjYXNlImZvbnQtc2l6ZSI6bi5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOm4ud2VpZ2h0PWY7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjpuLnBvc3R1cmU9ZjticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjpuLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4iOnZhciBoPWYuc3BsaXQoLyBcdC8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy5nZXRNZWFzdXJlbWVudCkoZSl9KSk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aS50b3A9aS5ib3R0b209aS5sZWZ0PWkucmlnaHQ9aFswXTticmVhaztjYXNlIDI6aS50b3A9aS5ib3R0b209aFswXSxpLmxlZnQ9aS5yaWdodD1oWzFdO2JyZWFrO2Nhc2UgMzppLnRvcD1oWzBdLGkuYm90dG9tPWhbMl0saS5sZWZ0PWkucmlnaHQ9aFsxXTticmVhaztjYXNlIDQ6aS50b3A9aFswXSxpLmxlZnQ9aFsxXSxpLmJvdHRvbT1oWzJdLGkucmlnaHQ9aFszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmkudG9wPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6aS5ib3R0b209KDAscy5nZXRNZWFzdXJlbWVudCkoZik7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6aS5sZWZ0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjppLnJpZ2h0PSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGYpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOm89KDAscy5nZXRNZWFzdXJlbWVudCkoZil9fX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX1pZihlLnB1c2hEYXRhKG4saSxvKSx0aGlzW2EuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbYS4kY29udGVudF0pO2Vsc2V7dmFyIGQscD15KHRoaXNbYS4kZ2V0Q2hpbGRyZW5dKCkpO3RyeXtmb3IocC5zKCk7IShkPXAubigpKS5kb25lOyl7dmFyIGc9ZC52YWx1ZTsiI3RleHQiIT09Z1thLiRub2RlTmFtZV0/Z1thLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyhnW2EuJGNvbnRlbnRdKX19Y2F0Y2goZSl7cC5lKGUpfWZpbmFsbHl7cC5mKCl9fXImJmUucG9wRm9udCgpfX0se2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1bXTtyZXR1cm4gdGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnJ9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwIT09ci5sZW5ndGh8fHRoaXNbYS4kY29udGVudF0/KHQ9dGhpc1trXT90aGlzW2EuJGNvbnRlbnRdP3RoaXNbYS4kY29udGVudF0ucmVwbGFjZShDLCJcbiIpOnZvaWQgMDp0aGlzW2EuJGNvbnRlbnRdfHx2b2lkIDAscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1thLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6Rih0aGlzLnN0eWxlLHRoaXMsdGhpc1trXSl9LGNoaWxkcmVuOnIsdmFsdWU6dH0pKTpzLkhUTUxSZXN1bHQuRU1QVFl9fV0pLHJ9KGEuWG1sT2JqZWN0KSxJPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG47cmV0dXJuIGModGhpcyxyKSwobj10LmNhbGwodGhpcyxlLCJhIikpLmhyZWY9KDAsby5maXhVUkwpKGUuaHJlZil8fCIiLG59cmV0dXJuIGwocil9KFQpLEU9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImIiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLGYoZyhyLnByb3RvdHlwZSksYS4kcHVzaEdseXBocyx0aGlzKS5jYWxsKHRoaXMsZSksZS5wb3BGb250KCl9fV0pLHJ9KFQpLGo9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsImJvZHkiKX1yZXR1cm4gbChyLFt7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1mKGcoci5wcm90b3R5cGUpLGEuJHRvSFRNTCx0aGlzKS5jYWxsKHRoaXMsZSksbj10Lmh0bWw7cmV0dXJuIG4/KG4ubmFtZT0iZGl2IixuLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1dKSxyfShUKSxNPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJiciIpfXJldHVybiBsKHIsW3trZXk6YS4kdGV4dCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJcbiJ9fSx7a2V5OmEuJHB1c2hHbHlwaHMsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5hZGRTdHJpbmcoIlxuIil9fSx7a2V5OmEuJHRvSFRNTCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1dKSxyfShUKSxfPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJodG1sIil9cmV0dXJuIGwocixbe2tleTphLiR0b0hUTUwsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpc1thLiRleHRyYV09e2NoaWxkcmVuOnR9LHRoaXNbYS4kY2hpbGRyZW5Ub0hUTUxdKHt9KSwwPT09dC5sZW5ndGgpcmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2EuJGNvbnRlbnRdfHwiIn0pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIHI9dFswXTtpZihyLmF0dHJpYnV0ZXMmJnIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19XSkscn0oVCksTD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwiaSIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksZihnKHIucHJvdG90eXBlKSxhLiRwdXNoR2x5cGhzLHRoaXMpLmNhbGwodGhpcyxlKSxlLnBvcEZvbnQoKX19XSkscn0oVCksUj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwibGkiKX1yZXR1cm4gbChyKX0oVCksTj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwib2wiKX1yZXR1cm4gbChyKX0oVCksRD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwicCIpfXJldHVybiBsKHIsW3trZXk6YS4kcHVzaEdseXBocyx2YWx1ZTpmdW5jdGlvbihlKXtmKGcoci5wcm90b3R5cGUpLGEuJHB1c2hHbHlwaHMsdGhpcykuY2FsbCh0aGlzLGUsITEpLGUuYWRkU3RyaW5nKCJcbiIpLGUuYWRkUGFyYSgpLGUucG9wRm9udCgpfX0se2tleTphLiR0ZXh0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYS4kZ2V0UGFyZW50XSgpW2EuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcyk6ZihnKHIucHJvdG90eXBlKSxhLiR0ZXh0LHRoaXMpLmNhbGwodGhpcykrIlxuIn19XSkscn0oVCksQj1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3BhbiIpfXJldHVybiBsKHIpfShUKSxVPWZ1bmN0aW9uKGUpe2gocixlKTt2YXIgdD1wKHIpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGModGhpcyxyKSx0LmNhbGwodGhpcyxlLCJzdWIiKX1yZXR1cm4gbChyKX0oVCksJD1mdW5jdGlvbihlKXtoKHIsZSk7dmFyIHQ9cChyKTtmdW5jdGlvbiByKGUpe3JldHVybiBjKHRoaXMsciksdC5jYWxsKHRoaXMsZSwic3VwIil9cmV0dXJuIGwocil9KFQpLFg9ZnVuY3Rpb24oZSl7aChyLGUpO3ZhciB0PXAocik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYyh0aGlzLHIpLHQuY2FsbCh0aGlzLGUsInVsIil9cmV0dXJuIGwocil9KFQpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Yyh0aGlzLGUpfXJldHVybiBsKGUsbnVsbCxbe2tleTppLiRidWlsZFhGQU9iamVjdCx2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIGVbdF0ocil9fSx7a2V5OiJhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEkoZSl9fSx7a2V5OiJiIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEUoZSl9fSx7a2V5OiJib2R5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGooZSl9fSx7a2V5OiJiciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNKGUpfX0se2tleToiaHRtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfKGUpfX0se2tleToiaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMKGUpfX0se2tleToibGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUihlKX19LHtrZXk6Im9sIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSl9fSx7a2V5OiJwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQoZSl9fSx7a2V5OiJzcGFuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEIoZSl9fSx7a2V5OiJzdWIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVShlKX19LHtrZXk6InN1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyAkKGUpfX0se2tleToidWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWChlKX19XSksZX0oKTt0LlhodG1sTmFtZXNwYWNlPUh9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIwOCksYT1yKDIwNik7ZnVuY3Rpb24gaShlKXtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0saShlKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwodm9pZCAwLGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9PWkoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSwic3RyaW5nIik7aWYoIm9iamVjdCIhPT1pKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhlKX0obi5rZXkpLCJzeW1ib2wiPT09aShhKT9hOlN0cmluZyhhKSksbil9dmFyIGF9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMubmFtZXNwYWNlSWQ9dH12YXIgdCxyO3JldHVybiB0PWUsKHI9W3trZXk6bi4kYnVpbGRYRkFPYmplY3QsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGEuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19XSkmJm8odC5wcm90b3R5cGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTt0LlVua25vd25OYW1lc3BhY2U9c30sKGUsdCxyKT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG4oZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldFJlYWRlcj12b2lkIDA7dmFyIGE9cigyKSxpPXIoMTM1KSxvPXIoMTk1KTtmdW5jdGlvbiBzKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdO2EuZW51bWVyYWJsZT1hLmVudW1lcmFibGV8fCExLGEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBhJiYoYS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxpPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1uKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIGE9ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09bihhKSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGEua2V5KSwic3ltYm9sIj09PW4oaSk/aTpTdHJpbmcoaSkpLGEpfXZhciBpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZjKGUucHJvdG90eXBlLHQpLHImJmMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGwoKXtyZXR1cm4gbD0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPWgoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKGFyZ3VtZW50cy5sZW5ndGg8Mz9lOnIpOmEudmFsdWV9fSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSxmKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0saChlKX1mdW5jdGlvbiBkKGUpe3RyeXtyZXR1cm4oMCxhLnN0cmluZ1RvVVRGOFN0cmluZykoZSl9Y2F0Y2godCl7cmV0dXJuKDAsYS53YXJuKSgnVVRGLTggZGVjb2RpbmcgZmFpbGVkOiAiJy5jb25jYXQodCwnIi4nKSksZX19dmFyIHA9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHQmJmYoZSx0KX0oaSxlKTt2YXIgdCxyLGE9KHQ9aSxyPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSxmdW5jdGlvbigpe3ZhciBlLGE9aCh0KTtpZihyKXt2YXIgaT1oKHRoaXMpLmNvbnN0cnVjdG9yO2U9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMsaSl9ZWxzZSBlPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQmJigib2JqZWN0Ij09PW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSl9KHRoaXMsZSl9KTtmdW5jdGlvbiBpKGUpe3ZhciB0O3JldHVybiBzKHRoaXMsaSksKHQ9YS5jYWxsKHRoaXMsZSkpLm5vZGU9bnVsbCx0fXJldHVybiB1KGksW3trZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bChoKGkucHJvdG90eXBlKSwib25FbmRFbGVtZW50Iix0aGlzKS5jYWxsKHRoaXMsZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXRocm93IHRoaXMubm9kZT10LG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19XSksaX0oby5TaW1wbGVYTUxQYXJzZXIpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKHModGhpcyxlKSx0LmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgby5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcodC5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7dmFyIHI9bmV3IHAoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7ci5wYXJzZUZyb21TdHJpbmcodFsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXIubm9kZX19cmV0dXJuIHUoZSxbe2tleToiZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO3ZhciB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGkucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjt2YXIgcj10LmZpcnN0Q2hpbGQ7cmV0dXJuIHImJiJ2YWx1ZSI9PT1yLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZChlLnRleHRDb250ZW50KX0pKTpkKHQudGV4dENvbnRlbnQpfX1dKSxlfSgpO3QuRGF0YXNldFJlYWRlcj1nfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDA7dmFyIG49cigyKSxhPXIoMTM0KSxpPXIoMTM1KSxvPXIoMTQ2KSxzPXIoMTM2KSxjPXIoMTk2KTtmdW5jdGlvbiB1KGUpe3JldHVybiB1PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx1KGUpfWZ1bmN0aW9uIGwoKXtsPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Yyh7fSwiIil9Y2F0Y2goZSl7Yz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307Yyh5LGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLGkpJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtjKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLHMpe3ZhciBjPWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT1jLnR5cGUpe3ZhciBsPWMuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXUoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLHMpfSkpfXMoYy5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtpXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1jKHYscywiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGMoZSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGMoUy5wcm90b3R5cGUsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGModyxzLCJHZW5lcmF0b3IiKSxjKHcsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxjKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2YoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2YoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9cil7dmFyIG4sYSxpLG8scz1bXSxjPSEwLHU9ITE7dHJ5e2lmKGk9KHI9ci5jYWxsKGUpKS5uZXh0LDA9PT10KXtpZihPYmplY3QocikhPT1yKXJldHVybjtjPSExfWVsc2UgZm9yKDshKGM9KG49aS5jYWxsKHIpKS5kb25lKSYmKHMucHVzaChuLnZhbHVlKSxzLmxlbmd0aCE9PXQpO2M9ITApO31jYXRjaChlKXt1PSEwLGE9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9ci5yZXR1cm4mJihvPXIucmV0dXJuKCksT2JqZWN0KG8pIT09bykpcmV0dXJufWZpbmFsbHl7aWYodSl0aHJvdyBhfX1yZXR1cm4gc319KGUsdCl8fGZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBwKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/cChlLHQpOnZvaWQgMH19KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBwKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkodCk7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT11KGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09dShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXUoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3RyZWFtPXQsdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jYWNoZU1hcD1uZXcgTWFwLHRoaXMuX3BlbmRpbmdSZWZzPW5ldyBhLlJlZlNldCx0aGlzLnN0YXRzPW5ldyBpLkRvY1N0YXRzKHIubXNnSGFuZGxlciksdGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsLHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsfXZhciB0LHIsdSxmO3JldHVybiB0PWUscj1be2tleToiZ2V0TmV3UGVyc2lzdGVudFJlZiIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3ZhciB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksYS5SZWYuZ2V0KHQsMCl9fSx7a2V5OiJnZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksYS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfX0se2tleToicmVzZXROZXdUZW1wb3JhcnlSZWYiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9fSx7a2V5OiJzZXRTdGFydFhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfX0se2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLG89YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtvPygoMCxuLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBhLkRpY3Qpe3ZhciBzPWUuZ2V0KCJJRCIpLHU9cyYmcy5sZW5ndGg/c1swXToiIjt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCx0aGlzLmVuY3J5cHQ9bmV3IGMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSh0LHUsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7cj1lLmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHIgaW5zdGFuY2VvZiBhLkRpY3QpdHJ5e2lmKHIuZ2V0KCJQYWdlcyIpaW5zdGFuY2VvZiBhLkRpY3QpcmV0dXJuIHZvaWQodGhpcy5yb290PXIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighbyl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX19LHtrZXk6InByb2Nlc3NYUmVmVGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsYS5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIGEuRGljdHx8IXIuZGljdHx8KHI9ci5kaWN0KSwhKHIgaW5zdGFuY2VvZiBhLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtyZXR1cm4gZGVsZXRlIHRoaXMudGFibGVTdGF0ZSxyfX0se2tleToicmVhZFhSZWZUYWJsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9aS5zdHJlYW1Qb3MsZS5idWYxPWkucGFyc2VyQnVmMSxlLmJ1ZjI9aS5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gaSl8fCEoImVudHJ5Q291bnQiaW4gaSkpe2lmKCgwLGEuaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2kuZmlyc3RFbnRyeU51bT10LGkuZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBvPWkuZmlyc3RFbnRyeU51bSxzPWkuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGM9aS5lbnRyeU51bTtjPHM7YysrKXtpLnN0cmVhbVBvcz1yLnBvcyxpLmVudHJ5TnVtPWMsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciB1PXt9O3Uub2Zmc2V0PWUuZ2V0T2JqKCksdS5nZW49ZS5nZXRPYmooKTt2YXIgbD1lLmdldE9iaigpO2lmKGwgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2gobC5jbWQpe2Nhc2UiZiI6dS5mcmVlPSEwO2JyZWFrO2Nhc2UibiI6dS51bmNvbXByZXNzZWQ9ITB9aWYoIU51bWJlci5pc0ludGVnZXIodS5vZmZzZXQpfHwhTnVtYmVyLmlzSW50ZWdlcih1Lmdlbil8fCF1LmZyZWUmJiF1LnVuY29tcHJlc3NlZCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICIuY29uY2F0KG8sIiwgIikuY29uY2F0KHMpKTswPT09YyYmdS5mcmVlJiYxPT09byYmKG89MCksdGhpcy5lbnRyaWVzW2Mrb118fCh0aGlzLmVudHJpZXNbYytvXT11KX1pLmVudHJ5TnVtPTAsaS5zdHJlYW1Qb3M9ci5wb3MsaS5wYXJzZXJCdWYxPWUuYnVmMSxpLnBhcnNlckJ1ZjI9ZS5idWYyLGRlbGV0ZSBpLmZpcnN0RW50cnlOdW0sZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiB0fX0se2tleToicHJvY2Vzc1hSZWZTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXt2YXIgdD1lLmRpY3Qscj10LmdldCgiVyIpLG49dC5nZXQoIkluZGV4Iik7bnx8KG49WzAsdC5nZXQoIlNpemUiKV0pLHRoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOm4sYnl0ZVdpZHRoczpyLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX1yZXR1cm4gdGhpcy5yZWFkWFJlZlN0cmVhbShlKSxkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZSxlLmRpY3R9fSx7a2V5OiJyZWFkWFJlZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztmb3IodmFyIHI9ZCh0LmJ5dGVXaWR0aHMsMyksYT1yWzBdLGk9clsxXSxvPXJbMl0scz10LmVudHJ5UmFuZ2VzO3MubGVuZ3RoPjA7KXt2YXIgYz1kKHMsMiksdT1jWzBdLGw9Y1sxXTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6ICIuY29uY2F0KHUsIiwgIikuY29uY2F0KGwpKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogIi5jb25jYXQodSwiLCAiKS5jb25jYXQobCkpO2Zvcih2YXIgZj10LmVudHJ5TnVtO2Y8bDsrK2Ype3QuZW50cnlOdW09Zix0LnN0cmVhbVBvcz1lLnBvcztmb3IodmFyIGg9MCxwPTAsZz0wLHY9MDt2PGE7Kyt2KXt2YXIgeT1lLmdldEJ5dGUoKTtpZigtMT09PXkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtoPWg8PDh8eX0wPT09YSYmKGg9MSk7Zm9yKHZhciBtPTA7bTxpOysrbSl7dmFyIGI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1iKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtwPXA8PDh8Yn1mb3IodmFyIHc9MDt3PG87Kyt3KXt2YXIgaz1lLmdldEJ5dGUoKTtpZigtMT09PWspdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtnPWc8PDh8a312YXIgUz17fTtzd2l0Y2goUy5vZmZzZXQ9cCxTLmdlbj1nLGgpe2Nhc2UgMDpTLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOlMudW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K2ZdfHwodGhpcy5lbnRyaWVzW3UrZl09Uyl9dC5lbnRyeU51bT0wLHQuc3RyZWFtUG9zPWUucG9zLHMuc3BsaWNlKDAsMil9fX0se2tleToiaW5kZXhPYmplY3RzIix2YWx1ZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIHI9IiIsbj1lW3RdOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2Zvcih2YXIgbj1yLmxlbmd0aCxhPWUubGVuZ3RoLGk9MDt0PGE7KXtmb3IodmFyIG89MDtvPG4mJmVbdCtvXT09PXJbb107KSsrbztpZihvPj1uKWJyZWFrO3QrKyxpKyt9cmV0dXJuIGl9dmFyIHI9L1xiKGVuZG9ianxcZCtccytcZCtccytvYmp8eHJlZnx0cmFpbGVyKVxiL2cscz0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHU9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksbD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLGY9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTt2YXIgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2Zvcih2YXIgZCxwLGc9aC5nZXRCeXRlcygpLHY9KDAsbi5ieXRlc1RvU3RyaW5nKShnKSx5PWcubGVuZ3RoLG09aC5zdGFydCxiPVtdLHc9W107bTx5Oyl7dmFyIGs9Z1ttXTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTPWUoZyxtKSx4PXZvaWQgMDtpZihTLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbNF0pKSltKz10KGcsbSx1KSxiLnB1c2gobSksbSs9dChnLG0sbCk7ZWxzZSBpZih4PWMuZXhlYyhTKSl7dmFyIE89MHx4WzFdLEE9MHx4WzJdLEM9bStTLmxlbmd0aCxGPXZvaWQgMCxQPSExO2lmKHRoaXMuZW50cmllc1tPXSl7aWYodGhpcy5lbnRyaWVzW09dLmdlbj09PUEpdHJ5e25ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKEMpKX0pLmdldE9iaigpLFA9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIGkuUGFyc2VyRU9GRXhjZXB0aW9uPygwLG4ud2FybikoImluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCIuY29uY2F0KFMsJyk6ICInKS5jb25jYXQoZSwnIi4nKSk6UD0hMH19ZWxzZSBQPSEwO1AmJih0aGlzLmVudHJpZXNbT109e29mZnNldDptLWguc3RhcnQsZ2VuOkEsdW5jb21wcmVzc2VkOiEwfSksci5sYXN0SW5kZXg9Qzt2YXIgVD1yLmV4ZWModik7VD8oRj1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1UWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoVFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgJykrJ2NhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpLEYtPVRbMV0ubGVuZ3RoKzEpKTpGPXktbTt2YXIgST1nLnN1YmFycmF5KG0sbStGKSxFPXQoSSwwLGYpO0U8RiYmSVtFKzVdPDY0JiYody5wdXNoKG0taC5zdGFydCksdGhpcy54cmVmc3Rtc1ttLWguc3RhcnRdPTEpLG0rPUZ9ZWxzZSBpZihTLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1TLmxlbmd0aHx8L1xzLy50ZXN0KFNbN10pKSl7Yi5wdXNoKG0pO3ZhciBqPW0rUy5sZW5ndGgsTT12b2lkIDA7cy5sYXN0SW5kZXg9ajt2YXIgXz1zLmV4ZWModik7Xz8oTT1zLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1fWzFdJiYoKDAsbi53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoX1sxXSwnIiBhZnRlciAidHJhaWxlciIsICcpKydjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxNLT1fWzFdLmxlbmd0aCsxKSk6TT15LW0sbSs9TX1lbHNlIG0rPVMubGVuZ3RoKzF9ZWxzZSBkb3tpZigrK20+PXkpYnJlYWs7az1nW21dfXdoaWxlKDEwIT09ayYmMTMhPT1rKTtlbHNlKyttfWZvcih2YXIgTD0wLFI9dztMPFIubGVuZ3RoO0wrKyl7dmFyIE49UltMXTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goTiksdGhpcy5yZWFkWFJlZighMCl9Zm9yKHZhciBEPTAsQj1bXS5jb25jYXQoYixbImdlbmVyYXRpb25GYWxsYmFjayJdLGIpO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgVT1CW0RdO2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siIT09VSl7aC5wb3M9VTt2YXIgJD1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksWD0kLmdldE9iaigpO2lmKCgwLGEuaXNDbWQpKFgsInRyYWlsZXIiKSl7dmFyIEg9JC5nZXRPYmooKTtpZihIIGluc3RhbmNlb2YgYS5EaWN0KXt2YXIgcT0hMTt0cnl7dmFyIEc9SC5nZXQoIlJvb3QiKTtpZighKEcgaW5zdGFuY2VvZiBhLkRpY3QpKWNvbnRpbnVlO3ZhciB6PUcuZ2V0KCJQYWdlcyIpO2lmKCEoeiBpbnN0YW5jZW9mIGEuRGljdCkpY29udGludWU7dmFyIFc9ei5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihXKSYmKHE9ITApfWNhdGNoKGUpe3A9ZTtjb250aW51ZX1pZihxJiZILmhhcygiSUQiKSlyZXR1cm4gSDtkPUh9fX1lbHNle2lmKCFwKWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMH19aWYoZClyZXR1cm4gZDtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgbi5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9fSx7a2V5OiJyZWFkWFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuc3RyZWFtLHI9bmV3IFNldDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXt2YXIgYz10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGMpKXsoMCxuLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChjKSx0LnBvcz1jK3Quc3RhcnQ7dmFyIHU9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksbD11LmdldE9iaigpLGY9dm9pZCAwO2lmKCgwLGEuaXNDbWQpKGwsInhyZWYiKSl7aWYoZj10aGlzLnByb2Nlc3NYUmVmVGFibGUodSksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWYpLGw9Zi5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGwpKXt2YXIgaD1sO2ggaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbaF09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goaCkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcih1LmdldE9iaigpKSYmKDAsYS5pc0NtZCkodS5nZXRPYmooKSwib2JqIikmJihsPXUuZ2V0T2JqKCkpaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoZj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1mKSwhZil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWYuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIGEuUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19LHtrZXk6ImdldEVudHJ5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH19LHtrZXk6ImZldGNoSWZSZWYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGUgaW5zdGFuY2VvZiBhLlJlZj90aGlzLmZldGNoKGUsdCk6ZX19LHtrZXk6ImZldGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCEoZSBpbnN0YW5jZW9mIGEuUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09aSlyZXR1cm4gaSBpbnN0YW5jZW9mIGEuRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSksaTt2YXIgbz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1vKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixvKSxvO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLG4ud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxhLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e289by51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLG8sdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxvLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gbyBpbnN0YW5jZW9mIGEuRGljdD9vLm9iaklkPWUudG9TdHJpbmcoKTpvIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoby5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksb319LHtrZXk6ImZldGNoVW5jb21wcmVzc2VkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz1lLmdlbix1PWUubnVtO2lmKHQuZ2VuIT09Yyl7dmFyIGw9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48YylyZXR1cm4oMCxuLndhcm4pKGwpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoYS5SZWYuZ2V0KHUsdC5nZW4pLHQscik7dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKGwpfXZhciBmPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGg9bmV3IG8uUGFyc2VyKHtsZXhlcjpuZXcgby5MZXhlcihmKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSksZD1oLmdldE9iaigpLHA9aC5nZXRPYmooKSxnPWguZ2V0T2JqKCk7aWYoZCE9PXV8fHAhPT1jfHwhKGcgaW5zdGFuY2VvZiBhLkNtZCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09Zy5jbWQpe2lmKGcuY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYodT1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4odSkpKXJldHVybiB1O3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4odD10aGlzLmVuY3J5cHQmJiFyP2guZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odSxjKSk6aC5nZXRPYmooKSlpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHUsdCksdH19LHtrZXk6ImZldGNoQ29tcHJlc3NlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9mZnNldCxjPXRoaXMuZmV0Y2goYS5SZWYuZ2V0KHIsMCkpO2lmKCEoYyBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImJhZCBPYmpTdG0gc3RyZWFtIik7dmFyIHU9Yy5kaWN0LmdldCgiRmlyc3QiKSxsPWMuZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcih1KXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2Zvcih2YXIgZj1uZXcgby5QYXJzZXIoe2xleGVyOm5ldyBvLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxoPW5ldyBBcnJheShsKSxkPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCl7dmFyIGc9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihnKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChnKSk7dmFyIHY9Zi5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh2KSk7aFtwXT1nLGRbcF09dn1mb3IodmFyIHk9KGMuc3RhcnR8fDApK3UsbT1uZXcgQXJyYXkobCksYj0wO2I8bDsrK2Ipe3ZhciB3PWI8bC0xP2RbYisxXS1kW2JdOnZvaWQgMDtpZih3PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtLiIpO3ZhciBrPShmPW5ldyBvLlBhcnNlcih7bGV4ZXI6bmV3IG8uTGV4ZXIoYy5tYWtlU3ViU3RyZWFtKHkrZFtiXSx3LGMuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSkuZ2V0T2JqKCk7aWYobVtiXT1rLCEoayBpbnN0YW5jZW9mIHMuQmFzZVN0cmVhbSkpe3ZhciBTPWhbYl0seD10aGlzLmVudHJpZXNbU107eCYmeC5vZmZzZXQ9PT1yJiZ4Lmdlbj09PWImJnRoaXMuX2NhY2hlTWFwLnNldChTLGspfX1pZih2b2lkIDA9PT0odD1tW3QuZ2VuXSkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH19LHtrZXk6ImZldGNoSWZSZWZBc3luYyIsdmFsdWU6KGY9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0IGluc3RhbmNlb2YgYS5SZWYpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5mZXRjaEFzeW5jKHQscikpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZmV0Y2hBc3luYyIsdmFsdWU6KHU9aChsKCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBsKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYXRhbG9nT2JqIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9fV0sciYmZyh0LnByb3RvdHlwZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO3QuWFJlZj12fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciBuPXIoMik7ZnVuY3Rpb24gYSgpe2E9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIGU9e30sdD1PYmplY3QucHJvdG90eXBlLHI9dC5oYXNPd25Qcm9wZXJ0eSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZnVuY3Rpb24oZSx0LHIpe2VbdF09ci52YWx1ZX0saT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixjPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsdT1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gbChlLHQscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXtsKHt9LCIiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBmKGUsdCxyLGEpe3ZhciBpPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgcD90OnAsbz1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzPW5ldyBGKGF8fFtdKTtyZXR1cm4gbihvLCJfaW52b2tlIix7dmFsdWU6eChlLHIscyl9KSxvfWZ1bmN0aW9uIGgoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Zjt2YXIgZD17fTtmdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gdigpe312YXIgeT17fTtsKHksbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgbT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYj1tJiZtKG0oUChbXSkpKTtiJiZiIT09dCYmci5jYWxsKGIsbykmJih5PWIpO3ZhciB3PXYucHJvdG90eXBlPXAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeSk7ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUyhlLHQpe2Z1bmN0aW9uIGEobixpLG8sYyl7dmFyIHU9aChlW25dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGw9dS5hcmcsZj1sLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09cyhmKSYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXthKCJuZXh0IixlLG8sYyl9KSwoZnVuY3Rpb24oZSl7YSgidGhyb3ciLGUsbyxjKX0pKTp0LnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24oZSl7bC52YWx1ZT1lLG8obCl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoInRocm93IixlLG8sYyl9KSl9Yyh1LmFyZyl9dmFyIGk7bih0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0LG4pe2EoZSxyLHQsbil9KSl9cmV0dXJuIGk9aT9pLnRoZW4obixuKTpuKCl9fSl9ZnVuY3Rpb24geChlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPU8obyxyKTtpZihzKXtpZihzPT09ZCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBjPWgoZSx0LHIpO2lmKCJub3JtYWwiPT09Yy50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09ZCljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9Yy5hcmcpfX19ZnVuY3Rpb24gTyhlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsInRocm93Ij09PXImJmUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLE8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpfHwicmV0dXJuIiE9PXImJih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrcisiJyBtZXRob2QiKSksZDt2YXIgYT1oKG4sZS5pdGVyYXRvcix0LmFyZyk7aWYoInRocm93Ij09PWEudHlwZSlyZXR1cm4gdC5tZXRob2Q9InRocm93Iix0LmFyZz1hLmFyZyx0LmRlbGVnYXRlPW51bGwsZDt2YXIgaT1hLmFyZztyZXR1cm4gaT9pLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1pLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT10Lm1ldGhvZCYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLHQuZGVsZWdhdGU9bnVsbCxkKTppOih0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0IiksdC5kZWxlZ2F0ZT1udWxsLGQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9e3RyeUxvYzplWzBdfTsxIGluIGUmJih0LmNhdGNoTG9jPWVbMV0pLDIgaW4gZSYmKHQuZmluYWxseUxvYz1lWzJdLHQuYWZ0ZXJMb2M9ZVszXSksdGhpcy50cnlFbnRyaWVzLnB1c2godCl9ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLmNvbXBsZXRpb258fHt9O3QudHlwZT0ibm9ybWFsIixkZWxldGUgdC5hcmcsZS5jb21wbGV0aW9uPXR9ZnVuY3Rpb24gRihlKXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sZS5mb3JFYWNoKEEsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gUChlKXtpZihlKXt2YXIgdD1lW29dO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBuPS0xLGE9ZnVuY3Rpb24gdCgpe2Zvcig7KytuPGUubGVuZ3RoOylpZihyLmNhbGwoZSxuKSlyZXR1cm4gdC52YWx1ZT1lW25dLHQuZG9uZT0hMSx0O3JldHVybiB0LnZhbHVlPXZvaWQgMCx0LmRvbmU9ITAsdH07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1yZXR1cm4gZy5wcm90b3R5cGU9dixuKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6dixjb25maWd1cmFibGU6ITB9KSxuKHYsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxnLmRpc3BsYXlOYW1lPWwodix1LCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Z3x8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdik6KGUuX19wcm90b19fPXYsbChlLHUsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksbChTLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1TLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4sYSxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgbz1uZXcgUyhmKHQscixuLGEpLGkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/bzpvLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6by5uZXh0KCl9KSl9LGsodyksbCh3LHUsIkdlbmVyYXRvciIpLGwodyxvLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGwodywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxlLnZhbHVlcz1QLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQyksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGE9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbYV0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIG4oImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChpLCJjYXRjaExvYyIpLGM9ci5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZjKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFjKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBhPXRoaXMudHJ5RW50cmllc1tuXTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoYSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8YS5maW5hbGx5TG9jKXt2YXIgaT1hO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEMociksZH19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztDKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZH19LGV9ZnVuY3Rpb24gaShlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxjPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChjKTpQcm9taXNlLnJlc29sdmUoYykudGhlbihuLGEpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCh2b2lkIDAsYT1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09cyhlKXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLCJzdHJpbmciKTtpZigib2JqZWN0IiE9PXMobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKGUpfShuLmtleSksInN5bWJvbCI9PT1zKGEpP2E6U3RyaW5nKGEpKSxuKX12YXIgYX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSl7c3dpdGNoKGUgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PT1zKGUpJiZudWxsIT09ZXx8KDAsbi51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyksZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgbi5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJQYXNzd29yZEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBuLlBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IG4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cyk7Y2FzZSJVbmtub3duRXJyb3JFeGNlcHRpb24iOnJldHVybiBuZXcgbi5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyk7ZGVmYXVsdDpyZXR1cm4gbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPXRoaXM7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zb3VyY2VOYW1lPXQsdGhpcy50YXJnZXROYW1lPXIsdGhpcy5jb21PYmo9bix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PWEuc291cmNlTmFtZSlpZih0LnN0cmVhbSlhLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuY2FsbGJhY2spe3ZhciByPXQuY2FsbGJhY2tJZCxpPWEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChyKSk7aWYoZGVsZXRlIGEuY2FsbGJhY2tDYXBhYmlsaXRpZXNbcl0sMT09PXQuY2FsbGJhY2spaS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZigyIT09dC5jYWxsYmFjayl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZSIpO2kucmVqZWN0KGModC5yZWFzb24pKX19ZWxzZXt2YXIgbz1hLmFjdGlvbkhhbmRsZXJbdC5hY3Rpb25dO2lmKCFvKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7aWYodC5jYWxsYmFja0lkKXt2YXIgcz1hLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobyh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTp1LGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpjKGUpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP2EuX2NyZWF0ZVN0cmVhbVNpbmsodCk6byh0LmRhdGEpfX0sbi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9dmFyIHQscixzLHU7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fX0se2tleToic2VuZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfX0se2tleToic2VuZFdpdGhQcm9taXNlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5jYWxsYmFja0lkKyssaT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LHIpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9fSx7a2V5OiJzZW5kV2l0aFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGk9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSx1PXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBjPSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6YyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX0sbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSxhKSxjLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gaS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGwucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOnUsc3RyZWFtOjYsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO3ZhciB0PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGkuc3RyZWFtQ29udHJvbGxlcnNbb10uY2FuY2VsQ2FsbD10LGkuc3RyZWFtQ29udHJvbGxlcnNbb10uaXNDbG9zZWQ9ITAsbC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6dSxzdHJlYW06MSxzdHJlYW1JZDpvLHJlYXNvbjpjKGUpfSksdC5wcm9taXNlfX0scil9fSx7a2V5OiJfY3JlYXRlU3RyZWFtU2luayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcyxzPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPW8sYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9fSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjMsc3RyZWFtSWQ6dH0pLGRlbGV0ZSBvLnN0cmVhbVNpbmtzW3RdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7KDAsbi5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIiksdGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsaS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NSxzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSkpfSxzaW5rQ2FwYWJpbGl0eTooMCxuLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTt1LnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSx1LnJlYWR5PXUuc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPXUsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsdSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmMoZSl9KX0pKX19LHtrZXk6Il9wcm9jZXNzU3RyZWFtTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLG89dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxzPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP28uc3RhcnRDYWxsLnJlc29sdmUoKTpvLnN0YXJ0Q2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/by5wdWxsQ2FsbC5yZXNvbHZlKCk6by5wdWxsQ2FsbC5yZWplY3QoYyhlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighcyl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31zLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnMuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHMuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShzLm9uUHVsbCYmcy5vblB1bGwoKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTphLHN0cmVhbTo3LHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjcsc3RyZWFtSWQ6dCxyZWFzb246YyhlKX0pfSkpO2JyZWFrO2Nhc2UgNDppZigoMCxuLmFzc2VydCkobywiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5jb250cm9sbGVyLmVucXVldWUoZS5jaHVuayk7YnJlYWs7Y2FzZSAzOmlmKCgwLG4uYXNzZXJ0KShvLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uaXNDbG9zZWQpYnJlYWs7by5pc0Nsb3NlZD0hMCxvLmNvbnRyb2xsZXIuY2xvc2UoKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSA1OigwLG4uYXNzZXJ0KShvLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLG8uY29udHJvbGxlci5lcnJvcihjKGUucmVhc29uKSksdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihvLHQpO2JyZWFrO2Nhc2UgMjplLnN1Y2Nlc3M/by5jYW5jZWxDYWxsLnJlc29sdmUoKTpvLmNhbmNlbENhbGwucmVqZWN0KGMoZS5yZWFzb24pKSx0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKG8sdCk7YnJlYWs7Y2FzZSAxOmlmKCFzKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KHMub25DYW5jZWwmJnMub25DYW5jZWwoYyhlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOmEsc3RyZWFtOjIsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6YSxzdHJlYW06MixzdHJlYW1JZDp0LHJlYXNvbjpjKGUpfSl9KSkscy5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoYyhlLnJlYXNvbikpLHMuaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19fSx7a2V5OiJfZGVsZXRlU3RyZWFtQ29udHJvbGxlciIsdmFsdWU6KHM9YSgpLm1hcmsoKGZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixQcm9taXNlLmFsbFNldHRsZWQoW3Quc3RhcnRDYWxsJiZ0LnN0YXJ0Q2FsbC5wcm9taXNlLHQucHVsbENhbGwmJnQucHVsbENhbGwucHJvbWlzZSx0LmNhbmNlbENhbGwmJnQuY2FuY2VsQ2FsbC5wcm9taXNlXSk7Y2FzZSAyOmRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSksdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3ZhciBhPXMuYXBwbHkoZSx0KTtmdW5jdGlvbiBvKGUpe2koYSxyLG4sbyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2koYSxyLG4sbyxjLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfSxmdW5jdGlvbihlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19XSxyJiZvKHQucHJvdG90eXBlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9KCk7dC5NZXNzYWdlSGFuZGxlcj11fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGV29ya2VyU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDIpO2Z1bmN0aW9uIGEoKXthPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBlPXt9LHQ9T2JqZWN0LnByb3RvdHlwZSxyPXQuaGFzT3duUHJvcGVydHksbj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sbz1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHU9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSwiIil9Y2F0Y2goZSl7bD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gZihlLHQscixhKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHA/dDpwLG89T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgRihhfHxbXSk7cmV0dXJuIG4obywiX2ludm9rZSIse3ZhbHVlOngoZSxyLHMpfSksb31mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPWY7dmFyIGQ9e307ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHYoKXt9dmFyIHk9e307bCh5LG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG09T2JqZWN0LmdldFByb3RvdHlwZU9mLGI9bSYmbShtKFAoW10pKSk7YiYmYiE9PXQmJnIuY2FsbChiLG8pJiYoeT1iKTt2YXIgdz12LnByb3RvdHlwZT1wLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkpO2Z1bmN0aW9uIGsoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbih0KXtsKGUsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfSkpfSkpfWZ1bmN0aW9uIFMoZSx0KXtmdW5jdGlvbiBhKG4saSxvLGMpe3ZhciB1PWgoZVtuXSxlLGkpO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLGY9bC52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXMoZikmJnIuY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7YSgibmV4dCIsZSxvLGMpfSksKGZ1bmN0aW9uKGUpe2EoInRocm93IixlLG8sYyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2wudmFsdWU9ZSxvKGwpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBhKCJ0aHJvdyIsZSxvLGMpfSkpfWModS5hcmcpfXZhciBpO24odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxuKXthKGUscix0LG4pfSkpfXJldHVybiBpPWk/aS50aGVuKG4sbik6bigpfX0pfWZ1bmN0aW9uIHgoZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1PKG8scik7aWYocyl7aWYocz09PWQpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgYz1oKGUsdCxyKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixjLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmMuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09Yy50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWMuYXJnKX19fWZ1bmN0aW9uIE8oZSx0KXt2YXIgcj10Lm1ldGhvZCxuPWUuaXRlcmF0b3Jbcl07aWYodm9pZCAwPT09bilyZXR1cm4gdC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1yJiZlLml0ZXJhdG9yLnJldHVybiYmKHQubWV0aG9kPSJyZXR1cm4iLHQuYXJnPXZvaWQgMCxPKGUsdCksInRocm93Ij09PXQubWV0aG9kKXx8InJldHVybiIhPT1yJiYodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK3IrIicgbWV0aG9kIikpLGQ7dmFyIGE9aChuLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1hLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9YS5hcmcsdC5kZWxlZ2F0ZT1udWxsLGQ7dmFyIGk9YS5hcmc7cmV0dXJuIGk/aS5kb25lPyh0W2UucmVzdWx0TmFtZV09aS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZCk6aToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBBKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEMoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEYoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChBLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbj0tMSxhPWZ1bmN0aW9uIHQoKXtmb3IoOysrbjxlLmxlbmd0aDspaWYoci5jYWxsKGUsbikpcmV0dXJuIHQudmFsdWU9ZVtuXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6VH19ZnVuY3Rpb24gVCgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIGcucHJvdG90eXBlPXYsbih3LCJjb25zdHJ1Y3RvciIse3ZhbHVlOnYsY29uZmlndXJhYmxlOiEwfSksbih2LCJjb25zdHJ1Y3RvciIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwfSksZy5kaXNwbGF5TmFtZT1sKHYsdSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxlLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWd8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LGUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHYpOihlLl9fcHJvdG9fXz12LGwoZSx1LCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcpLGV9LGUuYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LGsoUy5wcm90b3R5cGUpLGwoUy5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9UyxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEsaSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIG89bmV3IFMoZih0LHIsbixhKSxpKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpP286by5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOm8ubmV4dCgpfSkpfSxrKHcpLGwodyx1LCJHZW5lcmF0b3IiKSxsKHcsbywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHcsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGUpLHI9W107Zm9yKHZhciBuIGluIHQpci5wdXNoKG4pO3JldHVybiByLnJldmVyc2UoKSxmdW5jdGlvbiBlKCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiB0KXJldHVybiBlLnZhbHVlPW4sZS5kb25lPSExLGV9cmV0dXJuIGUuZG9uZT0hMCxlfX0sZS52YWx1ZXM9UCxGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RixyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD12b2lkIDAsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKEMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKSJ0Ij09PXQuY2hhckF0KDApJiZyLmNhbGwodGhpcyx0KSYmIWlzTmFOKCt0LnNsaWNlKDEpKSYmKHRoaXNbdF09dm9pZCAwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciB0PXRoaXM7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBvLnR5cGU9InRocm93IixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSwhIW59Zm9yKHZhciBhPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIGk9dGhpcy50cnlFbnRyaWVzW2FdLG89aS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWkudHJ5TG9jKXJldHVybiBuKCJlbmQiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoaSwiY2F0Y2hMb2MiKSxjPXIuY2FsbChpLCJmaW5hbGx5TG9jIik7aWYocyYmYyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIG4oaS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gbihpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbbl07aWYoYS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGEsImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGEuZmluYWxseUxvYyl7dmFyIGk9YTticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLGQpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksZH0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxDKHIpLGR9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIGE9bi5hcmc7QyhyKX1yZXR1cm4gYX19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTp0LG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz12b2lkIDApLGR9fSxlfWZ1bmN0aW9uIGkoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksYz1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2kobyxuLGEscyxjLCJuZXh0IixlKX1mdW5jdGlvbiBjKGUpe2kobyxuLGEscyxjLCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxzKGUpfWZ1bmN0aW9uIGMoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB1KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKHZvaWQgMCxhPWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPT1zKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT09cyhuKSlyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KG4ua2V5KSwic3ltYm9sIj09PXMoYSk/YTpTdHJpbmcoYSkpLG4pfXZhciBhfWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZsKGUucHJvdG90eXBlLHQpLHImJmwoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfXZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIGYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgZCh0aGlzLl9tc2dIYW5kbGVyKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn19LHtrZXk6ImdldFJhbmdlUmVhZGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBwKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKTt2YXIgdCxyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gYyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2MoZSx0KTp2b2lkIDB9fShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsYT1mdW5jdGlvbigpe307cmV0dXJue3M6YSxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6YX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpO3RyeXtmb3Ioci5zKCk7ISh0PXIubigpKS5kb25lOyl0LnZhbHVlLmNhbmNlbChlKX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fV0pLGV9KCk7dC5QREZXb3JrZXJTdHJlYW09aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dGhpczt1KHRoaXMsZSksdGhpcy5fbXNnSGFuZGxlcj10LHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpLHRoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZnVuY3Rpb24oZSl7ci5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCxyLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCxyLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJoZWFkZXJzUmVhZHkiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6InJlYWQiLHZhbHVlOih0PW8oYSgpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRlci5yZWFkKCk7Y2FzZSAyOmlmKHQ9ZS5zZW50LHI9dC52YWx1ZSwhdC5kb25lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6ci5idWZmZXIsZG9uZTohMX0pO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19XSksZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dSh0aGlzLGUpLHRoaXMuX21zZ0hhbmRsZXI9bix0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgYT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOnQsZW5kOnJ9KTt0aGlzLl9yZWFkZXI9YS5nZXRSZWFkZXIoKX12YXIgdDtyZXR1cm4gZihlLFt7a2V5OiJpc1N0cmVhbWluZ1N1cHBvcnRlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSx7a2V5OiJyZWFkIix2YWx1ZToodD1vKGEoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYSgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgMjppZih0PWUuc2VudCxyPXQudmFsdWUsIXQuZG9uZSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIuYnVmZmVyLGRvbmU6ITF9KTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fV0pLGV9KCl9XSx0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGE9dFtuXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbbl0oaSxpLmV4cG9ydHMsciksaS5leHBvcnRzfXIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxyLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9O3JldHVybigoKT0+e3ZhciBlPW47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9cigxKX0pKCksbn0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKTs="}));var Z}waitPdfjsLoad(){return new Promise((Z=>{const l=()=>{window.pdfjsLib?Z():this.loopCheckTimer=setTimeout(l,10)};l()}))}checkPdfLib(){return window.pdfjsLib?Promise.resolve():bX?this.waitPdfjsLoad():(bX=!0,this.installPdfScript())}getDocument(l){return window.pdfjsLib.getDocument({url:Z(l),httpHeaders:this.requestOptions&&this.requestOptions.headers,withCredentials:this.requestOptions&&this.requestOptions.withCredentials,cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...dX(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(Z){return this.pdfDocument.getPage(Z).then((l=>{const m=l.getViewport({scale:2}),d=window.devicePixelRatio>2?1.5:2;let[b,G]=this.createCanvas(Z);b.width=Math.floor(m.width*d),b.height=Math.floor(m.height*d);let X=Math.floor(m.width),c=Math.floor(m.height);if(this.options.width){let Z=this.options.width/X;X=Math.floor(this.options.width),c=Math.floor(c*Z)}let W=this.wrapperMain.getBoundingClientRect().width-20;if(X>W){let Z=W/X;X=Math.floor(W),c=Math.floor(c*Z)}b.style.width=X+"px",b.style.height=c+"px";const i=1!==d?[d,0,0,d,0,0]:null;return l.render({canvasContext:G,transform:i,viewport:m}).promise.then((()=>{if(this.pdfDocument.numPages>Z)return this.renderSinglePage(Z+1)}))}))}renderPage(){if(this.wrapperMain){let Z=this.wrapperMain.querySelectorAll("canvas");if(Z.length>this.pdfDocument.numPages)for(let l=Z.length-1;l>=this.pdfDocument.numPages;l--)this.wrapperMain.removeChild(Z[l])}else this.createWrapperMain();return this.renderSinglePage(1)}clearAllCanvas(){this.wrapperMain&&(this.wrapper.removeChild(this.wrapperMain),this.wrapperMain=null)}setOptions(Z){this.options=Z}setRequestOptions(Z){this.requestOptions=Z}preview(Z){return new Promise(((l,m)=>{if(!Z)return this.clearAllCanvas(),void m(new Error("预览地址不能为空"));this.checkPdfLib().then((d=>{this.getDocument(Z).then((Z=>{this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=Z,this.renderPage().then((Z=>{l()})).catch((Z=>{this.clearAllCanvas(),m(Z)}))})).catch((Z=>{this.clearAllCanvas(),m(Z)}))})).catch((Z=>{this.clearAllCanvas(),m(Z)}))}))}rerender(){return this.renderPage().then((Z=>Promise.resolve())).catch((Z=>(this.clearAllCanvas(),Promise.reject(Z))))}save(Z){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then((m=>{l(Z||`js-preview-pdf-${(new Date).getTime()}.pdf`,m.buffer)}))}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument&&this.pdfDocument.destroy(),this.pdfDocument=null,this.loopCheckTimer&&clearTimeout(this.loopCheckTimer)}}return{init:function(Z,l,m){return new XX(Z,l,m)}}})); diff --git a/cdn-demo/pdf.html b/cdn-demo/pdf.html new file mode 100644 index 0000000..7aa46d0 --- /dev/null +++ b/cdn-demo/pdf.html @@ -0,0 +1,20 @@ + + + + + pdf预览 + + + +
+ + + + \ No newline at end of file diff --git a/vue2-demo/README.md b/vue2-demo/README.md index d6f0c10..fa68e53 100644 --- a/vue2-demo/README.md +++ b/vue2-demo/README.md @@ -1,24 +1,3 @@ -# vue2-demo +vue2.7 预览demo -## Project setup -``` -npm install -``` - -### Compiles and hot-reloads for development -``` -npm run serve -``` - -### Compiles and minifies for production -``` -npm run build -``` - -### Lints and fixes files -``` -npm run lint -``` - -### Customize configuration -See [Configuration Reference](https://cli.vuejs.org/config/). +包括通过vue组件预览和纯js预览两种方式。 diff --git a/vue3-demo/README.md b/vue3-demo/README.md index 96712d1..4e22bda 100644 --- a/vue3-demo/README.md +++ b/vue3-demo/README.md @@ -1,24 +1,3 @@ -# vue3-demo +vue3-demo -## Project setup -``` -npm install -``` - -### Compiles and hot-reloads for development -``` -npm run serve -``` - -### Compiles and minifies for production -``` -npm run build -``` - -### Lints and fixes files -``` -npm run lint -``` - -### Customize configuration -See [Configuration Reference](https://cli.vuejs.org/config/). +包括通过vue组件预览和纯js预览两种方式。 \ No newline at end of file